Ticket #3645: 0001-GTK3-Port.patch

File 0001-GTK3-Port.patch, 9.2 KB (added by danielfrancis, 12 years ago)

Patch with the port to GTK3

  • terminal.py

    Pending:
     * Drag and drop clipboard utility
     * Find and apply the VTE get_text method to save at store session in the journal or think in other data to save.
    
    Signed-off-by: Agustin Zubiaga <aguz@sugarlabs.org>
    Signed-off-by: Daniel Francis <francis@sugarlabs.org>
    Signed-off-by: Manuel Kaufmann <humitos@gmail.com>
    ---
     terminal.py |  102 +++++++++++++++++++++++++++++++++--------------------------
     1 file changed, 57 insertions(+), 45 deletions(-)
    
    diff --git a/terminal.py b/terminal.py
    index ee46fdc..6a5c0df 100644
    a b import ConfigParser 
    2323import logging
    2424from gettext import gettext as _
    2525
    26 import gtk
    27 import vte
    28 import pango
    29 
    30 from sugar.graphics.toolbutton import ToolButton
    31 from sugar.graphics.toolbarbox import ToolbarBox
    32 from sugar.graphics.toolbarbox import ToolbarButton
    33 from sugar.graphics.notebook import Notebook
    34 
    35 from sugar.activity.widgets import ActivityToolbarButton
    36 from sugar.activity.widgets import StopButton
    37 from sugar.activity import activity
    38 from sugar import env
     26from gi.repository import GLib
     27from gi.repository import Gtk
     28from gi.repository import Gdk
     29from gi.repository import Vte
     30from gi.repository import Pango
     31
     32from sugar3.graphics.toolbutton import ToolButton
     33from sugar3.graphics.toolbarbox import ToolbarBox
     34from sugar3.graphics.toolbarbox import ToolbarButton
     35from sugar3.graphics.notebook import Notebook
     36
     37from sugar3.activity.widgets import EditToolbar
     38from sugar3.activity.widgets import ActivityToolbarButton
     39from sugar3.activity.widgets import StopButton
     40from sugar3.activity import activity
     41from sugar3 import env
    3942
    4043MASKED_ENVIRONMENT = [
    4144    'DBUS_SESSION_BUS_ADDRESS',
    class TerminalActivity(activity.Activity): 
    100103        toolbar_box.toolbar.insert(root_button, -1)
    101104        root_button.show()
    102105
    103         separator = gtk.SeparatorToolItem()
     106        separator = Gtk.SeparatorToolItem()
    104107        separator.props.draw = False
    105108        separator.set_expand(True)
    106109        toolbar_box.toolbar.insert(separator, -1)
    class TerminalActivity(activity.Activity): 
    116119        self._update_accelerators(toolbar_box)
    117120
    118121        self._notebook = Notebook()
    119         self._notebook.set_property("tab-pos", gtk.POS_TOP)
     122        self._notebook.set_property("tab-pos", Gtk.PositionType.TOP)
    120123        self._notebook.set_scrollable(True)
    121124        self._notebook.show()
    122125
    class TerminalActivity(activity.Activity): 
    131134                    # This code is copied from toolbutton.py
    132135                    # to solve workaround bug described in OLPC #10930
    133136                    accel_group = self.get_data('sugar-accel-group')
    134                     keyval, mask = gtk.accelerator_parse(
     137                    keyval, mask = Gtk.accelerator_parse(
    135138                                                    child.props.accelerator)
    136139                    # the accelerator needs to be set at the child,
    137                     # so the gtk.AccelLabel
     140                    # so the Gtk.AccelLabel
    138141                    # in the palette can pick it up.
    139                     child.child.add_accelerator('clicked', accel_group,
     142                    child.get_child().add_accelerator('clicked', accel_group,
    140143                                keyval, mask,
    141                                 gtk.ACCEL_LOCKED | gtk.ACCEL_VISIBLE)
     144                                Gtk.AccelFlags.LOCKED | Gtk.AccelFlags.VISIBLE)
    142145
    143146            if isinstance(child, ToolbarButton):
    144147                if child.get_page() is not None:
    class TerminalActivity(activity.Activity): 
    147150                self._update_accelerators(child)
    148151
    149152    def _create_edit_toolbar(self):
    150         edit_toolbar = activity.EditToolbar()
     153        edit_toolbar = EditToolbar()
    151154        edit_toolbar.undo.props.visible = False
    152155        edit_toolbar.redo.props.visible = False
    153156        edit_toolbar.separator.props.visible = False
    class TerminalActivity(activity.Activity): 
    167170        vt.paste_clipboard()
    168171
    169172    def _create_view_toolbar(self):  # Zoom toolbar
    170         view_toolbar = gtk.Toolbar()
     173        view_toolbar = Gtk.Toolbar()
    171174
    172175        zoom_out_button = ToolButton('zoom-out')
    173176        zoom_out_button.set_tooltip(_('Zoom out'))
    class TerminalActivity(activity.Activity): 
    208211        self.fullscreen()
    209212
    210213    def _create_tab_toolbar(self):
    211         tab_toolbar = gtk.Toolbar()
     214        tab_toolbar = Gtk.Toolbar()
    212215        new_tab_button = ToolButton('tab-add')
    213216        new_tab_button.set_tooltip(_("Open New Tab"))
    214217        new_tab_button.props.accelerator = '<Ctrl><Shift>T'
    class TerminalActivity(activity.Activity): 
    297300        return True
    298301
    299302    def _create_tab(self, tab_state):
    300         vt = vte.Terminal()
     303        vt = Vte.Terminal()
    301304        vt.connect("child-exited", self.__tab_child_exited_cb)
    302305        vt.connect("window-title-changed", self.__tab_title_changed_cb)
    303306
    304307        # FIXME have to resend motion events to parent, see #1402
    305308        vt.connect('motion-notify-event', self.__motion_notify_cb)
    306309
    307         vt.drag_dest_set(gtk.DEST_DEFAULT_MOTION | gtk.DEST_DEFAULT_DROP,
    308                [('text/plain', 0, 0), ('STRING', 0, 1)],
    309                gtk.gdk.ACTION_DEFAULT |
    310                gtk.gdk.ACTION_COPY)
    311         vt.connect('drag_data_received', self.__drag_data_received_cb)
     310        #vt.drag_dest_set(Gtk.DestDefaults.MOTION | Gtk.DestDefaults.DROP,
     311        #       [('text/plain', 0, 0), ('STRING', 0, 1)],
     312        #       Gdk.DragAction.DEFAULT |
     313        #       Gdk.DragAction.COPY)
     314        #vt.connect('drag_data_received', self.__drag_data_received_cb)
    312315
    313316        self._configure_vt(vt)
    314317
    315318        vt.show()
    316319
    317         label = gtk.Label()
     320        label = Gtk.Label()
    318321
    319         scrollbar = gtk.VScrollbar(vt.get_adjustment())
     322        scrollbar = Gtk.VScrollbar.new(vt.get_vadjustment())
    320323        scrollbar.show()
    321324
    322         box = gtk.HBox()
    323         box.pack_start(vt)
    324         box.pack_start(scrollbar)
     325        box = Gtk.HBox()
     326        box.pack_start(vt, True, True, 0)
     327        box.pack_start(scrollbar, False, True, 0)
    325328
    326329        box.vt = vt
    327330        box.label = label
    class TerminalActivity(activity.Activity): 
    364367            for l in tab_state['scrollback']:
    365368                vt.feed(l + '\r\n')
    366369
    367         box.pid = vt.fork_command()
    368 
     370        box.pid = vt.fork_command_full(Vte.PtyFlags.DEFAULT,
     371                                       os.environ["HOME"],
     372                                       ["/bin/bash"],
     373                                       [],
     374                                       GLib.SpawnFlags.DO_NOT_REAP_CHILD,
     375                                       None,
     376                                       None)
    369377        self._notebook.props.page = index
    370378        vt.grab_focus()
    371379
    372380        return index
    373381
    374382    def __motion_notify_cb(self, widget, event):
    375         self.canvas.parent.emit('motion-notify-event', event)
     383        self.emit('motion-notify-event', event)
    376384
    377385    def __become_root_cb(self, button):
    378386        vt = self._notebook.get_nth_page(self._notebook.get_current_page()).vt
    379387        vt.feed('\r\n')
    380         vt.fork_command("/bin/su", ('/bin/su', '-'))
     388        vt.fork_command_full(Vte.PtyFlags.DEFAULT,
     389                             os.environ["HOME"],
     390                             ["/bin/su"],
     391                             [],
     392                             GLib.SpawnFlags.DO_NOT_REAP_CHILD,
     393                             None,
     394                             None)
    381395
    382396    def __key_press_cb(self, window, event):
    383397        """Route some keypresses directly to the vte and then drop them.
    class TerminalActivity(activity.Activity): 
    392406            vt = self._notebook.get_nth_page(current_page).vt
    393407            vt.event(event)
    394408
    395         key_name = gtk.gdk.keyval_name(event.keyval)
     409        key_name = Gdk.keyval_name(event.keyval)
    396410
    397411        # Escape is used in Sugar to cancel fullscreen mode.
    398412        if key_name == 'Escape':
    399413            event_to_vt(event)
    400414            return True
    401415
    402         elif event.get_state() & gtk.gdk.CONTROL_MASK:
     416        elif event.get_state() & Gdk.ModifierType.CONTROL_MASK:
    403417            if key_name in ['z', 'q']:
    404418                event_to_vt(event)
    405419                return True
    class TerminalActivity(activity.Activity): 
    415429        data = simplejson.loads(text)
    416430        fd.close()
    417431
    418         data_file = file_path
    419 
    420432        # Clean out any existing tabs.
    421433        while self._notebook.get_n_pages():
    422434            self._notebook.remove_page(0)
    class TerminalActivity(activity.Activity): 
    496508            conf.add_section('terminal')
    497509
    498510        font = self._get_conf(conf, 'font', 'Monospace')
    499         vt.set_font(pango.FontDescription(font))
     511        vt.set_font(Pango.FontDescription(font))
    500512
    501513        fg_color = self._get_conf(conf, 'fg_color', '#000000')
    502514        bg_color = self._get_conf(conf, 'bg_color', '#FFFFFF')
    503         vt.set_colors(gtk.gdk.color_parse(fg_color),
    504                       gtk.gdk.color_parse(bg_color), [])
     515        vt.set_colors(Gdk.color_parse(fg_color),
     516                      Gdk.color_parse(bg_color), [])
    505517
    506518        blink = self._get_conf(conf, 'cursor_blink', False)
    507         vt.set_cursor_blinks(blink)
     519        vt.set_cursor_blink_mode(blink)
    508520
    509521        bell = self._get_conf(conf, 'bell', False)
    510522        vt.set_audible_bell(bell)