commit eb2ff4362878d0e348c67c606a32e8d332e2454d Author: Christoph Reiter Date: Fri Dec 8 16:56:10 2017 +0100 demo: pep8 fixes The demo app now gets analyzed by pep8 since it was moved to the examples. examples/demo/demos/Css/css_accordion.py | 1 + examples/demo/demos/Entry/entry_buffer.py | 1 + examples/demo/demos/Entry/entry_completion.py | 1 + examples/demo/demos/Entry/search_entry.py | 1 + examples/demo/demos/IconView/iconviewbasics.py | 1 + examples/demo/demos/IconView/iconviewedit.py | 1 + examples/demo/demos/TreeView/liststore.py | 2 + examples/demo/demos/TreeView/treemodel_filelist.py | 1 + examples/demo/demos/TreeView/treemodel_filetree.py | 1 + examples/demo/demos/appwindow.py | 1 + examples/demo/demos/assistant.py | 1 + examples/demo/demos/builder.py | 1 + examples/demo/demos/button_box.py | 1 + examples/demo/demos/clipboard.py | 1 + examples/demo/demos/colorselector.py | 1 + examples/demo/demos/combobox.py | 1 + examples/demo/demos/dialogs.py | 1 + examples/demo/demos/drawingarea.py | 11 +- examples/demo/demos/expander.py | 1 + examples/demo/demos/flowbox.py | 1332 ++++++++++---------- examples/demo/demos/images.py | 1 + examples/demo/demos/infobars.py | 1 + examples/demo/demos/links.py | 1 + examples/demo/demos/menus.py | 1 + examples/demo/demos/pickers.py | 1 + examples/demo/demos/pixbuf.py | 1 + examples/demo/demos/printing.py | 1 + examples/demo/demos/rotatedtext.py | 1 + 28 files changed, 700 insertions(+), 670 deletions(-) commit af9ddf322f7cf377996b8fa29906bd4b254dc001 Author: Christoph Reiter Date: Fri Dec 8 16:40:33 2017 +0100 Fix ctypes.PyDLL construction under Windows We require the ctypes.pythonapi interface but can't use the global one since we have to change it which could potentially break other users of that interface. Turns out simply passing None to PyDLL() only works on Unix to load the CPython library. Instead copy the logic from the ctypes module in the stdlib. https://bugzilla.gnome.org/show_bug.cgi?id=622084 gi/_ossighelper.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) commit d19aca693950c0edb02b226db8bcf81a5304870e Author: Christoph Reiter Date: Fri Dec 8 14:40:58 2017 +0100 configure.ac: Error out in case autoconf-archive isn't installed Check whether the AX_IS_RELEASE macro is defined and if not print a proper error message. https://bugzilla.gnome.org/show_bug.cgi?id=784428 configure.ac | 3 +++ 1 file changed, 3 insertions(+) commit 26001a6ae42f8e10ed4c44bc9414e219b946cee0 Author: Christoph Reiter Date: Wed Dec 6 18:37:45 2017 +0100 Move pygi-convert.sh into tools MANIFEST.in | 2 +- Makefile.am | 2 +- pygi-convert.sh => tools/pygi-convert.sh | 0 3 files changed, 2 insertions(+), 2 deletions(-) commit dd1507be6c198319304342b73c8ec1ec2a102145 Author: Christoph Reiter Date: Wed Dec 6 18:26:13 2017 +0100 README: Convert to reST MANIFEST.in | 2 +- Makefile.am | 3 ++- README => README.rst | 56 ++++++++++++++++++++++++++++++++++------------------ 3 files changed, 40 insertions(+), 21 deletions(-) commit e4a52b9f99667df98806d0c4ee78c2909ead27e1 Author: Christoph Reiter Date: Wed Dec 6 17:53:51 2017 +0100 demo: Move demo into examples and dist it We might want to install it in the future, but until then at least put it into the tarball. https://bugzilla.gnome.org/show_bug.cgi?id=735918 MANIFEST.in | 3 +-- examples/Makefile.am | 7 ++++++- {demo => examples/demo}/demo.py | 0 {demo => examples/demo}/demos/Css/__init__.py | 0 {demo => examples/demo}/demos/Css/css_accordion.py | 0 {demo => examples/demo}/demos/Css/css_basics.py | 0 {demo => examples/demo}/demos/Css/css_multiplebgs.py | 0 {demo => examples/demo}/demos/Entry/__init__.py | 0 {demo => examples/demo}/demos/Entry/entry_buffer.py | 0 {demo => examples/demo}/demos/Entry/entry_completion.py | 0 {demo => examples/demo}/demos/Entry/search_entry.py | 0 {demo => examples/demo}/demos/IconView/__init__.py | 0 {demo => examples/demo}/demos/IconView/iconviewbasics.py | 0 {demo => examples/demo}/demos/IconView/iconviewedit.py | 0 {demo => examples/demo}/demos/TreeView/__init__.py | 0 {demo => examples/demo}/demos/TreeView/liststore.py | 0 .../demo}/demos/TreeView/treemodel_filelist.py | 0 .../demo}/demos/TreeView/treemodel_filetree.py | 0 {demo => examples/demo}/demos/TreeView/treemodel_large.py | 0 {demo => examples/demo}/demos/__init__.py | 0 {demo => examples/demo}/demos/appwindow.py | 0 {demo => examples/demo}/demos/assistant.py | 0 {demo => examples/demo}/demos/builder.py | 0 {demo => examples/demo}/demos/button_box.py | 0 {demo => examples/demo}/demos/clipboard.py | 0 {demo => examples/demo}/demos/colorselector.py | 0 {demo => examples/demo}/demos/combobox.py | 0 {demo => examples/demo}/demos/data/alphatest.png | Bin {demo => examples/demo}/demos/data/apple-red.png | Bin {demo => examples/demo}/demos/data/background.jpg | Bin {demo => examples/demo}/demos/data/brick.png | Bin {demo => examples/demo}/demos/data/brick2.png | Bin {demo => examples/demo}/demos/data/css_accordion.css | 0 {demo => examples/demo}/demos/data/css_basics.css | 0 {demo => examples/demo}/demos/data/css_multiplebgs.css | 0 {demo => examples/demo}/demos/data/cssview.css | 0 {demo => examples/demo}/demos/data/demo.gresource | Bin {demo => examples/demo}/demos/data/demo.gresource.xml | 0 {demo => examples/demo}/demos/data/demo.ui | 0 {demo => examples/demo}/demos/data/floppybuddy.gif | Bin {demo => examples/demo}/demos/data/gnome-applets.png | Bin {demo => examples/demo}/demos/data/gnome-calendar.png | Bin {demo => examples/demo}/demos/data/gnome-foot.png | Bin {demo => examples/demo}/demos/data/gnome-fs-directory.png | Bin {demo => examples/demo}/demos/data/gnome-fs-regular.png | Bin {demo => examples/demo}/demos/data/gnome-gimp.png | Bin {demo => examples/demo}/demos/data/gnome-gmush.png | Bin {demo => examples/demo}/demos/data/gnome-gsame.png | Bin {demo => examples/demo}/demos/data/gnu-keys.png | Bin {demo => examples/demo}/demos/data/gtk-logo-rgb.gif | Bin {demo => examples/demo}/demos/data/reset.css | 0 {demo => examples/demo}/demos/dialogs.py | 0 {demo => examples/demo}/demos/drawingarea.py | 0 {demo => examples/demo}/demos/expander.py | 0 {demo => examples/demo}/demos/flowbox.py | 0 {demo => examples/demo}/demos/images.py | 0 {demo => examples/demo}/demos/infobars.py | 0 {demo => examples/demo}/demos/links.py | 0 {demo => examples/demo}/demos/menus.py | 0 {demo => examples/demo}/demos/pickers.py | 0 {demo => examples/demo}/demos/pixbuf.py | 0 {demo => examples/demo}/demos/printing.py | 0 {demo => examples/demo}/demos/rotatedtext.py | 0 {demo => examples/demo}/demos/test.py | 0 64 files changed, 7 insertions(+), 3 deletions(-) commit f8ff3b5e0e769e6db1509426af28728129780529 Author: Gian Mario Tagliaretti Date: Thu Sep 4 08:51:10 2014 +0100 demo: Add new Gtk.FlowBox example Added a new example for the Gtk.FlowBox class added in GTK+ 3.12. This example additionally makes use of Gtk.HeaderBar. https://bugzilla.gnome.org/show_bug.cgi?id=735918 demo/demos/flowbox.py | 750 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 750 insertions(+) commit 3f4a176c77a8026949c04d85d0a822554c4c661c Author: Simon Feltman Date: Tue Sep 2 10:53:29 2014 -0700 demo: Use HeaderBar for main app window https://bugzilla.gnome.org/show_bug.cgi?id=735918 demo/demo.py | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) commit 995f1e72eed0970d56d871ed8452c61f92a40696 Author: Simon Feltman Date: Tue Sep 2 11:10:31 2014 -0700 demo: PyFlakes and PEP8 fixes Since PyFlakes and PEP8 are not currently run on the demo due to it not being packaged, manually check and fix this for now. https://bugzilla.gnome.org/show_bug.cgi?id=735918 demo/demo.py | 2 +- demo/demos/Entry/entry_buffer.py | 2 +- demo/demos/Entry/entry_completion.py | 2 +- demo/demos/clipboard.py | 6 +----- demo/demos/combobox.py | 2 +- 5 files changed, 5 insertions(+), 9 deletions(-) commit 5d2ce69ed51aec62872ebb2a129c2b8a6b4256af Author: Simon Feltman Date: Tue Sep 2 11:01:55 2014 -0700 demo: Rename gtk-demo.py to demo.py Remove GTK+ specificity which also allows the demo app to be used as one of the demos itself. https://bugzilla.gnome.org/show_bug.cgi?id=735918 demo/{gtk-demo.py => demo.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) commit 7e48d91a5e1f180cbe4adea41bd41939c26c77b0 Author: Simon Feltman Date: Mon Sep 1 22:04:29 2014 -0700 demo: Rename demos/gtk-demo to simply demo Move the entire "pygobject/demos/gtk-demo" folder to "pygobject/demo". Since we only have a single demo app which should be used for all platform demos we can remove the diectory obfuscation. https://bugzilla.gnome.org/show_bug.cgi?id=735918 {demos/gtk-demo => demo}/demos/Css/__init__.py | 0 {demos/gtk-demo => demo}/demos/Css/css_accordion.py | 0 {demos/gtk-demo => demo}/demos/Css/css_basics.py | 0 {demos/gtk-demo => demo}/demos/Css/css_multiplebgs.py | 0 {demos/gtk-demo => demo}/demos/Entry/__init__.py | 0 {demos/gtk-demo => demo}/demos/Entry/entry_buffer.py | 0 {demos/gtk-demo => demo}/demos/Entry/entry_completion.py | 0 {demos/gtk-demo => demo}/demos/Entry/search_entry.py | 0 {demos/gtk-demo => demo}/demos/IconView/__init__.py | 0 {demos/gtk-demo => demo}/demos/IconView/iconviewbasics.py | 0 {demos/gtk-demo => demo}/demos/IconView/iconviewedit.py | 0 {demos/gtk-demo => demo}/demos/TreeView/__init__.py | 0 {demos/gtk-demo => demo}/demos/TreeView/liststore.py | 0 .../gtk-demo => demo}/demos/TreeView/treemodel_filelist.py | 0 .../gtk-demo => demo}/demos/TreeView/treemodel_filetree.py | 0 {demos/gtk-demo => demo}/demos/TreeView/treemodel_large.py | 0 {demos/gtk-demo => demo}/demos/__init__.py | 0 {demos/gtk-demo => demo}/demos/appwindow.py | 0 {demos/gtk-demo => demo}/demos/assistant.py | 0 {demos/gtk-demo => demo}/demos/builder.py | 0 {demos/gtk-demo => demo}/demos/button_box.py | 0 {demos/gtk-demo => demo}/demos/clipboard.py | 0 {demos/gtk-demo => demo}/demos/colorselector.py | 0 {demos/gtk-demo => demo}/demos/combobox.py | 0 {demos/gtk-demo => demo}/demos/data/alphatest.png | Bin {demos/gtk-demo => demo}/demos/data/apple-red.png | Bin {demos/gtk-demo => demo}/demos/data/background.jpg | Bin {demos/gtk-demo => demo}/demos/data/brick.png | Bin {demos/gtk-demo => demo}/demos/data/brick2.png | Bin {demos/gtk-demo => demo}/demos/data/css_accordion.css | 0 {demos/gtk-demo => demo}/demos/data/css_basics.css | 0 {demos/gtk-demo => demo}/demos/data/css_multiplebgs.css | 0 {demos/gtk-demo => demo}/demos/data/cssview.css | 0 {demos/gtk-demo => demo}/demos/data/demo.gresource | Bin {demos/gtk-demo => demo}/demos/data/demo.gresource.xml | 0 {demos/gtk-demo => demo}/demos/data/demo.ui | 0 {demos/gtk-demo => demo}/demos/data/floppybuddy.gif | Bin {demos/gtk-demo => demo}/demos/data/gnome-applets.png | Bin {demos/gtk-demo => demo}/demos/data/gnome-calendar.png | Bin {demos/gtk-demo => demo}/demos/data/gnome-foot.png | Bin {demos/gtk-demo => demo}/demos/data/gnome-fs-directory.png | Bin {demos/gtk-demo => demo}/demos/data/gnome-fs-regular.png | Bin {demos/gtk-demo => demo}/demos/data/gnome-gimp.png | Bin {demos/gtk-demo => demo}/demos/data/gnome-gmush.png | Bin {demos/gtk-demo => demo}/demos/data/gnome-gsame.png | Bin {demos/gtk-demo => demo}/demos/data/gnu-keys.png | Bin {demos/gtk-demo => demo}/demos/data/gtk-logo-rgb.gif | Bin {demos/gtk-demo => demo}/demos/data/reset.css | 0 {demos/gtk-demo => demo}/demos/dialogs.py | 0 {demos/gtk-demo => demo}/demos/drawingarea.py | 0 {demos/gtk-demo => demo}/demos/expander.py | 0 {demos/gtk-demo => demo}/demos/images.py | 0 {demos/gtk-demo => demo}/demos/infobars.py | 0 {demos/gtk-demo => demo}/demos/links.py | 0 {demos/gtk-demo => demo}/demos/menus.py | 0 {demos/gtk-demo => demo}/demos/pickers.py | 0 {demos/gtk-demo => demo}/demos/pixbuf.py | 0 {demos/gtk-demo => demo}/demos/printing.py | 0 {demos/gtk-demo => demo}/demos/rotatedtext.py | 0 {demos/gtk-demo => demo}/demos/test.py | 0 {demos/gtk-demo => demo}/gtk-demo.py | 0 61 files changed, 0 insertions(+), 0 deletions(-) commit 1ea36ccfc755693b9ce4cf28be549704bf5370d3 Author: Christoph Reiter Date: Wed Dec 6 16:54:54 2017 +0100 Remove AUTHORS file No need to duplicate that information over and over. It's in the README and .doap file still AUTHORS | 11 ----------- MANIFEST.in | 1 - README | 4 ++-- 3 files changed, 2 insertions(+), 14 deletions(-) commit 9462873823a5459276400c0d6cf11e084b681751 Author: Christoph Reiter Date: Wed Dec 6 15:55:54 2017 +0100 Remove pre-commit.hook It was obviously not used in some time as the git command doesn't exist anymore. If we ever get per pull/merge request CI we can look into bringing something like this back. MANIFEST.in | 1 - pre-commit.hook | 39 --------------------------------------- 2 files changed, 40 deletions(-) commit 3e455944f5835c750911d3178a0607201f23f1a8 Author: Christoph Reiter Date: Mon Dec 4 15:33:00 2017 +0100 setup.py: Port to distutils/setuptools Instead of wrapping autotools add a proper setuptools based build system. Compared to the autotools one this does not install .pc files or headers and does not allow running tests. It uses pkg-config for discovering dependencies and explictely searches for .pc files in the Python prefix so that pycairo installations in a virtualenv are discovered. When using MSVC, pkg-config is skipped and it is assumend that INCLUDE and LIB is properly set up. Version information and requirements are parsed from configure.ac, package metadata is parsed from PKG-INFO.in. Also adds a "setup.py distcheck" command which makes sure all tracked files end up in the tarball and that the tarball builds (no tests are run atm). https://bugzilla.gnome.org/show_bug.cgi?id=789211 .gitignore | 1 + MANIFEST.in | 20 +++ Makefile.am | 3 +- PKG-INFO.in | 8 +- configure.ac | 3 +- setup.py | 409 +++++++++++++++++++++++++++++++++++++++++++++++------------ 6 files changed, 359 insertions(+), 85 deletions(-) commit 58f677bfaa0f117465a9e2146c5d83768b5a76ac Author: Christoph Reiter Date: Fri Nov 24 13:11:26 2017 +0100 Install a default SIGINT handler for functions which start an event loop Currently ctrl+c on a program blocked on Gtk.main() will raise an exception but not return control. While it's easy to set up the proper signal handling and stop the event loop or execute some other application shutdown code it's nice to have a good default behaviour for small prototypes/examples or when testing some code in an interactive console. This adds a context manager which registers a SIGINT handler only in case the default Python signal handler is active and restores the original handle afterwards. Since signal handlers registered through g_unix_signal_add() are not detected by Python's signal module we use PyOS_getsig() through ctypes to detect if the signal handler is changed from outside. In case of nested event loops, all of them will be aborted. In case an event loop is started in a thread, nothing will happen. The context manager is used in the overrides for Gtk.main(), Gtk.Dialog.run(), Gio.Application.run() and GLib.MainLoop.run() This also fixes GLib.MainLoop.run() replacing a non-default signal handler and not restoring the default one: https://bugzilla.gnome.org/show_bug.cgi?id=698623 https://bugzilla.gnome.org/show_bug.cgi?id=622084 gi/_ossighelper.py | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++ gi/overrides/GLib.py | 31 +++----------- gi/overrides/Gio.py | 7 ++-- gi/overrides/Gtk.py | 12 +++--- tests/test_ossig.py | 73 +++++++++++++++++++++++++++++++- 5 files changed, 203 insertions(+), 35 deletions(-) commit a321f6e9d8f5b8e779892eab4ce759b60ff98e39 Author: Christoph Reiter Date: Fri Nov 17 20:05:24 2017 +0100 Make Python OS signal handlers run when an event loop is idling When Python receives a signal such as SIGINT it sets a flag and will execute the registered signal handler on the next call to PyErr_CheckSignals(). In case the main thread is blocked by an idling event loop (say Gtk.main() or Gtk.Dialog.run()) the check never happens and the signal handler will not get executed. To work around the issue use signal.set_wakeup_fd() to wake up the active event loop when a signal is received, which will invoke a Python callback which will lead to the signal handler being executed. This patch enables it in overrides for Gtk.main(), Gtk.Dialog.run(), Gio.Application.run() and GLib.MainLoop.run(). Works on Unix, and on Windows with Python 3.5+. With this fix in place it is possible to have a cross platform way to react to SIGINT (GLib.unix_signal_add() worked, but not on Windows), for example: signal.signal(signal.SIGINT, lambda *args: Gtk.main_quit()) Gtk.main() https://bugzilla.gnome.org/show_bug.cgi?id=622084 Makefile.am | 3 +- gi/_ossighelper.py | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++ gi/overrides/GLib.py | 4 +- gi/overrides/Gio.py | 12 +++++ gi/overrides/Gtk.py | 14 ++++++ tests/Makefile.am | 1 + tests/test_ossig.py | 102 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 271 insertions(+), 2 deletions(-) commit 46a9dade170127006df98d44b1a9fb2035ada86b Author: Christoph Reiter Date: Fri Nov 24 17:40:11 2017 +0100 Drop Python 3.3 support It's EOL and not used much (https://hynek.me/articles/python3-2016/) https://bugzilla.gnome.org/show_bug.cgi?id=790787 configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bd165405754ba44dea12fd3f31b841b5c8ba0f1a Author: Sander Sweers Date: Sun Aug 20 22:44:15 2017 +0200 Drop set_value usage in Gtk.List/TreeStore.set override this causes multiple updates to the store each emitting a signal. https://bugzilla.gnome.org/show_bug.cgi?id=790346 gi/overrides/Gtk.py | 48 ++++++++++++++++++++++++--------------------- tests/test_overrides_gtk.py | 12 ++++++++++++ 2 files changed, 38 insertions(+), 22 deletions(-) commit 5f63b8c626eb7f27de346dac2b66f07794e61b07