Difference between revisions of "GEPS 029: GTK3-GObject introspection Conversion"

From Gramps
Jump to: navigation, search
m (GTK 3 theme)
m (Problems)
Line 102: Line 102:
  
 
== Problems ==
 
== Problems ==
 +
 +
If anyone files a bug against PyGobject, Gtk or any of the Gtk dependencies (except Cairo, which isn't part of Gnome), please add John (the address bugzilla has is [email protected]) to the CC list at the bottom of the bug report page or post the bug URI to the gramps-devel list.
  
 
* we cannot set strings in struct, see GTK bug [https://bugzilla.gnome.org/show_bug.cgi?id=678401]
 
* we cannot set strings in struct, see GTK bug [https://bugzilla.gnome.org/show_bug.cgi?id=678401]

Revision as of 15:50, 25 July 2012

Gramps was written with GTK 2 toolkit. This has been replaced upstream with GTK 3, so Gramps should convert to GTK 3.

Guideline

We try to convert 1 to 1. If there are problems due to deprecated features, or otherwise, add in the code:

# TODO GTK3: write what problem is due to gtk 3 conversion

Before release, all TODO GTK3 in the code must be cleaned up

Documentation

Python GTK3 docs: [1]

Alternative is to look at the base C documentation, and understand from experience how the introspection works. Gnome docs: [2].

As python works with classes, it looks somewhat like the C++ interface: [3]. To investigate the specific override (how to init Gtk classes):

  • python overrides: [4]

Furthermore, for the other gi libs:

Installation

Ubuntu 12.04

For people on Ubuntu 12.04, you need:

1. add the gnome_shell repo to have the latest version of glib and friends, see how to add the ppa on: gnome_shell pppa Then upgrade your system via the system manager.

Note 1 : If you use Gnome3, also add the gnome3 ppa!

Note 2: this can make gnome shell unstable if the ppa is too bleeding edge!!

2. install version 3.3.2 of pygobject. No ppa for this, I use the git repo on gnome.org, so my git config:

     [remote "origin"]
       fetch = +refs/heads/*:refs/remotes/origin/*
       url = http://git.gnome.org/browse/pygobject

So to install it to folder pygobject, do

git clone git://git.gnome.org/pygobject pygobject

Then checkout tag 3.3.2, so

cd pygobject
git checkout 3.3.2

Make sure you have the dependencies installed, you will need:

  1. libglib2.0-dev package (otherwise you will obtain an error like undefined mqcro: AM_PATH_GLIB_2_0.
  2. autoconf, automake, libtool, intltool package
  3. python-dev package
  4. libcairo2-dev, python-cairo-dev
  5. python-gobject-dev
  6. libgirepository1.0-dev

So, use the line:

sudo apt-get install autoconf  automake libtool python-dev libglib2.0-dev libcairo2-dev python-cairo-dev python-gobject-dev libgirepository1.0-dev

Then compile pygobject:

./autogen.sh
make
sudo make install

Now this installs to /usr/local, so to run the test with that, on ubuntu in your terminal:

PYTHONPATH=/usr/local/lib/python2.7/site-packages/ python gramps.py

If you then get:

$ PYTHONPATH=/usr/local/lib/python2.7/site-packages/ python src/gramps.py
Gtk typelib not installed. Install Gnome Introspection, and pygobject version 3.3.2 or later.

Gramps will terminate now.

You may need to:

export LD_LIBRARY_PATH=/usr/local/lib

Also, I had to get rid of the older gobject:

sudo rm -rf /usr/lib/python2.7/dist-packages/gobject

GTK 3 theme

If Gramps looks ugly in GTK 3, you probably are not using a GTK 3 theme. In that case, GTK falls back to the Raleigh theme.

Gramps in GTK3 Adwaita theme

The solution is to install a theme that comes with a GTK 3 theme. For example the Adwaita theme:

Gramps in GTK3 Adwaita theme

For a good dark theme, consider elementary-dark-theme, installable from [5]

Gramps in GTK3 elementary dark theme

KDE

To set the theme, open gramps, and open System settings -> Application Appearance -> GTK+ Appearance, and select different theme, click on apply. If you see Gramps update completely, you have selected a theme with GTK 3 support. If the theme falls back to something consisting of Raleigh theme components, the theme does not have good GTK 3 support. Even if Gramps updates, not all elements visible will update. Restart Gramps to be sure the theme works as intended. You can install gtk-theme-switch to test themes.

Problems

If anyone files a bug against PyGobject, Gtk or any of the Gtk dependencies (except Cairo, which isn't part of Gnome), please add John (the address bugzilla has is [email protected]) to the CC list at the bottom of the bug report page or post the bug URI to the gramps-devel list.

  • we cannot set strings in struct, see GTK bug [6]
  • error in list_families on textview in styledtexteditor: [7]
  • str and unicode no longer seem to work, the encoding must be passed too; Future: deprecate unicode() in the code, as we want to support python 3
  • there is no longer automatic conversion to str utf-8 when using GTK functions, we must convert before passing to GTK.
  • glade can no longer work with our catalog. We need to upgrade comboboxentry to combobox with has_entry manually, and hope editors keep working... - SOLVED: converted editevent.glade, all works
  • expose is no longer present on gtk.widget. Draw must be used. Unclear how, [8].
  • Gtk.Clipboard seems to work differently
  • Pedigreeview is broken and must be converted to new drawing primitives. Same probably for fanchart.
  • osmgpsmap is GTK2. There is a GTK3 branch in git, we should try it, and contribute to the conversion.
  • menu.popup does not seem to work in some instances. Passing position function seems to be the workaround, see grampsbar.py for example

Related Gramps Bugs

  • #5009: Use gobject introspection for GTK 3 dependency

How to investigate a hard crash?

With GTK 3, hard crashes are a lot more likely than before. Very troubling for a python developer, as you do not know where the crash happens. So, to investigate these, do the following:

$ > gdb python
(gdb) set env GRAMPSHOME /path/to/gramps/src
(gdb) set env PYTHONPATH $PYTHONPATH:$GRAMPSHOME
(gdb) r $GRAMPSHOME/gramps.py
...after the crash...
(gdb) bt

This works best if you have the debug symbols installed for everything relevant, or are running from a self-built tree.