From 8b1ebc5168608788f8302506d24fd3d0de01f22b Mon Sep 17 00:00:00 2001 From: Geert Janssens Date: Sat, 16 Sep 2017 17:38:44 +0200 Subject: [PATCH] Update python bindings to use PyGI and Gtk3 While it doesn't fully fix the python bindings, gnucash now at least doesn't segfault on start up if built with python bindings enabled. There are still issues to fix though. --- gnucash/python/init.py | 14 +++++----- gnucash/python/pycons/console.py | 44 ++++++++++++++++---------------- po/POTFILES.in | 1 + 3 files changed, 30 insertions(+), 29 deletions(-) diff --git a/gnucash/python/init.py b/gnucash/python/init.py index 7248e8a6f0..e62e6b577b 100644 --- a/gnucash/python/init.py +++ b/gnucash/python/init.py @@ -2,7 +2,7 @@ import sys import _sw_app_utils from gnucash import * from _sw_core_utils import gnc_prefs_is_extra_enabled -import gtk +from gi.repository import Gtk import os sys.path.append(os.path.dirname(__file__)) noisy = gnc_prefs_is_extra_enabled() @@ -44,7 +44,7 @@ class Console (cons.Console): filename=None, size=100): cons.Console.__init__(self, argv, shelltype, banner, filename, size) self.buffer.create_tag('center', - justification=gtk.JUSTIFY_CENTER, + justification=Gtk.Justification.CENTER, font='Mono 4') self.figures = [] self.callbacks = [] @@ -86,14 +86,14 @@ class Console (cons.Console): if False: console = Console(argv = [], shelltype = 'python', banner = [['woop', 'title']], size = 100) - window = gtk.Window(gtk.WINDOW_TOPLEVEL) - window.set_position(gtk.WIN_POS_CENTER) + window = Gtk.Window(Gtk.WindowType.TOPLEVEL) + window.set_position(Gtk.WindowPosition.CENTER) window.set_default_size(800,600) window.set_border_width(0) - # Hm. gtk.main_quit will kill gnucash without closing the file + # Hm. Gtk.main_quit will kill gnucash without closing the file # properly. That's kinda bad. - window.connect('destroy-event', gtk.main_quit) - window.connect('delete-event', gtk.main_quit) + window.connect('destroy-event', Gtk.main_quit) + window.connect('delete-event', Gtk.main_quit) window.add (console) window.show_all() console.grab_focus() diff --git a/gnucash/python/pycons/console.py b/gnucash/python/pycons/console.py index f3ff86d2f7..6a070b8603 100644 --- a/gnucash/python/pycons/console.py +++ b/gnucash/python/pycons/console.py @@ -31,9 +31,9 @@ import sys import re import tempfile import readline -import gobject -import gtk -import pango +from gi.repository import GObject +from gi.repository import Gtk +from gi.repository import Pango from StringIO import StringIO import shell try: import ishell @@ -105,8 +105,8 @@ class ConsoleIn: iter = buffer.get_iter_at_mark(buffer.get_insert()) buffer.move_mark (buffer.get_mark('linestart'), iter) while self.console.input_mode: - #while gtk.events_pending(): - gtk.main_iteration() + #while Gtk.events_pending(): + Gtk.main_iteration() s = self.console.input self.console.input = '' return s+'\n' @@ -119,7 +119,7 @@ class ConsoleIn: # ---------------------------------------------------------------- class Console -class Console (gtk.ScrolledWindow): +class Console (Gtk.ScrolledWindow): """ GTK python console """ def __init__(self, argv=[], shelltype='python', banner=[], @@ -129,12 +129,12 @@ class Console (gtk.ScrolledWindow): # GTK interface self.do_quit = False - gtk.ScrolledWindow.__init__(self) - self.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) - self.set_shadow_type (gtk.SHADOW_NONE) + GObject.GObject.__init__(self) + self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) + self.set_shadow_type (Gtk.ShadowType.NONE) self.set_border_width(0) - self.view = gtk.TextView() - self.view.modify_font (pango.FontDescription("Mono 10")) + self.view = Gtk.TextView() + self.view.modify_font (Pango.FontDescription("Mono 10")) self.view.set_editable (True) self.view.set_wrap_mode(True) self.view.set_left_margin(0) @@ -142,7 +142,7 @@ class Console (gtk.ScrolledWindow): self.buffer = self.view.get_buffer() self.buffer.create_tag ('title', indent = 2, - weight=pango.WEIGHT_BOLD, + weight=Pango.Weight.BOLD, foreground='blue', font='Mono 12') self.buffer.create_tag ('subtitle', @@ -154,11 +154,11 @@ class Console (gtk.ScrolledWindow): font='Mono 10') self.buffer.create_tag ('error', foreground='red', - style=pango.STYLE_OBLIQUE, + style=Pango.Style.OBLIQUE, font='Mono 10') self.buffer.create_tag ('prompt', foreground='blue', - weight=pango.WEIGHT_BOLD, + weight=Pango.Weight.BOLD, font='Mono 10') self.buffer.create_tag('0') self.color_pat = re.compile('\x01?\x1b\[(.*?)m\x02?') @@ -170,7 +170,7 @@ class Console (gtk.ScrolledWindow): self.write (text, style) iter = self.buffer.get_iter_at_mark(self.buffer.get_insert()) self.buffer.create_mark ('linestart', iter, True) - self.view.add_events(gtk.gdk.KEY_PRESS_MASK) + self.view.add_events(Gdk.EventMask.KEY_PRESS_MASK) self.view.connect ('key-press-event', self.key_press_event) self.add(self.view) self.show_all() @@ -294,13 +294,13 @@ class Console (gtk.ScrolledWindow): self.buffer.move_mark (self.buffer.get_mark('linestart'), iter) self.history_reset() self.view.scroll_mark_onscreen(self.buffer.get_insert()) - while gtk.events_pending(): - gtk.main_iteration() + while Gtk.events_pending(): + Gtk.main_iteration() def key_press_event (self, widget, event): """ Handle key press event """ - keyname = gtk.gdk.keyval_name (event.keyval) + keyname = Gdk.keyval_name (event.keyval) # New command if keyname in ['Return', 'KP_Enter']: @@ -358,7 +358,7 @@ class Console (gtk.ScrolledWindow): return True # Controls - elif event.state & gtk.gdk.CONTROL_MASK: + elif event.get_state() & Gdk.ModifierType.CONTROL_MASK: if keyname in ['a','A']: mark = self.buffer.get_mark('linestart') linestart = self.buffer.get_iter_at_mark(mark) @@ -413,8 +413,8 @@ class Console (gtk.ScrolledWindow): self.shell.eval(self) self.view.scroll_mark_onscreen(self.buffer.get_insert()) - while gtk.events_pending(): - gtk.main_iteration() + while Gtk.events_pending(): + Gtk.main_iteration() # Get system output and remove system redirection os.dup2 (sys_stdout, 1) @@ -431,7 +431,7 @@ class Console (gtk.ScrolledWindow): def quit(self): """ Quit console """ - gtk.main_quit() + Gtk.main_quit() self.history_save() try: os.close (self.piperead) diff --git a/po/POTFILES.in b/po/POTFILES.in index 9cba02a47d..eaf0f39900 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -470,6 +470,7 @@ gnucash/report/standard-reports/daily-reports.scm gnucash/report/standard-reports/equity-statement.scm gnucash/report/standard-reports/general-journal.scm gnucash/report/standard-reports/general-ledger.scm +gnucash/report/standard-reports/income-gst-statement.scm gnucash/report/standard-reports/income-statement.scm gnucash/report/standard-reports/net-barchart.scm gnucash/report/standard-reports/net-linechart.scm