raveit65 113dc30
From a53f0408ea3fb6d8a19ba75f93f6315375fbf978 Mon Sep 17 00:00:00 2001
raveit65 113dc30
From: Patrick Monnerat <patrick@monnerat.net>
raveit65 113dc30
Date: Thu, 23 May 2019 20:42:23 +0200
raveit65 113dc30
Subject: [PATCH] externaltools plugin: change code for Python 2 & 3
raveit65 113dc30
 compatibility.
raveit65 113dc30
raveit65 113dc30
---
raveit65 113dc30
 plugins/externaltools/tools/__init__.py    |  13 +-
raveit65 113dc30
 plugins/externaltools/tools/capture.py     |  21 +-
raveit65 113dc30
 plugins/externaltools/tools/functions.py   |   6 +-
raveit65 113dc30
 plugins/externaltools/tools/library.py     |  78 ++-
raveit65 113dc30
 plugins/externaltools/tools/manager.py     | 209 ++----
raveit65 113dc30
 plugins/externaltools/tools/outputpanel.py |   9 +-
raveit65 113dc30
 plugins/externaltools/tools/outputpanel.ui |  22 +-
raveit65 113dc30
 plugins/externaltools/tools/tools.ui       | 706 ++++++++++-----------
raveit65 113dc30
 8 files changed, 469 insertions(+), 595 deletions(-)
raveit65 113dc30
raveit65 113dc30
diff --git a/plugins/externaltools/tools/__init__.py b/plugins/externaltools/tools/__init__.py
raveit65 113dc30
index 153d6c6..b0b67dc 100755
raveit65 113dc30
--- a/plugins/externaltools/tools/__init__.py
raveit65 113dc30
+++ b/plugins/externaltools/tools/__init__.py
raveit65 113dc30
@@ -16,14 +16,13 @@
raveit65 113dc30
 #    along with this program; if not, write to the Free Software
raveit65 113dc30
 #    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
raveit65 113dc30
 
raveit65 113dc30
-__all__ = ('ExternalToolsPlugin', 'Manager', 'OutputPanel', 'Capture', 'UniqueById')
raveit65 113dc30
+__all__ = ('ExternalToolsPlugin', )
raveit65 113dc30
 
raveit65 113dc30
 from gi.repository import GObject, Gtk, Peas, Pluma
raveit65 113dc30
-from manager import Manager
raveit65 113dc30
-from library import ToolLibrary
raveit65 113dc30
-from outputpanel import OutputPanel
raveit65 113dc30
-from capture import Capture
raveit65 113dc30
-from functions import *
raveit65 113dc30
+from .manager import Manager
raveit65 113dc30
+from .library import ToolLibrary
raveit65 113dc30
+from .outputpanel import OutputPanel
raveit65 113dc30
+from .functions import *
raveit65 113dc30
 
raveit65 113dc30
 class ToolMenu(object):
raveit65 113dc30
     def __init__(self, library, window, panel, plugin, menupath):
raveit65 113dc30
@@ -214,7 +213,7 @@ class ExternalToolsPlugin(GObject.Object, Peas.Activatable):
raveit65 113dc30
         bottom = window.get_bottom_panel()
raveit65 113dc30
         bottom.add_item_with_icon(self._output_buffer.panel,
raveit65 113dc30
                                   _("Shell Output"),
raveit65 113dc30
-                                  Gtk.STOCK_EXECUTE)
raveit65 113dc30
+                                  "system-run")
raveit65 113dc30
 
raveit65 113dc30
     def do_deactivate(self):
raveit65 113dc30
         window = self.object
raveit65 113dc30
diff --git a/plugins/externaltools/tools/capture.py b/plugins/externaltools/tools/capture.py
raveit65 113dc30
index 73ce270..67d12bf 100755
raveit65 113dc30
--- a/plugins/externaltools/tools/capture.py
raveit65 113dc30
+++ b/plugins/externaltools/tools/capture.py
raveit65 113dc30
@@ -18,7 +18,9 @@
raveit65 113dc30
 
raveit65 113dc30
 __all__ = ('Capture', )
raveit65 113dc30
 
raveit65 113dc30
-import os, sys, signal
raveit65 113dc30
+import os
raveit65 113dc30
+import sys
raveit65 113dc30
+import signal
raveit65 113dc30
 import locale
raveit65 113dc30
 import subprocess
raveit65 113dc30
 import fcntl
raveit65 113dc30
@@ -39,7 +41,7 @@ class Capture(GObject.Object):
raveit65 113dc30
         'end-execute'  : (GObject.SignalFlags.RUN_LAST, GObject.TYPE_NONE, (GObject.TYPE_INT,))
raveit65 113dc30
     }
raveit65 113dc30
 
raveit65 113dc30
-    def __init__(self, command, cwd = None, env = {}):
raveit65 113dc30
+    def __init__(self, command, cwd=None, env={}):
raveit65 113dc30
         GObject.GObject.__init__(self)
raveit65 113dc30
         self.pipe = None
raveit65 113dc30
         self.env = env
raveit65 113dc30
@@ -58,6 +60,8 @@ class Capture(GObject.Object):
raveit65 113dc30
         self.flags = flags
raveit65 113dc30
 
raveit65 113dc30
     def set_input(self, text):
raveit65 113dc30
+        if text and not isinstance(text, bytes):
raveit65 113dc30
+            text = text.encode("utf-8")
raveit65 113dc30
         self.input_text = text
raveit65 113dc30
 
raveit65 113dc30
     def set_cwd(self, cwd):
raveit65 113dc30
@@ -87,7 +91,7 @@ class Capture(GObject.Object):
raveit65 113dc30
 
raveit65 113dc30
         try:
raveit65 113dc30
             self.pipe = subprocess.Popen(self.command, **popen_args)
raveit65 113dc30
-        except OSError, e:
raveit65 113dc30
+        except OSError as e:
raveit65 113dc30
             self.pipe = None
raveit65 113dc30
             self.emit('stderr-line', _('Could not execute command: %s') % (e, ))
raveit65 113dc30
             return
raveit65 113dc30
@@ -116,7 +120,7 @@ class Capture(GObject.Object):
raveit65 113dc30
         # IO
raveit65 113dc30
         if self.input_text is not None:
raveit65 113dc30
             # Write async, in chunks of something
raveit65 113dc30
-            self.write_buffer = str(self.input_text)
raveit65 113dc30
+            self.write_buffer = self.input_text
raveit65 113dc30
 
raveit65 113dc30
             if self.idle_write_chunk():
raveit65 113dc30
                 self.idle_write_id = GLib.idle_add(self.idle_write_chunk)
raveit65 113dc30
@@ -136,7 +140,7 @@ class Capture(GObject.Object):
raveit65 113dc30
             self.pipe.stdin.write(self.write_buffer[:m])
raveit65 113dc30
 
raveit65 113dc30
             if m == l:
raveit65 113dc30
-                self.write_buffer = ''
raveit65 113dc30
+                self.write_buffer = b''
raveit65 113dc30
                 self.pipe.stdin.close()
raveit65 113dc30
 
raveit65 113dc30
                 self.idle_write_id = 0
raveit65 113dc30
@@ -157,11 +161,10 @@ class Capture(GObject.Object):
raveit65 113dc30
 
raveit65 113dc30
             if len(line) > 0:
raveit65 113dc30
                 try:
raveit65 113dc30
-                    line = unicode(line, 'utf-8')
raveit65 113dc30
+                    line = line.decode('utf-8')
raveit65 113dc30
                 except:
raveit65 113dc30
-                    line = unicode(line,
raveit65 113dc30
-                                   locale.getdefaultlocale()[1],
raveit65 113dc30
-                                   'replace')
raveit65 113dc30
+                    line = line.decode(locale.getdefaultlocale()[1],
raveit65 113dc30
+                                       'replace')
raveit65 113dc30
 
raveit65 113dc30
                 self.read_buffer += line
raveit65 113dc30
                 lines = self.read_buffer.splitlines(True)
raveit65 113dc30
diff --git a/plugins/externaltools/tools/functions.py b/plugins/externaltools/tools/functions.py
raveit65 113dc30
index dd4f82b..e76689b 100755
raveit65 113dc30
--- a/plugins/externaltools/tools/functions.py
raveit65 113dc30
+++ b/plugins/externaltools/tools/functions.py
raveit65 113dc30
@@ -18,8 +18,8 @@
raveit65 113dc30
 
raveit65 113dc30
 import os
raveit65 113dc30
 from gi.repository import Gio, Gdk, Gtk, GtkSource, Pluma
raveit65 113dc30
-from outputpanel import OutputPanel
raveit65 113dc30
-from capture import *
raveit65 113dc30
+from .outputpanel import OutputPanel
raveit65 113dc30
+from .capture import *
raveit65 113dc30
 
raveit65 113dc30
 def default(val, d):
raveit65 113dc30
     if val is not None:
raveit65 113dc30
@@ -131,8 +131,6 @@ def run_external_tool(window, panel, node):
raveit65 113dc30
         elif input_type == 'selection' or input_type == 'selection-document':
raveit65 113dc30
             try:
raveit65 113dc30
                 start, end = document.get_selection_bounds()
raveit65 113dc30
-
raveit65 113dc30
-                print start, end
raveit65 113dc30
             except ValueError:
raveit65 113dc30
                 if input_type == 'selection-document':
raveit65 113dc30
                     start, end = document.get_bounds()
raveit65 113dc30
diff --git a/plugins/externaltools/tools/library.py b/plugins/externaltools/tools/library.py
raveit65 113dc30
index 186c33f..ff3fa9b 100755
raveit65 113dc30
--- a/plugins/externaltools/tools/library.py
raveit65 113dc30
+++ b/plugins/externaltools/tools/library.py
raveit65 113dc30
@@ -19,19 +19,21 @@
raveit65 113dc30
 import os
raveit65 113dc30
 import re
raveit65 113dc30
 import locale
raveit65 113dc30
+import codecs
raveit65 113dc30
 from gi.repository import GLib
raveit65 113dc30
 
raveit65 113dc30
+
raveit65 113dc30
 class Singleton(object):
raveit65 113dc30
     _instance = None
raveit65 113dc30
 
raveit65 113dc30
     def __new__(cls, *args, **kwargs):
raveit65 113dc30
         if not cls._instance:
raveit65 113dc30
-            cls._instance = super(Singleton, cls).__new__(
raveit65 113dc30
-                             cls, *args, **kwargs)
raveit65 113dc30
+            cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
raveit65 113dc30
             cls._instance.__init_once__()
raveit65 113dc30
 
raveit65 113dc30
         return cls._instance
raveit65 113dc30
 
raveit65 113dc30
+
raveit65 113dc30
 class ToolLibrary(Singleton):
raveit65 113dc30
     def __init_once__(self):
raveit65 113dc30
         self.locations = []
raveit65 113dc30
@@ -46,7 +48,7 @@ class ToolLibrary(Singleton):
raveit65 113dc30
 
raveit65 113dc30
         # self.locations[0] is where we save the custom scripts
raveit65 113dc30
         toolsdir = os.path.join(GLib.get_user_config_dir(), 'pluma/tools')
raveit65 113dc30
-        self.locations.insert(0, toolsdir);
raveit65 113dc30
+        self.locations.insert(0, toolsdir)
raveit65 113dc30
 
raveit65 113dc30
         if not os.path.isdir(self.locations[0]):
raveit65 113dc30
             os.makedirs(self.locations[0])
raveit65 113dc30
@@ -74,7 +76,7 @@ class ToolLibrary(Singleton):
raveit65 113dc30
         if not os.path.isfile(filename):
raveit65 113dc30
             return
raveit65 113dc30
 
raveit65 113dc30
-        print "External tools: importing old tools into the new store..."
raveit65 113dc30
+        print("External tools: importing old tools into the new store...")
raveit65 113dc30
 
raveit65 113dc30
         xtree = et.parse(filename)
raveit65 113dc30
         xroot = xtree.getroot()
raveit65 113dc30
@@ -97,7 +99,7 @@ class ToolLibrary(Singleton):
raveit65 113dc30
 
raveit65 113dc30
             tool.save_with_script(xtool.text)
raveit65 113dc30
 
raveit65 113dc30
-    def get_full_path(self, path, mode='r', system = True, local = True):
raveit65 113dc30
+    def get_full_path(self, path, mode='r', system=True, local=True):
raveit65 113dc30
         assert (system or local)
raveit65 113dc30
         if path is None:
raveit65 113dc30
             return None
raveit65 113dc30
@@ -123,6 +125,7 @@ class ToolLibrary(Singleton):
raveit65 113dc30
                 os.mkdir(dirname)
raveit65 113dc30
             return path
raveit65 113dc30
 
raveit65 113dc30
+
raveit65 113dc30
 class ToolDirectory(object):
raveit65 113dc30
     def __init__(self, parent, dirname):
raveit65 113dc30
         super(ToolDirectory, self).__init__()
raveit65 113dc30
@@ -145,8 +148,7 @@ class ToolDirectory(object):
raveit65 113dc30
                 continue
raveit65 113dc30
             for i in os.listdir(d):
raveit65 113dc30
                 elements[i] = None
raveit65 113dc30
-        keys = elements.keys()
raveit65 113dc30
-        keys.sort()
raveit65 113dc30
+        keys = sorted(elements.keys())
raveit65 113dc30
         return keys
raveit65 113dc30
 
raveit65 113dc30
     def _load(self):
raveit65 113dc30
@@ -196,7 +198,7 @@ class ToolDirectory(object):
raveit65 113dc30
 class Tool(object):
raveit65 113dc30
     RE_KEY = re.compile('^([a-zA-Z_][a-zA-Z0-9_.\-]*)(\[([a-zA-Z_@]+)\])?$')
raveit65 113dc30
 
raveit65 113dc30
-    def __init__(self, parent, filename = None):
raveit65 113dc30
+    def __init__(self, parent, filename=None):
raveit65 113dc30
         super(Tool, self).__init__()
raveit65 113dc30
         self.parent = parent
raveit65 113dc30
         self.library = parent.library
raveit65 113dc30
@@ -212,7 +214,7 @@ class Tool(object):
raveit65 113dc30
         if value.strip() == '':
raveit65 113dc30
             return []
raveit65 113dc30
         else:
raveit65 113dc30
-            return map(lambda x: x.strip(), value.split(','))
raveit65 113dc30
+            return [x.strip() for x in value.split(',')]
raveit65 113dc30
 
raveit65 113dc30
     def _from_list(self, value):
raveit65 113dc30
         return ','.join(value)
raveit65 113dc30
@@ -231,7 +233,7 @@ class Tool(object):
raveit65 113dc30
         if filename is None:
raveit65 113dc30
             return
raveit65 113dc30
 
raveit65 113dc30
-        fp = file(filename, 'r', 1)
raveit65 113dc30
+        fp = codecs.open(filename, 'r', encoding='utf-8')
raveit65 113dc30
         in_block = False
raveit65 113dc30
         lang = locale.getlocale(locale.LC_MESSAGES)[0]
raveit65 113dc30
 
raveit65 113dc30
@@ -239,8 +241,10 @@ class Tool(object):
raveit65 113dc30
             if not in_block:
raveit65 113dc30
                 in_block = line.startswith('# [Pluma Tool]')
raveit65 113dc30
                 continue
raveit65 113dc30
-            if line.startswith('##') or line.startswith('# #'): continue
raveit65 113dc30
-            if not line.startswith('# '): break
raveit65 113dc30
+            if line.startswith('##') or line.startswith('# #'):
raveit65 113dc30
+                continue
raveit65 113dc30
+            if not line.startswith('# '):
raveit65 113dc30
+                break
raveit65 113dc30
 
raveit65 113dc30
             try:
raveit65 113dc30
                 (key, value) = [i.strip() for i in line[2:].split('=', 1)]
raveit65 113dc30
@@ -266,9 +270,6 @@ class Tool(object):
raveit65 113dc30
     def is_local(self):
raveit65 113dc30
         return self.library.get_full_path(self.get_path(), system=False) is not None
raveit65 113dc30
 
raveit65 113dc30
-    def is_global(self):
raveit65 113dc30
-        return self.library.get_full_path(self.get_path(), local=False) is not None
raveit65 113dc30
-
raveit65 113dc30
     def get_path(self):
raveit65 113dc30
         if self.filename is not None:
raveit65 113dc30
             return os.path.join(self.parent.get_path(), self.filename)
raveit65 113dc30
@@ -284,7 +285,8 @@ class Tool(object):
raveit65 113dc30
 
raveit65 113dc30
     def get_applicability(self):
raveit65 113dc30
         applicability = self._properties.get('Applicability')
raveit65 113dc30
-        if applicability: return applicability
raveit65 113dc30
+        if applicability:
raveit65 113dc30
+            return applicability
raveit65 113dc30
         return 'all'
raveit65 113dc30
 
raveit65 113dc30
     def set_applicability(self, value):
raveit65 113dc30
@@ -294,7 +296,8 @@ class Tool(object):
raveit65 113dc30
 
raveit65 113dc30
     def get_name(self):
raveit65 113dc30
         name = self._properties.get('Name')
raveit65 113dc30
-        if name: return name
raveit65 113dc30
+        if name:
raveit65 113dc30
+            return name
raveit65 113dc30
         return os.path.basename(self.filename)
raveit65 113dc30
 
raveit65 113dc30
     def set_name(self, value):
raveit65 113dc30
@@ -304,7 +307,8 @@ class Tool(object):
raveit65 113dc30
 
raveit65 113dc30
     def get_shortcut(self):
raveit65 113dc30
         shortcut = self._properties.get('Shortcut')
raveit65 113dc30
-        if shortcut: return shortcut
raveit65 113dc30
+        if shortcut:
raveit65 113dc30
+            return shortcut
raveit65 113dc30
         return None
raveit65 113dc30
 
raveit65 113dc30
     def set_shortcut(self, value):
raveit65 113dc30
@@ -314,7 +318,8 @@ class Tool(object):
raveit65 113dc30
 
raveit65 113dc30
     def get_comment(self):
raveit65 113dc30
         comment = self._properties.get('Comment')
raveit65 113dc30
-        if comment: return comment
raveit65 113dc30
+        if comment:
raveit65 113dc30
+            return comment
raveit65 113dc30
         return self.filename
raveit65 113dc30
 
raveit65 113dc30
     def set_comment(self, value):
raveit65 113dc30
@@ -324,7 +329,8 @@ class Tool(object):
raveit65 113dc30
 
raveit65 113dc30
     def get_input(self):
raveit65 113dc30
         input = self._properties.get('Input')
raveit65 113dc30
-        if input: return input
raveit65 113dc30
+        if input:
raveit65 113dc30
+            return input
raveit65 113dc30
         return 'nothing'
raveit65 113dc30
 
raveit65 113dc30
     def set_input(self, value):
raveit65 113dc30
@@ -334,7 +340,8 @@ class Tool(object):
raveit65 113dc30
 
raveit65 113dc30
     def get_output(self):
raveit65 113dc30
         output = self._properties.get('Output')
raveit65 113dc30
-        if output: return output
raveit65 113dc30
+        if output:
raveit65 113dc30
+            return output
raveit65 113dc30
         return 'output-panel'
raveit65 113dc30
 
raveit65 113dc30
     def set_output(self, value):
raveit65 113dc30
@@ -344,7 +351,8 @@ class Tool(object):
raveit65 113dc30
 
raveit65 113dc30
     def get_save_files(self):
raveit65 113dc30
         save_files = self._properties.get('Save-files')
raveit65 113dc30
-        if save_files: return save_files
raveit65 113dc30
+        if save_files:
raveit65 113dc30
+            return save_files
raveit65 113dc30
         return 'nothing'
raveit65 113dc30
 
raveit65 113dc30
     def set_save_files(self, value):
raveit65 113dc30
@@ -354,7 +362,8 @@ class Tool(object):
raveit65 113dc30
 
raveit65 113dc30
     def get_languages(self):
raveit65 113dc30
         languages = self._properties.get('Languages')
raveit65 113dc30
-        if languages: return languages
raveit65 113dc30
+        if languages:
raveit65 113dc30
+            return languages
raveit65 113dc30
         return []
raveit65 113dc30
 
raveit65 113dc30
     def set_languages(self, value):
raveit65 113dc30
@@ -370,7 +379,7 @@ class Tool(object):
raveit65 113dc30
         if filename is None:
raveit65 113dc30
             return True
raveit65 113dc30
 
raveit65 113dc30
-        fp = open(filename, 'r', 1)
raveit65 113dc30
+        fp = codecs.open(filename, 'r', encoding='utf-8')
raveit65 113dc30
         for line in fp:
raveit65 113dc30
             if line.strip() == '':
raveit65 113dc30
                 continue
raveit65 113dc30
@@ -386,7 +395,7 @@ class Tool(object):
raveit65 113dc30
         if filename is None:
raveit65 113dc30
             return ["#!/bin/sh\n"]
raveit65 113dc30
 
raveit65 113dc30
-        fp = open(filename, 'r', 1)
raveit65 113dc30
+        fp = codecs.open(filename, 'r', encoding='utf-8')
raveit65 113dc30
         lines = list()
raveit65 113dc30
 
raveit65 113dc30
         # before entering the data block
raveit65 113dc30
@@ -396,7 +405,8 @@ class Tool(object):
raveit65 113dc30
             lines.append(line)
raveit65 113dc30
         # in the block:
raveit65 113dc30
         for line in fp:
raveit65 113dc30
-            if line.startswith('##'): continue
raveit65 113dc30
+            if line.startswith('##'):
raveit65 113dc30
+                continue
raveit65 113dc30
             if not (line.startswith('# ') and '=' in line):
raveit65 113dc30
                 # after the block: strip one emtpy line (if present)
raveit65 113dc30
                 if line.strip() != '':
raveit65 113dc30
@@ -410,7 +420,7 @@ class Tool(object):
raveit65 113dc30
 
raveit65 113dc30
     def _dump_properties(self):
raveit65 113dc30
         lines = ['# [Pluma Tool]']
raveit65 113dc30
-        for item in self._properties.iteritems():
raveit65 113dc30
+        for item in self._properties.items():
raveit65 113dc30
             if item[0] in self._transform:
raveit65 113dc30
                 lines.append('# %s=%s' % (item[0], self._transform[item[0]][1](item[1])))
raveit65 113dc30
             elif item[1] is not None:
raveit65 113dc30
@@ -419,7 +429,7 @@ class Tool(object):
raveit65 113dc30
 
raveit65 113dc30
     def save_with_script(self, script):
raveit65 113dc30
         filename = self.library.get_full_path(self.filename, 'w')
raveit65 113dc30
-        fp = open(filename, 'w', 1)
raveit65 113dc30
+        fp = codecs.open(filename, 'w', encoding='utf-8')
raveit65 113dc30
 
raveit65 113dc30
         # Make sure to first print header (shebang, modeline), then
raveit65 113dc30
         # properties, and then actual content
raveit65 113dc30
@@ -430,7 +440,6 @@ class Tool(object):
raveit65 113dc30
         # Parse
raveit65 113dc30
         for line in script:
raveit65 113dc30
             line = line.rstrip("\n")
raveit65 113dc30
-
raveit65 113dc30
             if not inheader:
raveit65 113dc30
                 content.append(line)
raveit65 113dc30
             elif line.startswith('#!'):
raveit65 113dc30
@@ -453,7 +462,7 @@ class Tool(object):
raveit65 113dc30
             fp.write(line + "\n")
raveit65 113dc30
 
raveit65 113dc30
         fp.close()
raveit65 113dc30
-        os.chmod(filename, 0750)
raveit65 113dc30
+        os.chmod(filename, 0o750)
raveit65 113dc30
         self.changed = False
raveit65 113dc30
 
raveit65 113dc30
     def save(self):
raveit65 113dc30
@@ -478,16 +487,17 @@ class Tool(object):
raveit65 113dc30
 
raveit65 113dc30
 if __name__ == '__main__':
raveit65 113dc30
     library = ToolLibrary()
raveit65 113dc30
+    library.set_locations(os.path.expanduser("~/.config/pluma/tools"))
raveit65 113dc30
 
raveit65 113dc30
     def print_tool(t, indent):
raveit65 113dc30
-        print indent * "  " + "%s: %s" % (t.filename, t.name)
raveit65 113dc30
+        print(indent * "  " + "%s: %s" % (t.filename, t.name))
raveit65 113dc30
 
raveit65 113dc30
     def print_dir(d, indent):
raveit65 113dc30
-        print indent * "  " + d.dirname + '/'
raveit65 113dc30
+        print(indent * "  " + d.dirname + '/')
raveit65 113dc30
         for i in d.subdirs:
raveit65 113dc30
-            print_dir(i, indent+1)
raveit65 113dc30
+            print_dir(i, indent + 1)
raveit65 113dc30
         for i in d.tools:
raveit65 113dc30
-            print_tool(i, indent+1)
raveit65 113dc30
+            print_tool(i, indent + 1)
raveit65 113dc30
 
raveit65 113dc30
     print_dir(library.tree, 0)
raveit65 113dc30
 
raveit65 113dc30
diff --git a/plugins/externaltools/tools/manager.py b/plugins/externaltools/tools/manager.py
raveit65 113dc30
index 4da0deb..b8e143b 100755
raveit65 113dc30
--- a/plugins/externaltools/tools/manager.py
raveit65 113dc30
+++ b/plugins/externaltools/tools/manager.py
raveit65 113dc30
@@ -19,71 +19,41 @@
raveit65 113dc30
 __all__ = ('Manager', )
raveit65 113dc30
 
raveit65 113dc30
 import os.path
raveit65 113dc30
-from library import *
raveit65 113dc30
-from functions import *
raveit65 113dc30
+import re
raveit65 113dc30
+from .library import *
raveit65 113dc30
+from .functions import *
raveit65 113dc30
 import hashlib
raveit65 113dc30
 from xml.sax import saxutils
raveit65 113dc30
 from gi.repository import GObject, Gio, Gdk, Gtk, GtkSource, Pluma
raveit65 113dc30
 
raveit65 113dc30
-class LanguagesPopup(Gtk.Window):
raveit65 113dc30
-    __gtype_name__ = "LanguagePopup"
raveit65 113dc30
+class LanguagesPopup(Gtk.Popover):
raveit65 113dc30
+    __gtype_name__ = "LanguagesPopup"
raveit65 113dc30
 
raveit65 113dc30
     COLUMN_NAME = 0
raveit65 113dc30
     COLUMN_ID = 1
raveit65 113dc30
     COLUMN_ENABLED = 2
raveit65 113dc30
 
raveit65 113dc30
-    def __init__(self, languages):
raveit65 113dc30
-        Gtk.Window.__init__(self, type=Gtk.WindowType.POPUP)
raveit65 113dc30
+    def __init__(self, widget, languages):
raveit65 113dc30
+        Gtk.Popover.__init__(self, relative_to=widget)
raveit65 113dc30
 
raveit65 113dc30
-        self.set_default_size(200, 200)
raveit65 113dc30
         self.props.can_focus = True
raveit65 113dc30
 
raveit65 113dc30
         self.build()
raveit65 113dc30
         self.init_languages(languages)
raveit65 113dc30
 
raveit65 113dc30
-        self.show()
raveit65 113dc30
-
raveit65 113dc30
-        self.grab_add()
raveit65 113dc30
-
raveit65 113dc30
-        self.keyboard = None
raveit65 113dc30
-        device_manager = Gdk.Display.get_device_manager(self.get_window().get_display())
raveit65 113dc30
-        for device in device_manager.list_devices(Gdk.DeviceType.MASTER):
raveit65 113dc30
-            if device.get_source() == Gdk.InputSource.KEYBOARD:
raveit65 113dc30
-                self.keyboard = device
raveit65 113dc30
-                break
raveit65 113dc30
-
raveit65 113dc30
-        self.pointer = device_manager.get_client_pointer()
raveit65 113dc30
-
raveit65 113dc30
-        if self.keyboard is not None:
raveit65 113dc30
-            self.keyboard.grab(self.get_window(),
raveit65 113dc30
-                               Gdk.GrabOwnership.WINDOW, False,
raveit65 113dc30
-                               Gdk.EventMask.KEY_PRESS_MASK |
raveit65 113dc30
-                               Gdk.EventMask.KEY_RELEASE_MASK,
raveit65 113dc30
-                               None, Gdk.CURRENT_TIME)
raveit65 113dc30
-        self.pointer.grab(self.get_window(),
raveit65 113dc30
-                          Gdk.GrabOwnership.WINDOW, False,
raveit65 113dc30
-                          Gdk.EventMask.BUTTON_PRESS_MASK |
raveit65 113dc30
-                          Gdk.EventMask.BUTTON_RELEASE_MASK |
raveit65 113dc30
-                          Gdk.EventMask.POINTER_MOTION_MASK |
raveit65 113dc30
-                          Gdk.EventMask.ENTER_NOTIFY_MASK |
raveit65 113dc30
-                          Gdk.EventMask.LEAVE_NOTIFY_MASK |
raveit65 113dc30
-                          Gdk.EventMask.PROXIMITY_IN_MASK |
raveit65 113dc30
-                          Gdk.EventMask.PROXIMITY_OUT_MASK |
raveit65 113dc30
-                          Gdk.EventMask.SCROLL_MASK,
raveit65 113dc30
-                          None, Gdk.CURRENT_TIME)
raveit65 113dc30
-
raveit65 113dc30
         self.view.get_selection().select_path((0,))
raveit65 113dc30
 
raveit65 113dc30
     def build(self):
raveit65 113dc30
         self.model = Gtk.ListStore(str, str, bool)
raveit65 113dc30
 
raveit65 113dc30
         self.sw = Gtk.ScrolledWindow()
raveit65 113dc30
+        self.sw.set_size_request(-1, 200)
raveit65 113dc30
         self.sw.show()
raveit65 113dc30
 
raveit65 113dc30
-        self.sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
raveit65 113dc30
+        self.sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
raveit65 113dc30
         self.sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN)
raveit65 113dc30
 
raveit65 113dc30
-        self.view = Gtk.TreeView(self.model)
raveit65 113dc30
+        self.view = Gtk.TreeView(model=self.model)
raveit65 113dc30
         self.view.show()
raveit65 113dc30
 
raveit65 113dc30
         self.view.set_headers_visible(False)
raveit65 113dc30
@@ -92,16 +62,16 @@ class LanguagesPopup(Gtk.Window):
raveit65 113dc30
 
raveit65 113dc30
         renderer = Gtk.CellRendererToggle()
raveit65 113dc30
         column.pack_start(renderer, False)
raveit65 113dc30
-        column.set_attributes(renderer, active=self.COLUMN_ENABLED)
raveit65 113dc30
+        column.add_attribute(renderer, 'active', self.COLUMN_ENABLED)
raveit65 113dc30
 
raveit65 113dc30
         renderer.connect('toggled', self.on_language_toggled)
raveit65 113dc30
 
raveit65 113dc30
         renderer = Gtk.CellRendererText()
raveit65 113dc30
         column.pack_start(renderer, True)
raveit65 113dc30
-        column.set_attributes(renderer, text=self.COLUMN_NAME)
raveit65 113dc30
+        column.add_attribute(renderer, 'text', self.COLUMN_NAME)
raveit65 113dc30
 
raveit65 113dc30
         self.view.append_column(column)
raveit65 113dc30
-        self.view.set_row_separator_func(self.on_separator)
raveit65 113dc30
+        self.view.set_row_separator_func(self.on_separator, None)
raveit65 113dc30
 
raveit65 113dc30
         self.sw.add(self.view)
raveit65 113dc30
 
raveit65 113dc30
@@ -124,7 +94,7 @@ class LanguagesPopup(Gtk.Window):
raveit65 113dc30
         self.model.foreach(self.enabled_languages, ret)
raveit65 113dc30
         return ret
raveit65 113dc30
 
raveit65 113dc30
-    def on_separator(self, model, piter):
raveit65 113dc30
+    def on_separator(self, model, piter, user_data=None):
raveit65 113dc30
         val = model.get_value(piter, self.COLUMN_NAME)
raveit65 113dc30
         return val == '-'
raveit65 113dc30
 
raveit65 113dc30
@@ -142,7 +112,7 @@ class LanguagesPopup(Gtk.Window):
raveit65 113dc30
             self.model.append([lang.get_name(), lang.get_id(), lang.get_id() in languages])
raveit65 113dc30
 
raveit65 113dc30
     def correct_all(self, model, path, piter, enabled):
raveit65 113dc30
-        if path == (0,):
raveit65 113dc30
+        if path.get_indices()[0] == 0:
raveit65 113dc30
             return False
raveit65 113dc30
 
raveit65 113dc30
         model.set_value(piter, self.COLUMN_ENABLED, enabled)
raveit65 113dc30
@@ -158,113 +128,6 @@ class LanguagesPopup(Gtk.Window):
raveit65 113dc30
         else:
raveit65 113dc30
             self.model.set_value(self.model.get_iter_first(), self.COLUMN_ENABLED, False)
raveit65 113dc30
 
raveit65 113dc30
-    def do_key_press_event(self, event):
raveit65 113dc30
-        if event.keyval == Gdk.KEY_Escape:
raveit65 113dc30
-            self.destroy()
raveit65 113dc30
-            return True
raveit65 113dc30
-        else:
raveit65 113dc30
-            event.window = self.view.get_bin_window()
raveit65 113dc30
-            return self.view.event(event)
raveit65 113dc30
-
raveit65 113dc30
-    def do_key_release_event(self, event):
raveit65 113dc30
-        event.window = self.view.get_bin_window()
raveit65 113dc30
-        return self.view.event(event)
raveit65 113dc30
-
raveit65 113dc30
-    def in_window(self, event, window=None):
raveit65 113dc30
-        if not window:
raveit65 113dc30
-            window = self.get_window()
raveit65 113dc30
-
raveit65 113dc30
-        geometry = window.get_geometry()
raveit65 113dc30
-        origin = window.get_origin()
raveit65 113dc30
-
raveit65 113dc30
-        return event.x_root >= origin[1] and \
raveit65 113dc30
-               event.x_root <= origin[1] + geometry[2] and \
raveit65 113dc30
-               event.y_root >= origin[2] and \
raveit65 113dc30
-               event.y_root <= origin[2] + geometry[3]
raveit65 113dc30
-
raveit65 113dc30
-    def do_destroy(self):
raveit65 113dc30
-        if self.keyboard:
raveit65 113dc30
-            self.keyboard.ungrab(Gdk.CURRENT_TIME)
raveit65 113dc30
-        self.pointer.ungrab(Gdk.CURRENT_TIME)
raveit65 113dc30
-
raveit65 113dc30
-        return Gtk.Window.do_destroy(self)
raveit65 113dc30
-
raveit65 113dc30
-    def setup_event(self, event, window):
raveit65 113dc30
-        fr = event.window.get_origin()
raveit65 113dc30
-        to = window.get_origin()
raveit65 113dc30
-
raveit65 113dc30
-        event.window = window
raveit65 113dc30
-        event.x += fr[1] - to[1]
raveit65 113dc30
-        event.y += fr[2] - to[2]
raveit65 113dc30
-
raveit65 113dc30
-    def resolve_widgets(self, root):
raveit65 113dc30
-        res = [root]
raveit65 113dc30
-
raveit65 113dc30
-        if isinstance(root, Gtk.Container):
raveit65 113dc30
-            root.forall(lambda x, y: res.extend(self.resolve_widgets(x)), None)
raveit65 113dc30
-
raveit65 113dc30
-        return res
raveit65 113dc30
-
raveit65 113dc30
-    def resolve_windows(self, window):
raveit65 113dc30
-        if not window:
raveit65 113dc30
-            return []
raveit65 113dc30
-
raveit65 113dc30
-        res = [window]
raveit65 113dc30
-        res.extend(window.get_children())
raveit65 113dc30
-
raveit65 113dc30
-        return res
raveit65 113dc30
-
raveit65 113dc30
-    def propagate_mouse_event(self, event, reverse=True):
raveit65 113dc30
-        allwidgets = self.resolve_widgets(self.get_child())
raveit65 113dc30
-
raveit65 113dc30
-        if reverse:
raveit65 113dc30
-            allwidgets.reverse()
raveit65 113dc30
-
raveit65 113dc30
-        for widget in allwidgets:
raveit65 113dc30
-            windows = self.resolve_windows(widget.get_window())
raveit65 113dc30
-            windows.reverse()
raveit65 113dc30
-
raveit65 113dc30
-            for window in windows:
raveit65 113dc30
-                if not (window.get_events() & event.type):
raveit65 113dc30
-                    continue
raveit65 113dc30
-
raveit65 113dc30
-                if self.in_window(event, window):
raveit65 113dc30
-                    self.setup_event(event, window)
raveit65 113dc30
-
raveit65 113dc30
-                    if widget.event(event):
raveit65 113dc30
-                        return True
raveit65 113dc30
-
raveit65 113dc30
-        return False
raveit65 113dc30
-
raveit65 113dc30
-    def do_button_press_event(self, event):
raveit65 113dc30
-        if not self.in_window(event):
raveit65 113dc30
-            self.destroy()
raveit65 113dc30
-        else:
raveit65 113dc30
-            return self.propagate_mouse_event(event)
raveit65 113dc30
-
raveit65 113dc30
-    def do_button_release_event(self, event):
raveit65 113dc30
-        if not self.in_window(event):
raveit65 113dc30
-            self.destroy()
raveit65 113dc30
-        else:
raveit65 113dc30
-            return self.propagate_mouse_event(event)
raveit65 113dc30
-
raveit65 113dc30
-    def do_scroll_event(self, event):
raveit65 113dc30
-        return self.propagate_mouse_event(event, False)
raveit65 113dc30
-
raveit65 113dc30
-    def do_motion_notify_event(self, event):
raveit65 113dc30
-        return self.propagate_mouse_event(event)
raveit65 113dc30
-
raveit65 113dc30
-    def do_enter_notify_event(self, event):
raveit65 113dc30
-        return self.propagate_mouse_event(event)
raveit65 113dc30
-
raveit65 113dc30
-    def do_leave_notify_event(self, event):
raveit65 113dc30
-        return self.propagate_mouse_event(event)
raveit65 113dc30
-
raveit65 113dc30
-    def do_proximity_in_event(self, event):
raveit65 113dc30
-        return self.propagate_mouse_event(event)
raveit65 113dc30
-
raveit65 113dc30
-    def do_proximity_out_event(self, event):
raveit65 113dc30
-        return self.propagate_mouse_event(event)
raveit65 113dc30
 
raveit65 113dc30
 class Manager(GObject.Object):
raveit65 113dc30
     TOOL_COLUMN = 0 # For Tree
raveit65 113dc30
@@ -450,7 +313,9 @@ class Manager(GObject.Object):
raveit65 113dc30
             n1 = t1.name
raveit65 113dc30
             n2 = t2.name
raveit65 113dc30
 
raveit65 113dc30
-        return cmp(n1.lower(), n2.lower())
raveit65 113dc30
+        n1 = n1.lower()
raveit65 113dc30
+        n2 = n2.lower()
raveit65 113dc30
+        return (n1 > n2) - (n1 < n2)
raveit65 113dc30
 
raveit65 113dc30
     def __init_tools_view(self):
raveit65 113dc30
         # Tools column
raveit65 113dc30
@@ -499,8 +364,8 @@ class Manager(GObject.Object):
raveit65 113dc30
         else:
raveit65 113dc30
             return None, None
raveit65 113dc30
 
raveit65 113dc30
-    def compute_hash(self, string):
raveit65 113dc30
-        return hashlib.md5(string).hexdigest()
raveit65 113dc30
+    def compute_hash(self, stringofbytes):
raveit65 113dc30
+        return hashlib.md5(stringofbytes).hexdigest()
raveit65 113dc30
 
raveit65 113dc30
     def save_current_tool(self):
raveit65 113dc30
         if self.current_node is None:
raveit65 113dc30
@@ -521,7 +386,10 @@ class Manager(GObject.Object):
raveit65 113dc30
         buf = self['commands'].get_buffer()
raveit65 113dc30
         (start, end) = buf.get_bounds()
raveit65 113dc30
         script  = buf.get_text(start, end, False)
raveit65 113dc30
-        h = self.compute_hash(script)
raveit65 113dc30
+        scriptbytes = script
raveit65 113dc30
+        if not isinstance(scriptbytes, bytes):
raveit65 113dc30
+            scriptbytes = scriptbytes.encode('utf-8')
raveit65 113dc30
+        h = self.compute_hash(scriptbytes)
raveit65 113dc30
         if h != self.script_hash:
raveit65 113dc30
             # script has changed -> save it
raveit65 113dc30
             self.current_node.save_with_script([line + "\n" for line in script.splitlines()])
raveit65 113dc30
@@ -573,6 +441,9 @@ class Manager(GObject.Object):
raveit65 113dc30
         buf.set_text(script)
raveit65 113dc30
         buf.end_not_undoable_action()
raveit65 113dc30
 
raveit65 113dc30
+        if not isinstance(script, bytes):
raveit65 113dc30
+            script = script.encode('utf-8')
raveit65 113dc30
+
raveit65 113dc30
         self.script_hash = self.compute_hash(script)
raveit65 113dc30
         contenttype, uncertain = Gio.content_type_guess(None, script)
raveit65 113dc30
         lmanager = GtkSource.LanguageManager.get_default()
raveit65 113dc30
@@ -703,7 +574,7 @@ class Manager(GObject.Object):
raveit65 113dc30
             if language in node.languages:
raveit65 113dc30
                 node.languages.remove(language)
raveit65 113dc30
 
raveit65 113dc30
-            self._tool_rows[node] = filter(lambda x: x.valid(), self._tool_rows[node])
raveit65 113dc30
+            self._tool_rows[node] = [x for x in self._tool_rows[node] if x.valid()]
raveit65 113dc30
 
raveit65 113dc30
             if not self._tool_rows[node]:
raveit65 113dc30
                 del self._tool_rows[node]
raveit65 113dc30
@@ -714,7 +585,9 @@ class Manager(GObject.Object):
raveit65 113dc30
                     self.script_hash = None
raveit65 113dc30
 
raveit65 113dc30
                     if self.model.iter_is_valid(piter):
raveit65 113dc30
-                        self.view.set_cursor(self.model.get_path(piter), self.view.get_column(self.TOOL_COLUMN), False)
raveit65 113dc30
+                        self.view.set_cursor(self.model.get_path(piter),
raveit65 113dc30
+                                             self.view.get_column(self.TOOL_COLUMN),
raveit65 113dc30
+                                             False)
raveit65 113dc30
 
raveit65 113dc30
                 self.view.grab_focus()
raveit65 113dc30
 
raveit65 113dc30
@@ -799,19 +672,19 @@ class Manager(GObject.Object):
raveit65 113dc30
 
raveit65 113dc30
     def on_accelerator_key_press(self, entry, event):
raveit65 113dc30
         mask = event.state & Gtk.accelerator_get_default_mod_mask()
raveit65 113dc30
+        keyname = Gdk.keyval_name(event.keyval)
raveit65 113dc30
 
raveit65 113dc30
-        if event.keyval == Gdk.KEY_Escape:
raveit65 113dc30
+        if keyname == 'Escape':
raveit65 113dc30
             entry.set_text(default(self.current_node.shortcut, ''))
raveit65 113dc30
             self['commands'].grab_focus()
raveit65 113dc30
             return True
raveit65 113dc30
-        elif event.keyval == Gdk.KEY_Delete \
raveit65 113dc30
-          or event.keyval == Gdk.KEY_BackSpace:
raveit65 113dc30
+        elif keyname == 'Delete' or keyname == 'BackSpace':
raveit65 113dc30
             entry.set_text('')
raveit65 113dc30
             self.remove_accelerator(self.current_node)
raveit65 113dc30
             self.current_node.shortcut = None
raveit65 113dc30
             self['commands'].grab_focus()
raveit65 113dc30
             return True
raveit65 113dc30
-        elif event.keyval in range(Gdk.KEY_F1, Gdk.KEY_F12 + 1):
raveit65 113dc30
+        elif re.match('^F(:1[012]?|[2-9])$', keyname):
raveit65 113dc30
             # New accelerator
raveit65 113dc30
             if self.set_accelerator(event.keyval, mask):
raveit65 113dc30
                 entry.set_text(default(self.current_node.shortcut, ''))
raveit65 113dc30
@@ -911,7 +784,7 @@ class Manager(GObject.Object):
raveit65 113dc30
         ret = None
raveit65 113dc30
 
raveit65 113dc30
         if node:
raveit65 113dc30
-            ref = Gtk.TreeRowReference(self.model, self.model.get_path(piter))
raveit65 113dc30
+            ref = Gtk.TreeRowReference.new(self.model, self.model.get_path(piter))
raveit65 113dc30
 
raveit65 113dc30
         # Update languages, make sure to inhibit selection change stuff
raveit65 113dc30
         self.view.get_selection().handler_block(self.selection_changed_id)
raveit65 113dc30
@@ -966,12 +839,8 @@ class Manager(GObject.Object):
raveit65 113dc30
         self.view.get_selection().handler_unblock(self.selection_changed_id)
raveit65 113dc30
 
raveit65 113dc30
     def on_languages_button_clicked(self, button):
raveit65 113dc30
-        popup = LanguagesPopup(self.current_node.languages)
raveit65 113dc30
-        popup.set_transient_for(self.dialog)
raveit65 113dc30
-
raveit65 113dc30
-        origin = button.get_window().get_origin()
raveit65 113dc30
-        popup.move(origin[1], origin[2] - popup.get_allocation().height)
raveit65 113dc30
-
raveit65 113dc30
-        popup.connect('destroy', self.update_languages)
raveit65 113dc30
+        popup = LanguagesPopup(button, self.current_node.languages)
raveit65 113dc30
+        popup.show()
raveit65 113dc30
+        popup.connect('closed', self.update_languages)
raveit65 113dc30
 
raveit65 113dc30
 # ex:et:ts=4:
raveit65 113dc30
diff --git a/plugins/externaltools/tools/outputpanel.py b/plugins/externaltools/tools/outputpanel.py
raveit65 113dc30
index e063eb2..39fd99a 100755
raveit65 113dc30
--- a/plugins/externaltools/tools/outputpanel.py
raveit65 113dc30
+++ b/plugins/externaltools/tools/outputpanel.py
raveit65 113dc30
@@ -20,11 +20,12 @@
raveit65 113dc30
 __all__ = ('OutputPanel', 'UniqueById')
raveit65 113dc30
 
raveit65 113dc30
 import os
raveit65 113dc30
-from weakref import WeakKeyDictionary
raveit65 113dc30
-from capture import *
raveit65 113dc30
 import re
raveit65 113dc30
-import linkparsing
raveit65 113dc30
-import filelookup
raveit65 113dc30
+
raveit65 113dc30
+from weakref import WeakKeyDictionary
raveit65 113dc30
+from .capture import *
raveit65 113dc30
+from . import linkparsing
raveit65 113dc30
+from . import filelookup
raveit65 113dc30
 from gi.repository import GLib, Gdk, Gtk, Pango, Pluma
raveit65 113dc30
 
raveit65 113dc30
 class UniqueById:
raveit65 113dc30
diff --git a/plugins/externaltools/tools/outputpanel.ui b/plugins/externaltools/tools/outputpanel.ui
raveit65 113dc30
index 01904a6..30f2e33 100644
raveit65 113dc30
--- a/plugins/externaltools/tools/outputpanel.ui
raveit65 113dc30
+++ b/plugins/externaltools/tools/outputpanel.ui
raveit65 113dc30
@@ -1,5 +1,5 @@
raveit65 113dc30
 
raveit65 113dc30
-
raveit65 113dc30
+
raveit65 113dc30
 
raveit65 113dc30
 Version: 2.91.3
raveit65 113dc30
 	Date: Sat Nov 18 13:58:59 2006
raveit65 113dc30
@@ -9,14 +9,17 @@ Version: 2.91.3
raveit65 113dc30
 -->
raveit65 113dc30
 <interface>
raveit65 113dc30
   <requires lib="gtk+" version="3.22"/>
raveit65 113dc30
-  <object class="GtkBox" id="output-panel">
raveit65 113dc30
+  <object class="GtkGrid" id="output-panel">
raveit65 113dc30
     <property name="visible">True</property>
raveit65 113dc30
     <property name="can_focus">False</property>
raveit65 113dc30
+    <property name="hexpand">True</property>
raveit65 113dc30
+    <property name="vexpand">True</property>
raveit65 113dc30
     <child>
raveit65 113dc30
       <object class="GtkScrolledWindow" id="scrolledwindow1">
raveit65 113dc30
         <property name="visible">True</property>
raveit65 113dc30
         <property name="can_focus">False</property>
raveit65 113dc30
         <property name="hexpand">True</property>
raveit65 113dc30
+        <property name="vexpand">True</property>
raveit65 113dc30
         <property name="shadow_type">in</property>
raveit65 113dc30
         <child>
raveit65 113dc30
           <object class="GtkTextView" id="view">
raveit65 113dc30
@@ -33,9 +36,8 @@ Version: 2.91.3
raveit65 113dc30
         </child>
raveit65 113dc30
       </object>
raveit65 113dc30
       <packing>
raveit65 113dc30
-        <property name="expand">False</property>
raveit65 113dc30
-        <property name="fill">True</property>
raveit65 113dc30
-        <property name="position">0</property>
raveit65 113dc30
+        <property name="left_attach">0</property>
raveit65 113dc30
+        <property name="top_attach">0</property>
raveit65 113dc30
       </packing>
raveit65 113dc30
     </child>
raveit65 113dc30
     <child>
raveit65 113dc30
@@ -43,7 +45,6 @@ Version: 2.91.3
raveit65 113dc30
         <property name="visible">True</property>
raveit65 113dc30
         <property name="can_focus">False</property>
raveit65 113dc30
         <property name="border_width">6</property>
raveit65 113dc30
-        <property name="orientation">vertical</property>
raveit65 113dc30
         <property name="spacing">6</property>
raveit65 113dc30
         <property name="layout_style">end</property>
raveit65 113dc30
         <child>
raveit65 113dc30
@@ -57,16 +58,15 @@ Version: 2.91.3
raveit65 113dc30
             <signal name="clicked" handler="on_stop_clicked" swapped="no"/>
raveit65 113dc30
           </object>
raveit65 113dc30
           <packing>
raveit65 113dc30
-            <property name="expand">True</property>
raveit65 113dc30
-            <property name="fill">True</property>
raveit65 113dc30
+            <property name="expand">False</property>
raveit65 113dc30
+            <property name="fill">False</property>
raveit65 113dc30
             <property name="position">0</property>
raveit65 113dc30
           </packing>
raveit65 113dc30
         </child>
raveit65 113dc30
       </object>
raveit65 113dc30
       <packing>
raveit65 113dc30
-        <property name="expand">False</property>
raveit65 113dc30
-        <property name="fill">True</property>
raveit65 113dc30
-        <property name="position">1</property>
raveit65 113dc30
+        <property name="left_attach">1</property>
raveit65 113dc30
+        <property name="top_attach">0</property>
raveit65 113dc30
       </packing>
raveit65 113dc30
     </child>
raveit65 113dc30
   </object>
raveit65 113dc30
diff --git a/plugins/externaltools/tools/tools.ui b/plugins/externaltools/tools/tools.ui
raveit65 113dc30
index afdd3f9..21de842 100644
raveit65 113dc30
--- a/plugins/externaltools/tools/tools.ui
raveit65 113dc30
+++ b/plugins/externaltools/tools/tools.ui
raveit65 113dc30
@@ -1,30 +1,45 @@
raveit65 113dc30
-
raveit65 113dc30
+
raveit65 113dc30
+
raveit65 113dc30
 <interface>
raveit65 113dc30
-  <object class="GtkListStore" id="model_save_files">
raveit65 113dc30
+  <requires lib="gtk+" version="3.0"/>
raveit65 113dc30
+  <object class="PlumaDocument" id="commands_buffer">
raveit65 113dc30
+  	<property name="highlight-matching-brackets">True</property>
raveit65 113dc30
+  </object>
raveit65 113dc30
+  <object class="GtkListStore" id="model_applicability">
raveit65 113dc30
     <columns>
raveit65 113dc30
       
raveit65 113dc30
       <column type="gchararray"/>
raveit65 113dc30
-      
raveit65 113dc30
+      
raveit65 113dc30
       <column type="gchararray"/>
raveit65 113dc30
     </columns>
raveit65 113dc30
     <data>
raveit65 113dc30
       <row>
raveit65 113dc30
-        Nothing
raveit65 113dc30
-        nothing
raveit65 113dc30
+        All documents
raveit65 113dc30
+        all
raveit65 113dc30
       </row>
raveit65 113dc30
       <row>
raveit65 113dc30
-        Current document
raveit65 113dc30
-        document
raveit65 113dc30
+        All documents except untitled ones
raveit65 113dc30
+        titled
raveit65 113dc30
       </row>
raveit65 113dc30
       <row>
raveit65 113dc30
-        All documents
raveit65 113dc30
-        all
raveit65 113dc30
+        Local files only
raveit65 113dc30
+        local
raveit65 113dc30
+      </row>
raveit65 113dc30
+      <row>
raveit65 113dc30
+        Remote files only
raveit65 113dc30
+        remote
raveit65 113dc30
+      </row>
raveit65 113dc30
+      <row>
raveit65 113dc30
+        Untitled documents only
raveit65 113dc30
+        untitled
raveit65 113dc30
       </row>
raveit65 113dc30
     </data>
raveit65 113dc30
   </object>
raveit65 113dc30
   <object class="GtkListStore" id="model_input">
raveit65 113dc30
     <columns>
raveit65 113dc30
+      
raveit65 113dc30
       <column type="gchararray"/>
raveit65 113dc30
+      
raveit65 113dc30
       <column type="gchararray"/>
raveit65 113dc30
     </columns>
raveit65 113dc30
     <data>
raveit65 113dc30
@@ -62,7 +77,7 @@
raveit65 113dc30
       <column type="gchararray"/>
raveit65 113dc30
     </columns>
raveit65 113dc30
     <data>
raveit65 113dc30
-	  <row>
raveit65 113dc30
+      <row>
raveit65 113dc30
         Nothing
raveit65 113dc30
         nothing
raveit65 113dc30
       </row>
raveit65 113dc30
@@ -92,7 +107,7 @@
raveit65 113dc30
       </row>
raveit65 113dc30
     </data>
raveit65 113dc30
   </object>
raveit65 113dc30
-  <object class="GtkListStore" id="model_applicability">
raveit65 113dc30
+  <object class="GtkListStore" id="model_save_files">
raveit65 113dc30
     <columns>
raveit65 113dc30
       
raveit65 113dc30
       <column type="gchararray"/>
raveit65 113dc30
@@ -101,72 +116,105 @@
raveit65 113dc30
     </columns>
raveit65 113dc30
     <data>
raveit65 113dc30
       <row>
raveit65 113dc30
-        All documents
raveit65 113dc30
-        all
raveit65 113dc30
-      </row>
raveit65 113dc30
-      <row>
raveit65 113dc30
-        All documents except untitled ones
raveit65 113dc30
-        titled
raveit65 113dc30
-      </row>
raveit65 113dc30
-      <row>
raveit65 113dc30
-        Local files only
raveit65 113dc30
-        local
raveit65 113dc30
+        Nothing
raveit65 113dc30
+        nothing
raveit65 113dc30
       </row>
raveit65 113dc30
       <row>
raveit65 113dc30
-        Remote files only
raveit65 113dc30
-        remote
raveit65 113dc30
+        Current document
raveit65 113dc30
+        document
raveit65 113dc30
       </row>
raveit65 113dc30
       <row>
raveit65 113dc30
-        Untitled documents only
raveit65 113dc30
-        untitled
raveit65 113dc30
+        All documents
raveit65 113dc30
+        all
raveit65 113dc30
       </row>
raveit65 113dc30
     </data>
raveit65 113dc30
   </object>
raveit65 113dc30
-  <object class="PlumaDocument" id="commands_buffer">
raveit65 113dc30
-  	<property name="highlight-matching-brackets">True</property>
raveit65 113dc30
-  </object>
raveit65 113dc30
   <object class="GtkDialog" id="tool-manager-dialog">
raveit65 113dc30
+    <property name="can_focus">False</property>
raveit65 113dc30
     <property name="title" translatable="yes">External Tools Manager</property>
raveit65 113dc30
     <property name="default_width">750</property>
raveit65 113dc30
     <property name="default_height">500</property>
raveit65 113dc30
     <property name="type_hint">dialog</property>
raveit65 113dc30
     <property name="skip_taskbar_hint">True</property>
raveit65 113dc30
-    <signal name="configure_event" handler="on_tool_manager_dialog_configure_event"/>
raveit65 113dc30
-    <signal name="focus_out_event" handler="on_tool_manager_dialog_focus_out"/>
raveit65 113dc30
-    <signal name="response" handler="on_tool_manager_dialog_response"/>
raveit65 113dc30
+    <signal name="configure-event" handler="on_tool_manager_dialog_configure_event" swapped="no"/>
raveit65 113dc30
+    <signal name="focus-out-event" handler="on_tool_manager_dialog_focus_out" swapped="no"/>
raveit65 113dc30
+    <signal name="response" handler="on_tool_manager_dialog_response" swapped="no"/>
raveit65 113dc30
+    <child>
raveit65 113dc30
+      <placeholder/>
raveit65 113dc30
+    </child>
raveit65 113dc30
     <child internal-child="vbox">
raveit65 113dc30
-      <object class="GtkVBox" id="tool-manager-dialog-vbox">
raveit65 113dc30
+      <object class="GtkBox" id="tool-manager-dialog-vbox">
raveit65 113dc30
         <property name="visible">True</property>
raveit65 113dc30
+        <property name="can_focus">False</property>
raveit65 113dc30
+        <property name="orientation">vertical</property>
raveit65 113dc30
+        <child internal-child="action_area">
raveit65 113dc30
+          <object class="GtkButtonBox" id="hbuttonbox1">
raveit65 113dc30
+            <property name="visible">True</property>
raveit65 113dc30
+            <property name="can_focus">False</property>
raveit65 113dc30
+            <property name="layout_style">end</property>
raveit65 113dc30
+            <child>
raveit65 113dc30
+              <object class="GtkButton" id="button1">
raveit65 113dc30
+                <property name="label">gtk-help</property>
raveit65 113dc30
+                <property name="visible">True</property>
raveit65 113dc30
+                <property name="can_focus">True</property>
raveit65 113dc30
+                <property name="can_default">True</property>
raveit65 113dc30
+                <property name="receives_default">False</property>
raveit65 113dc30
+                <property name="use_stock">True</property>
raveit65 113dc30
+              </object>
raveit65 113dc30
+              <packing>
raveit65 113dc30
+                <property name="expand">False</property>
raveit65 113dc30
+                <property name="fill">False</property>
raveit65 113dc30
+                <property name="position">0</property>
raveit65 113dc30
+              </packing>
raveit65 113dc30
+            </child>
raveit65 113dc30
+            <child>
raveit65 113dc30
+              <object class="GtkButton" id="button2">
raveit65 113dc30
+                <property name="label">gtk-close</property>
raveit65 113dc30
+                <property name="visible">True</property>
raveit65 113dc30
+                <property name="can_focus">True</property>
raveit65 113dc30
+                <property name="can_default">True</property>
raveit65 113dc30
+                <property name="receives_default">False</property>
raveit65 113dc30
+                <property name="use_stock">True</property>
raveit65 113dc30
+              </object>
raveit65 113dc30
+              <packing>
raveit65 113dc30
+                <property name="expand">False</property>
raveit65 113dc30
+                <property name="fill">False</property>
raveit65 113dc30
+                <property name="position">1</property>
raveit65 113dc30
+              </packing>
raveit65 113dc30
+            </child>
raveit65 113dc30
+          </object>
raveit65 113dc30
+          <packing>
raveit65 113dc30
+            <property name="expand">False</property>
raveit65 113dc30
+            <property name="fill">False</property>
raveit65 113dc30
+            <property name="pack_type">end</property>
raveit65 113dc30
+            <property name="position">0</property>
raveit65 113dc30
+          </packing>
raveit65 113dc30
+        </child>
raveit65 113dc30
         <child>
raveit65 113dc30
-          <object class="GtkHPaned" id="paned">
raveit65 113dc30
+          <object class="GtkPaned" id="paned">
raveit65 113dc30
             <property name="visible">True</property>
raveit65 113dc30
             <property name="can_focus">True</property>
raveit65 113dc30
-            <property name="border_width">6</property>
raveit65 113dc30
+            <property name="hexpand">True</property>
raveit65 113dc30
+            <property name="vexpand">True</property>
raveit65 113dc30
             <property name="position">275</property>
raveit65 113dc30
             <child>
raveit65 113dc30
-              <object class="GtkVBox" id="vbox2">
raveit65 113dc30
+              <object class="GtkGrid">
raveit65 113dc30
                 <property name="visible">True</property>
raveit65 113dc30
-                <property name="spacing">6</property>
raveit65 113dc30
-                <child>
raveit65 113dc30
-                  <object class="GtkLabel" id="label20">
raveit65 113dc30
-                    <property name="visible">True</property>
raveit65 113dc30
-                    <property name="xalign">0</property>
raveit65 113dc30
-                    <property name="label" translatable="yes">_Tools:</property>
raveit65 113dc30
-                    <property name="use_underline">True</property>
raveit65 113dc30
-                    <property name="mnemonic_widget">view</property>
raveit65 113dc30
-                  </object>
raveit65 113dc30
-                  <packing>
raveit65 113dc30
-                    <property name="expand">False</property>
raveit65 113dc30
-                    <property name="fill">False</property>
raveit65 113dc30
-                    <property name="position">0</property>
raveit65 113dc30
-                  </packing>
raveit65 113dc30
-                </child>
raveit65 113dc30
+                <property name="can_focus">False</property>
raveit65 113dc30
+                <property name="margin_left">6</property>
raveit65 113dc30
+                <property name="margin_right">6</property>
raveit65 113dc30
+                <property name="margin_top">6</property>
raveit65 113dc30
+                <property name="margin_bottom">6</property>
raveit65 113dc30
+                <property name="hexpand">True</property>
raveit65 113dc30
+                <property name="vexpand">True</property>
raveit65 113dc30
+                <property name="orientation">vertical</property>
raveit65 113dc30
+                <property name="row_spacing">6</property>
raveit65 113dc30
                 <child>
raveit65 113dc30
                   <object class="GtkScrolledWindow" id="scrolled_window1">
raveit65 113dc30
                     <property name="visible">True</property>
raveit65 113dc30
                     <property name="can_focus">False</property>
raveit65 113dc30
-                    <property name="hscrollbar_policy">automatic</property>
raveit65 113dc30
-                    <property name="vscrollbar_policy">automatic</property>
raveit65 113dc30
+                    <property name="hexpand">True</property>
raveit65 113dc30
+                    <property name="vexpand">True</property>
raveit65 113dc30
                     <property name="shadow_type">in</property>
raveit65 113dc30
                     <child>
raveit65 113dc30
                       <object class="GtkTreeView" id="view">
raveit65 113dc30
@@ -174,29 +222,49 @@
raveit65 113dc30
                         <property name="can_focus">True</property>
raveit65 113dc30
                         <property name="headers_visible">False</property>
raveit65 113dc30
                         <property name="reorderable">True</property>
raveit65 113dc30
+                        <child internal-child="selection">
raveit65 113dc30
+                          <object class="GtkTreeSelection"/>
raveit65 113dc30
+                        </child>
raveit65 113dc30
                       </object>
raveit65 113dc30
                     </child>
raveit65 113dc30
                   </object>
raveit65 113dc30
                   <packing>
raveit65 113dc30
-                    <property name="position">1</property>
raveit65 113dc30
+                    <property name="left_attach">0</property>
raveit65 113dc30
+                    <property name="top_attach">1</property>
raveit65 113dc30
+                  </packing>
raveit65 113dc30
+                </child>
raveit65 113dc30
+                <child>
raveit65 113dc30
+                  <object class="GtkLabel" id="label20">
raveit65 113dc30
+                    <property name="visible">True</property>
raveit65 113dc30
+                    <property name="can_focus">False</property>
raveit65 113dc30
+                    <property name="label" translatable="yes">_Tools:</property>
raveit65 113dc30
+                    <property name="use_underline">True</property>
raveit65 113dc30
+                    <property name="mnemonic_widget">view</property>
raveit65 113dc30
+                    <property name="xalign">0</property>
raveit65 113dc30
+                  </object>
raveit65 113dc30
+                  <packing>
raveit65 113dc30
+                    <property name="left_attach">0</property>
raveit65 113dc30
+                    <property name="top_attach">0</property>
raveit65 113dc30
                   </packing>
raveit65 113dc30
                 </child>
raveit65 113dc30
                 <child>
raveit65 113dc30
-                  <object class="GtkHBox" id="hbox2">
raveit65 113dc30
+                  <object class="GtkButtonBox">
raveit65 113dc30
                     <property name="visible">True</property>
raveit65 113dc30
-                    <property name="spacing">6</property>
raveit65 113dc30
+                    <property name="can_focus">False</property>
raveit65 113dc30
+                    <property name="layout_style">start</property>
raveit65 113dc30
                     <child>
raveit65 113dc30
                       <object class="GtkButton" id="new-tool-button">
raveit65 113dc30
                         <property name="visible">True</property>
raveit65 113dc30
                         <property name="can_focus">False</property>
raveit65 113dc30
                         <property name="can_default">True</property>
raveit65 113dc30
                         <property name="receives_default">False</property>
raveit65 113dc30
-                        <signal name="clicked" handler="on_new_tool_button_clicked"/>
raveit65 113dc30
+                        <property name="halign">start</property>
raveit65 113dc30
+                        <signal name="clicked" handler="on_new_tool_button_clicked" swapped="no"/>
raveit65 113dc30
                         <child>
raveit65 113dc30
                           <object class="GtkImage" id="new-tool-image">
raveit65 113dc30
                             <property name="visible">True</property>
raveit65 113dc30
+                            <property name="can_focus">False</property>
raveit65 113dc30
                             <property name="stock">gtk-new</property>
raveit65 113dc30
-                            <property name="icon-size">4</property>
raveit65 113dc30
                           </object>
raveit65 113dc30
                         </child>
raveit65 113dc30
                       </object>
raveit65 113dc30
@@ -204,344 +272,311 @@
raveit65 113dc30
                         <property name="expand">False</property>
raveit65 113dc30
                         <property name="fill">False</property>
raveit65 113dc30
                         <property name="position">0</property>
raveit65 113dc30
+                        <property name="non_homogeneous">True</property>
raveit65 113dc30
                       </packing>
raveit65 113dc30
                     </child>
raveit65 113dc30
                     <child>
raveit65 113dc30
-                      <object class="GtkButton" id="revert-tool-button">
raveit65 113dc30
+                      <object class="GtkButton" id="remove-tool-button">
raveit65 113dc30
+                        <property name="visible">True</property>
raveit65 113dc30
                         <property name="can_focus">False</property>
raveit65 113dc30
+                        <property name="can_default">True</property>
raveit65 113dc30
                         <property name="receives_default">False</property>
raveit65 113dc30
-                        <signal name="clicked" handler="on_remove_tool_button_clicked"/>
raveit65 113dc30
+                        <property name="halign">start</property>
raveit65 113dc30
+                        <signal name="clicked" handler="on_remove_tool_button_clicked" swapped="no"/>
raveit65 113dc30
                         <child>
raveit65 113dc30
-                          <object class="GtkImage" id="revert-tool-image">
raveit65 113dc30
+                          <object class="GtkImage" id="remove-tool-image">
raveit65 113dc30
                             <property name="visible">True</property>
raveit65 113dc30
-                            <property name="stock">gtk-revert-to-saved</property>
raveit65 113dc30
-                            <property name="icon-size">4</property>
raveit65 113dc30
+                            <property name="can_focus">False</property>
raveit65 113dc30
+                            <property name="stock">gtk-delete</property>
raveit65 113dc30
                           </object>
raveit65 113dc30
                         </child>
raveit65 113dc30
                       </object>
raveit65 113dc30
                       <packing>
raveit65 113dc30
                         <property name="expand">False</property>
raveit65 113dc30
                         <property name="fill">False</property>
raveit65 113dc30
-                        <property name="pack_type">end</property>
raveit65 113dc30
-                        <property name="position">2</property>
raveit65 113dc30
+                        <property name="position">1</property>
raveit65 113dc30
+                        <property name="non_homogeneous">True</property>
raveit65 113dc30
                       </packing>
raveit65 113dc30
                     </child>
raveit65 113dc30
                     <child>
raveit65 113dc30
-                      <object class="GtkButton" id="remove-tool-button">
raveit65 113dc30
-                        <property name="visible">True</property>
raveit65 113dc30
+                      <object class="GtkButton" id="revert-tool-button">
raveit65 113dc30
                         <property name="can_focus">False</property>
raveit65 113dc30
-                        <property name="can_default">True</property>
raveit65 113dc30
                         <property name="receives_default">False</property>
raveit65 113dc30
-                        <signal name="clicked" handler="on_remove_tool_button_clicked"/>
raveit65 113dc30
+                        <property name="halign">start</property>
raveit65 113dc30
+                        <signal name="clicked" handler="on_remove_tool_button_clicked" swapped="no"/>
raveit65 113dc30
                         <child>
raveit65 113dc30
-                          <object class="GtkImage" id="remove-tool-image">
raveit65 113dc30
+                          <object class="GtkImage" id="revert-tool-image">
raveit65 113dc30
                             <property name="visible">True</property>
raveit65 113dc30
-                            <property name="stock">gtk-delete</property>
raveit65 113dc30
-                            <property name="icon-size">4</property>
raveit65 113dc30
+                            <property name="can_focus">False</property>
raveit65 113dc30
+                            <property name="stock">gtk-revert-to-saved</property>
raveit65 113dc30
                           </object>
raveit65 113dc30
                         </child>
raveit65 113dc30
                       </object>
raveit65 113dc30
                       <packing>
raveit65 113dc30
                         <property name="expand">False</property>
raveit65 113dc30
                         <property name="fill">False</property>
raveit65 113dc30
-                        <property name="pack_type">end</property>
raveit65 113dc30
-                        <property name="position">1</property>
raveit65 113dc30
+                        <property name="position">2</property>
raveit65 113dc30
+                        <property name="non_homogeneous">True</property>
raveit65 113dc30
                       </packing>
raveit65 113dc30
                     </child>
raveit65 113dc30
                   </object>
raveit65 113dc30
                   <packing>
raveit65 113dc30
-                    <property name="expand">False</property>
raveit65 113dc30
-                    <property name="fill">False</property>
raveit65 113dc30
-                    <property name="position">2</property>
raveit65 113dc30
+                    <property name="left_attach">0</property>
raveit65 113dc30
+                    <property name="top_attach">2</property>
raveit65 113dc30
                   </packing>
raveit65 113dc30
                 </child>
raveit65 113dc30
               </object>
raveit65 113dc30
               <packing>
raveit65 113dc30
-                <property name="resize">False</property>
raveit65 113dc30
-                <property name="shrink">False</property>
raveit65 113dc30
+                <property name="resize">True</property>
raveit65 113dc30
+                <property name="shrink">True</property>
raveit65 113dc30
               </packing>
raveit65 113dc30
             </child>
raveit65 113dc30
             <child>
raveit65 113dc30
-              <object class="GtkVBox" id="vbox5">
raveit65 113dc30
+              <object class="GtkGrid">
raveit65 113dc30
                 <property name="visible">True</property>
raveit65 113dc30
-                <property name="spacing">6</property>
raveit65 113dc30
+                <property name="can_focus">False</property>
raveit65 113dc30
+                <property name="hexpand">True</property>
raveit65 113dc30
+                <property name="vexpand">True</property>
raveit65 113dc30
+                <property name="orientation">vertical</property>
raveit65 113dc30
+                <property name="row_spacing">6</property>
raveit65 113dc30
                 <child>
raveit65 113dc30
-                  <object class="GtkLabel" id="title">
raveit65 113dc30
-                    <property name="visible">True</property>
raveit65 113dc30
-                    <property name="xalign">0</property>
raveit65 113dc30
-                    <property name="yalign">0.5</property>
raveit65 113dc30
-                    <property name="label" translatable="yes">_Edit:</property>
raveit65 113dc30
-                    <property name="mnemonic_widget">commands</property>
raveit65 113dc30
-                    <property name="use_underline">True</property>
raveit65 113dc30
-                  </object>
raveit65 113dc30
-                  <packing>
raveit65 113dc30
-                    <property name="expand">False</property>
raveit65 113dc30
-                    <property name="fill">False</property>
raveit65 113dc30
-                    <property name="position">0</property>
raveit65 113dc30
-                  </packing>
raveit65 113dc30
-                </child>
raveit65 113dc30
-                <child>
raveit65 113dc30
-                  <object class="GtkHBox" id="hbox7">
raveit65 113dc30
+                  <object class="GtkGrid" id="tool-table">
raveit65 113dc30
                     <property name="visible">True</property>
raveit65 113dc30
+                    <property name="can_focus">False</property>
raveit65 113dc30
+                    <property name="hexpand">True</property>
raveit65 113dc30
+                    <property name="vexpand">True</property>
raveit65 113dc30
+                    <property name="orientation">vertical</property>
raveit65 113dc30
+                    <property name="row_spacing">6</property>
raveit65 113dc30
+                    <property name="column_spacing">6</property>
raveit65 113dc30
                     <child>
raveit65 113dc30
-                      <object class="GtkLabel" id="label22">
raveit65 113dc30
+                      <object class="GtkLabel" id="label23">
raveit65 113dc30
                         <property name="visible">True</property>
raveit65 113dc30
-                        <property name="label" translatable="yes">    </property>
raveit65 113dc30
+                        <property name="can_focus">False</property>
raveit65 113dc30
+                        <property name="label" translatable="yes">_Applicability:</property>
raveit65 113dc30
+                        <property name="use_underline">True</property>
raveit65 113dc30
+                        <property name="xalign">0</property>
raveit65 113dc30
                       </object>
raveit65 113dc30
                       <packing>
raveit65 113dc30
-                        <property name="expand">False</property>
raveit65 113dc30
-                        <property name="fill">False</property>
raveit65 113dc30
-                        <property name="position">0</property>
raveit65 113dc30
+                        <property name="left_attach">0</property>
raveit65 113dc30
+                        <property name="top_attach">5</property>
raveit65 113dc30
+                      </packing>
raveit65 113dc30
+                    </child>
raveit65 113dc30
+                    <child>
raveit65 113dc30
+                      <object class="GtkLabel" id="label8">
raveit65 113dc30
+                        <property name="visible">True</property>
raveit65 113dc30
+                        <property name="can_focus">False</property>
raveit65 113dc30
+                        <property name="label" translatable="yes">_Output:</property>
raveit65 113dc30
+                        <property name="use_underline">True</property>
raveit65 113dc30
+                        <property name="xalign">0</property>
raveit65 113dc30
+                      </object>
raveit65 113dc30
+                      <packing>
raveit65 113dc30
+                        <property name="left_attach">0</property>
raveit65 113dc30
+                        <property name="top_attach">4</property>
raveit65 113dc30
+                      </packing>
raveit65 113dc30
+                    </child>
raveit65 113dc30
+                    <child>
raveit65 113dc30
+                      <object class="GtkLabel" id="label7">
raveit65 113dc30
+                        <property name="visible">True</property>
raveit65 113dc30
+                        <property name="can_focus">False</property>
raveit65 113dc30
+                        <property name="label" translatable="yes">_Input:</property>
raveit65 113dc30
+                        <property name="use_underline">True</property>
raveit65 113dc30
+                        <property name="xalign">0</property>
raveit65 113dc30
+                      </object>
raveit65 113dc30
+                      <packing>
raveit65 113dc30
+                        <property name="left_attach">0</property>
raveit65 113dc30
+                        <property name="top_attach">3</property>
raveit65 113dc30
                       </packing>
raveit65 113dc30
                     </child>
raveit65 113dc30
                     <child>
raveit65 113dc30
-                      <object class="GtkTable" id="tool-table">
raveit65 113dc30
+                      <object class="GtkLabel" id="label6">
raveit65 113dc30
                         <property name="visible">True</property>
raveit65 113dc30
-                        <property name="n_rows">6</property>
raveit65 113dc30
-                        <property name="n_columns">2</property>
raveit65 113dc30
-                        <property name="column_spacing">6</property>
raveit65 113dc30
-                        <property name="row_spacing">6</property>
raveit65 113dc30
+                        <property name="can_focus">False</property>
raveit65 113dc30
+                        <property name="label" translatable="yes">_Save:</property>
raveit65 113dc30
+                        <property name="use_underline">True</property>
raveit65 113dc30
+                        <property name="xalign">0</property>
raveit65 113dc30
+                      </object>
raveit65 113dc30
+                      <packing>
raveit65 113dc30
+                        <property name="left_attach">0</property>
raveit65 113dc30
+                        <property name="top_attach">2</property>
raveit65 113dc30
+                      </packing>
raveit65 113dc30
+                    </child>
raveit65 113dc30
+                    <child>
raveit65 113dc30
+                      <object class="GtkLabel" id="label3">
raveit65 113dc30
+                        <property name="visible">True</property>
raveit65 113dc30
+                        <property name="can_focus">False</property>
raveit65 113dc30
+                        <property name="label" translatable="yes">_Shortcut Key:</property>
raveit65 113dc30
+                        <property name="use_underline">True</property>
raveit65 113dc30
+                        <property name="xalign">0</property>
raveit65 113dc30
+                      </object>
raveit65 113dc30
+                      <packing>
raveit65 113dc30
+                        <property name="left_attach">0</property>
raveit65 113dc30
+                        <property name="top_attach">1</property>
raveit65 113dc30
+                      </packing>
raveit65 113dc30
+                    </child>
raveit65 113dc30
+                    <child>
raveit65 113dc30
+                      <object class="GtkComboBox" id="output">
raveit65 113dc30
+                        <property name="visible">True</property>
raveit65 113dc30
+                        <property name="can_focus">False</property>
raveit65 113dc30
+                        <property name="model">model_output</property>
raveit65 113dc30
                         <child>
raveit65 113dc30
-                          <object class="GtkEntry" id="accelerator">
raveit65 113dc30
-                            <property name="visible">True</property>
raveit65 113dc30
-                            <property name="can_focus">True</property>
raveit65 113dc30
-                            <signal name="key_press_event" handler="on_accelerator_key_press"/>
raveit65 113dc30
-                            <signal name="focus_out_event" handler="on_accelerator_focus_out"/>
raveit65 113dc30
-                            <signal name="focus_in_event" handler="on_accelerator_focus_in"/>
raveit65 113dc30
-                          </object>
raveit65 113dc30
-                          <packing>
raveit65 113dc30
-                            <property name="left_attach">1</property>
raveit65 113dc30
-                            <property name="right_attach">2</property>
raveit65 113dc30
-                            <property name="top_attach">1</property>
raveit65 113dc30
-                            <property name="bottom_attach">2</property>
raveit65 113dc30
-                            <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
raveit65 113dc30
-                            <property name="y_options">GTK_FILL</property>
raveit65 113dc30
-                          </packing>
raveit65 113dc30
+                          <object class="GtkCellRendererText" id="output_renderer"/>
raveit65 113dc30
+                          <attributes>
raveit65 113dc30
+                            <attribute name="text">0</attribute>
raveit65 113dc30
+                          </attributes>
raveit65 113dc30
                         </child>
raveit65 113dc30
+                      </object>
raveit65 113dc30
+                      <packing>
raveit65 113dc30
+                        <property name="left_attach">1</property>
raveit65 113dc30
+                        <property name="top_attach">4</property>
raveit65 113dc30
+                      </packing>
raveit65 113dc30
+                    </child>
raveit65 113dc30
+                    <child>
raveit65 113dc30
+                      <object class="GtkComboBox" id="input">
raveit65 113dc30
+                        <property name="visible">True</property>
raveit65 113dc30
+                        <property name="can_focus">False</property>
raveit65 113dc30
+                        <property name="model">model_input</property>
raveit65 113dc30
                         <child>
raveit65 113dc30
-                          <object class="GtkHBox" id="hbox1">
raveit65 113dc30
-                            <property name="visible">True</property>
raveit65 113dc30
-                            <child>
raveit65 113dc30
-		                      <object class="GtkComboBox" id="applicability">
raveit65 113dc30
-		                        <property name="visible">True</property>
raveit65 113dc30
-		                        <property name="model">model_applicability</property>
raveit65 113dc30
-		                        <child>
raveit65 113dc30
-		                          <object class="GtkCellRendererText" id="applicability_renderer"/>
raveit65 113dc30
-		                          <attributes>
raveit65 113dc30
-		                            <attribute name="text">0</attribute>
raveit65 113dc30
-		                          </attributes>
raveit65 113dc30
-		                        </child>
raveit65 113dc30
-		                      </object>
raveit65 113dc30
-                              <packing>
raveit65 113dc30
-                                <property name="position">0</property>
raveit65 113dc30
-                                <property name="expand">False</property>
raveit65 113dc30
-                                <property name="fill">True</property>
raveit65 113dc30
-                              </packing>
raveit65 113dc30
-                            </child>
raveit65 113dc30
-                            <child>
raveit65 113dc30
-                              <object class="GtkEventBox" id="languages_event_box">
raveit65 113dc30
-                              	<property name="visible">True</property>
raveit65 113dc30
-                              	<property name="visible-window">True</property>
raveit65 113dc30
-                              	<child>
raveit65 113dc30
-		                          <object class="GtkButton" id="languages_button">
raveit65 113dc30
-		                            <property name="visible">True</property>
raveit65 113dc30
-		                            <signal name="clicked" handler="on_languages_button_clicked"/>
raveit65 113dc30
-		                            <child>
raveit65 113dc30
-		                              <object class="GtkLabel" id="languages_label">
raveit65 113dc30
-		                                <property name="visible">True</property>
raveit65 113dc30
-		                                <property name="label" translatable="yes">All Languages</property>
raveit65 113dc30
-		                                <property name="xalign">0</property>
raveit65 113dc30
-		                                <property name="yalign">0.5</property>
raveit65 113dc30
-		                                <property name="ellipsize">PANGO_ELLIPSIZE_MIDDLE</property>
raveit65 113dc30
-		                              </object>
raveit65 113dc30
-		                            </child>
raveit65 113dc30
-		                          </object>
raveit65 113dc30
-		                        </child>
raveit65 113dc30
-		                      </object>
raveit65 113dc30
-                              <packing>
raveit65 113dc30
-                                <property name="position">1</property>
raveit65 113dc30
-                                <property name="expand">True</property>
raveit65 113dc30
-                                <property name="fill">True</property>
raveit65 113dc30
-                              </packing>
raveit65 113dc30
-                            </child>
raveit65 113dc30
-                          </object>
raveit65 113dc30
-                          <packing>
raveit65 113dc30
-                            <property name="left_attach">1</property>
raveit65 113dc30
-                            <property name="right_attach">2</property>
raveit65 113dc30
-                            <property name="top_attach">5</property>
raveit65 113dc30
-                            <property name="bottom_attach">6</property>
raveit65 113dc30
-                            <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
raveit65 113dc30
-                            <property name="y_options">GTK_FILL</property>
raveit65 113dc30
-                          </packing>
raveit65 113dc30
+                          <object class="GtkCellRendererText" id="input_renderer"/>
raveit65 113dc30
+                          <attributes>
raveit65 113dc30
+                            <attribute name="text">0</attribute>
raveit65 113dc30
+                          </attributes>
raveit65 113dc30
                         </child>
raveit65 113dc30
+                      </object>
raveit65 113dc30
+                      <packing>
raveit65 113dc30
+                        <property name="left_attach">1</property>
raveit65 113dc30
+                        <property name="top_attach">3</property>
raveit65 113dc30
+                      </packing>
raveit65 113dc30
+                    </child>
raveit65 113dc30
+                    <child>
raveit65 113dc30
+                      <object class="GtkComboBox" id="save-files">
raveit65 113dc30
+                        <property name="visible">True</property>
raveit65 113dc30
+                        <property name="can_focus">False</property>
raveit65 113dc30
+                        <property name="model">model_save_files</property>
raveit65 113dc30
                         <child>
raveit65 113dc30
-                          <object class="GtkComboBox" id="output">
raveit65 113dc30
-                            <property name="visible">True</property>
raveit65 113dc30
-                            <property name="model">model_output</property>
raveit65 113dc30
-                            <child>
raveit65 113dc30
-                              <object class="GtkCellRendererText" id="output_renderer"/>
raveit65 113dc30
-                              <attributes>
raveit65 113dc30
-                                <attribute name="text">0</attribute>
raveit65 113dc30
-                              </attributes>
raveit65 113dc30
-                            </child>
raveit65 113dc30
-                          </object>
raveit65 113dc30
-                          <packing>
raveit65 113dc30
-                            <property name="left_attach">1</property>
raveit65 113dc30
-                            <property name="right_attach">2</property>
raveit65 113dc30
-                            <property name="top_attach">4</property>
raveit65 113dc30
-                            <property name="bottom_attach">5</property>
raveit65 113dc30
-                            <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
raveit65 113dc30
-                            <property name="y_options">GTK_FILL</property>
raveit65 113dc30
-                          </packing>
raveit65 113dc30
+                          <object class="GtkCellRendererText" id="renderer1"/>
raveit65 113dc30
+                          <attributes>
raveit65 113dc30
+                            <attribute name="text">0</attribute>
raveit65 113dc30
+                          </attributes>
raveit65 113dc30
                         </child>
raveit65 113dc30
+                      </object>
raveit65 113dc30
+                      <packing>
raveit65 113dc30
+                        <property name="left_attach">1</property>
raveit65 113dc30
+                        <property name="top_attach">2</property>
raveit65 113dc30
+                      </packing>
raveit65 113dc30
+                    </child>
raveit65 113dc30
+                    <child>
raveit65 113dc30
+                      <object class="GtkEntry" id="accelerator">
raveit65 113dc30
+                        <property name="visible">True</property>
raveit65 113dc30
+                        <property name="can_focus">True</property>
raveit65 113dc30
+                        <signal name="focus-in-event" handler="on_accelerator_focus_in" swapped="no"/>
raveit65 113dc30
+                        <signal name="focus-out-event" handler="on_accelerator_focus_out" swapped="no"/>
raveit65 113dc30
+                        <signal name="key-press-event" handler="on_accelerator_key_press" swapped="no"/>
raveit65 113dc30
+                      </object>
raveit65 113dc30
+                      <packing>
raveit65 113dc30
+                        <property name="left_attach">1</property>
raveit65 113dc30
+                        <property name="top_attach">1</property>
raveit65 113dc30
+                      </packing>
raveit65 113dc30
+                    </child>
raveit65 113dc30
+                    <child>
raveit65 113dc30
+                      <object class="GtkScrolledWindow" id="scrolledwindow1">
raveit65 113dc30
+                        <property name="visible">True</property>
raveit65 113dc30
+                        <property name="can_focus">True</property>
raveit65 113dc30
+                        <property name="hexpand">True</property>
raveit65 113dc30
+                        <property name="vexpand">True</property>
raveit65 113dc30
+                        <property name="shadow_type">in</property>
raveit65 113dc30
+                            <child>
raveit65 113dc30
+		                      <object class="PlumaView" id="commands">
raveit65 113dc30
+		                        <property name="buffer">commands_buffer</property>
raveit65 113dc30
+		                        <property name="visible">True</property>
raveit65 113dc30
+		                        <property name="auto-indent">True</property>
raveit65 113dc30
+		                        <property name="insert-spaces-instead-of-tabs">False</property>
raveit65 113dc30
+		                        <property name="smart-home-end">GTK_SOURCE_SMART_HOME_END_AFTER</property>
raveit65 113dc30
+		                        <property name="tab-width">2</property>
raveit65 113dc30
+		                        <property name="highlight-current-line">True</property>
raveit65 113dc30
+		                        <property name="show-right-margin">False</property>
raveit65 113dc30
+		                        <property name="show-line-numbers">True</property>
raveit65 113dc30
+		                      </object>
raveit65 113dc30
+		                    </child>
raveit65 113dc30
+                      </object>
raveit65 113dc30
+                      <packing>
raveit65 113dc30
+                        <property name="left_attach">0</property>
raveit65 113dc30
+                        <property name="top_attach">0</property>
raveit65 113dc30
+                        <property name="width">2</property>
raveit65 113dc30
+                      </packing>
raveit65 113dc30
+                    </child>
raveit65 113dc30
+                    <child>
raveit65 113dc30
+                      <object class="GtkGrid">
raveit65 113dc30
+                        <property name="visible">True</property>
raveit65 113dc30
+                        <property name="can_focus">False</property>
raveit65 113dc30
                         <child>
raveit65 113dc30
-                          <object class="GtkComboBox" id="input">
raveit65 113dc30
+                          <object class="GtkEventBox" id="languages_event_box">
raveit65 113dc30
                             <property name="visible">True</property>
raveit65 113dc30
-                            <property name="model">model_input</property>
raveit65 113dc30
+                            <property name="can_focus">False</property>
raveit65 113dc30
                             <child>
raveit65 113dc30
-                              <object class="GtkCellRendererText" id="input_renderer"/>
raveit65 113dc30
-                              <attributes>
raveit65 113dc30
-                                <attribute name="text">0</attribute>
raveit65 113dc30
-                              </attributes>
raveit65 113dc30
+                              <object class="GtkButton" id="languages_button">
raveit65 113dc30
+                                <property name="visible">True</property>
raveit65 113dc30
+                                <property name="can_focus">False</property>
raveit65 113dc30
+                                <property name="receives_default">False</property>
raveit65 113dc30
+                                <signal name="clicked" handler="on_languages_button_clicked" swapped="no"/>
raveit65 113dc30
+                                <child>
raveit65 113dc30
+                                  <object class="GtkLabel" id="languages_label">
raveit65 113dc30
+                                    <property name="visible">True</property>
raveit65 113dc30
+                                    <property name="can_focus">False</property>
raveit65 113dc30
+                                    <property name="label" translatable="yes">All Languages</property>
raveit65 113dc30
+                                    <property name="ellipsize">middle</property>
raveit65 113dc30
+                                    <property name="xalign">0</property>
raveit65 113dc30
+                                    <property name="yalign">0.5</property>
raveit65 113dc30
+                                  </object>
raveit65 113dc30
+                                </child>
raveit65 113dc30
+                              </object>
raveit65 113dc30
                             </child>
raveit65 113dc30
                           </object>
raveit65 113dc30
                           <packing>
raveit65 113dc30
                             <property name="left_attach">1</property>
raveit65 113dc30
-                            <property name="right_attach">2</property>
raveit65 113dc30
-                            <property name="top_attach">3</property>
raveit65 113dc30
-                            <property name="bottom_attach">4</property>
raveit65 113dc30
-                            <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
raveit65 113dc30
-                            <property name="y_options">GTK_FILL</property>
raveit65 113dc30
+                            <property name="top_attach">0</property>
raveit65 113dc30
                           </packing>
raveit65 113dc30
                         </child>
raveit65 113dc30
                         <child>
raveit65 113dc30
-                          <object class="GtkComboBox" id="save-files">
raveit65 113dc30
-                            <property name="model">model_save_files</property>
raveit65 113dc30
+                          <object class="GtkComboBox" id="applicability">
raveit65 113dc30
                             <property name="visible">True</property>
raveit65 113dc30
+                            <property name="can_focus">False</property>
raveit65 113dc30
+                            <property name="model">model_applicability</property>
raveit65 113dc30
                             <child>
raveit65 113dc30
-                              <object class="GtkCellRendererText" id="renderer1"/>
raveit65 113dc30
+                              <object class="GtkCellRendererText" id="applicability_renderer"/>
raveit65 113dc30
                               <attributes>
raveit65 113dc30
                                 <attribute name="text">0</attribute>
raveit65 113dc30
                               </attributes>
raveit65 113dc30
                             </child>
raveit65 113dc30
                           </object>
raveit65 113dc30
                           <packing>
raveit65 113dc30
-                            <property name="left_attach">1</property>
raveit65 113dc30
-                            <property name="right_attach">2</property>
raveit65 113dc30
-                            <property name="top_attach">2</property>
raveit65 113dc30
-                            <property name="bottom_attach">3</property>
raveit65 113dc30
-                            <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
raveit65 113dc30
-                            <property name="y_options">GTK_FILL</property>
raveit65 113dc30
-                          </packing>
raveit65 113dc30
-                        </child>
raveit65 113dc30
-                        <child>
raveit65 113dc30
-                          <object class="GtkLabel" id="label23">
raveit65 113dc30
-                            <property name="visible">True</property>
raveit65 113dc30
-                            <property name="xalign">0</property>
raveit65 113dc30
-                            <property name="label" translatable="yes">_Applicability:</property>
raveit65 113dc30
-                            <property name="use_underline">True</property>
raveit65 113dc30
-                            <property name="mnemonic_widget">applicability</property>
raveit65 113dc30
-                          </object>
raveit65 113dc30
-                          <packing>
raveit65 113dc30
-                            <property name="top_attach">5</property>
raveit65 113dc30
-                            <property name="bottom_attach">6</property>
raveit65 113dc30
-                            <property name="x_options">GTK_FILL</property>
raveit65 113dc30
-                            <property name="y_options"></property>
raveit65 113dc30
-                          </packing>
raveit65 113dc30
-                        </child>
raveit65 113dc30
-                        <child>
raveit65 113dc30
-                          <object class="GtkLabel" id="label8">
raveit65 113dc30
-                            <property name="visible">True</property>
raveit65 113dc30
-                            <property name="xalign">0</property>
raveit65 113dc30
-                            <property name="label" translatable="yes">_Output:</property>
raveit65 113dc30
-                            <property name="use_underline">True</property>
raveit65 113dc30
-                            <property name="mnemonic_widget">output</property>
raveit65 113dc30
-                          </object>
raveit65 113dc30
-                          <packing>
raveit65 113dc30
-                            <property name="top_attach">4</property>
raveit65 113dc30
-                            <property name="bottom_attach">5</property>
raveit65 113dc30
-                            <property name="x_options">GTK_FILL</property>
raveit65 113dc30
-                            <property name="y_options"></property>
raveit65 113dc30
-                          </packing>
raveit65 113dc30
-                        </child>
raveit65 113dc30
-                        <child>
raveit65 113dc30
-                          <object class="GtkLabel" id="label7">
raveit65 113dc30
-                            <property name="visible">True</property>
raveit65 113dc30
-                            <property name="xalign">0</property>
raveit65 113dc30
-                            <property name="label" translatable="yes">_Input:</property>
raveit65 113dc30
-                            <property name="use_underline">True</property>
raveit65 113dc30
-                            <property name="mnemonic_widget">input</property>
raveit65 113dc30
-                          </object>
raveit65 113dc30
-                          <packing>
raveit65 113dc30
-                            <property name="top_attach">3</property>
raveit65 113dc30
-                            <property name="bottom_attach">4</property>
raveit65 113dc30
-                            <property name="x_options">GTK_FILL</property>
raveit65 113dc30
-                            <property name="y_options"></property>
raveit65 113dc30
-                          </packing>
raveit65 113dc30
-                        </child>
raveit65 113dc30
-                        <child>
raveit65 113dc30
-                          <object class="GtkLabel" id="label6">
raveit65 113dc30
-                            <property name="xalign">0</property>
raveit65 113dc30
-                            <property name="label" translatable="yes">_Save:</property>
raveit65 113dc30
-                            <property name="use_underline">True</property>
raveit65 113dc30
-                            <property name="mnemonic_widget">save-files</property>
raveit65 113dc30
-                            <property name="visible">True</property>
raveit65 113dc30
-                          </object>
raveit65 113dc30
-                          <packing>
raveit65 113dc30
-                            <property name="top_attach">2</property>
raveit65 113dc30
-                            <property name="bottom_attach">3</property>
raveit65 113dc30
-                            <property name="x_options">GTK_FILL</property>
raveit65 113dc30
-                            <property name="y_options"></property>
raveit65 113dc30
-                          </packing>
raveit65 113dc30
-                        </child>
raveit65 113dc30
-                        <child>
raveit65 113dc30
-                          <object class="GtkLabel" id="label3">
raveit65 113dc30
-                            <property name="visible">True</property>
raveit65 113dc30
-                            <property name="xalign">0</property>
raveit65 113dc30
-                            <property name="label" translatable="yes">_Shortcut Key:</property>
raveit65 113dc30
-                            <property name="use_underline">True</property>
raveit65 113dc30
-                            <property name="mnemonic_widget">accelerator</property>
raveit65 113dc30
-                          </object>
raveit65 113dc30
-                          <packing>
raveit65 113dc30
-                            <property name="top_attach">1</property>
raveit65 113dc30
-                            <property name="bottom_attach">2</property>
raveit65 113dc30
-                            <property name="x_options">GTK_FILL</property>
raveit65 113dc30
-                            <property name="y_options"></property>
raveit65 113dc30
-                          </packing>
raveit65 113dc30
-                        </child>
raveit65 113dc30
-                        <child>
raveit65 113dc30
-                          <object class="GtkScrolledWindow" id="scrolledwindow1">
raveit65 113dc30
-                            <property name="visible">True</property>
raveit65 113dc30
-                            <property name="can_focus">True</property>
raveit65 113dc30
-                            <property name="hscrollbar_policy">automatic</property>
raveit65 113dc30
-                            <property name="vscrollbar_policy">automatic</property>
raveit65 113dc30
-                            <property name="shadow_type">in</property>
raveit65 113dc30
-                            <child>
raveit65 113dc30
-		                      <object class="PlumaView" id="commands">
raveit65 113dc30
-		                        <property name="buffer">commands_buffer</property>
raveit65 113dc30
-		                        <property name="visible">True</property>
raveit65 113dc30
-		                        <property name="auto-indent">True</property>
raveit65 113dc30
-		                        <property name="insert-spaces-instead-of-tabs">False</property>
raveit65 113dc30
-		                        <property name="smart-home-end">GTK_SOURCE_SMART_HOME_END_AFTER</property>
raveit65 113dc30
-		                        <property name="tab-width">2</property>
raveit65 113dc30
-		                        <property name="highlight-current-line">True</property>
raveit65 113dc30
-		                        <property name="show-right-margin">False</property>
raveit65 113dc30
-		                        <property name="show-line-numbers">True</property>
raveit65 113dc30
-		                      </object>
raveit65 113dc30
-		                    </child>
raveit65 113dc30
-                          </object>
raveit65 113dc30
-                          <packing>
raveit65 113dc30
-                            <property name="right_attach">2</property>
raveit65 113dc30
+                            <property name="left_attach">0</property>
raveit65 113dc30
+                            <property name="top_attach">0</property>
raveit65 113dc30
                           </packing>
raveit65 113dc30
                         </child>
raveit65 113dc30
                       </object>
raveit65 113dc30
                       <packing>
raveit65 113dc30
-                        <property name="position">1</property>
raveit65 113dc30
+                        <property name="left_attach">1</property>
raveit65 113dc30
+                        <property name="top_attach">5</property>
raveit65 113dc30
                       </packing>
raveit65 113dc30
                     </child>
raveit65 113dc30
                   </object>
raveit65 113dc30
                   <packing>
raveit65 113dc30
-                    <property name="position">1</property>
raveit65 113dc30
+                    <property name="left_attach">0</property>
raveit65 113dc30
+                    <property name="top_attach">1</property>
raveit65 113dc30
+                  </packing>
raveit65 113dc30
+                </child>
raveit65 113dc30
+                <child>
raveit65 113dc30
+                  <object class="GtkLabel" id="title">
raveit65 113dc30
+                    <property name="visible">True</property>
raveit65 113dc30
+                    <property name="can_focus">False</property>
raveit65 113dc30
+                    <property name="label" translatable="yes">_Edit:</property>
raveit65 113dc30
+                    <property name="use_underline">True</property>
raveit65 113dc30
+                    <property name="xalign">0</property>
raveit65 113dc30
+                    <property name="yalign">0.5</property>
raveit65 113dc30
+                  </object>
raveit65 113dc30
+                  <packing>
raveit65 113dc30
+                    <property name="left_attach">0</property>
raveit65 113dc30
+                    <property name="top_attach">0</property>
raveit65 113dc30
                   </packing>
raveit65 113dc30
                 </child>
raveit65 113dc30
               </object>
raveit65 113dc30
@@ -557,47 +592,6 @@
raveit65 113dc30
             <property name="position">1</property>
raveit65 113dc30
           </packing>
raveit65 113dc30
         </child>
raveit65 113dc30
-        <child internal-child="action_area">
raveit65 113dc30
-          <object class="GtkHButtonBox" id="hbuttonbox1">
raveit65 113dc30
-            <property name="visible">True</property>
raveit65 113dc30
-            <property name="layout_style">end</property>
raveit65 113dc30
-            <child>
raveit65 113dc30
-              <object class="GtkButton" id="button1">
raveit65 113dc30
-                <property name="label">gtk-help</property>
raveit65 113dc30
-                <property name="visible">True</property>
raveit65 113dc30
-                <property name="can_focus">True</property>
raveit65 113dc30
-                <property name="can_default">True</property>
raveit65 113dc30
-                <property name="receives_default">False</property>
raveit65 113dc30
-                <property name="use_stock">True</property>
raveit65 113dc30
-              </object>
raveit65 113dc30
-              <packing>
raveit65 113dc30
-                <property name="expand">False</property>
raveit65 113dc30
-                <property name="fill">False</property>
raveit65 113dc30
-                <property name="position">0</property>
raveit65 113dc30
-              </packing>
raveit65 113dc30
-            </child>
raveit65 113dc30
-            <child>
raveit65 113dc30
-              <object class="GtkButton" id="button2">
raveit65 113dc30
-                <property name="label">gtk-close</property>
raveit65 113dc30
-                <property name="visible">True</property>
raveit65 113dc30
-                <property name="can_focus">True</property>
raveit65 113dc30
-                <property name="can_default">True</property>
raveit65 113dc30
-                <property name="receives_default">False</property>
raveit65 113dc30
-                <property name="use_stock">True</property>
raveit65 113dc30
-              </object>
raveit65 113dc30
-              <packing>
raveit65 113dc30
-                <property name="expand">False</property>
raveit65 113dc30
-                <property name="fill">False</property>
raveit65 113dc30
-                <property name="position">1</property>
raveit65 113dc30
-              </packing>
raveit65 113dc30
-            </child>
raveit65 113dc30
-          </object>
raveit65 113dc30
-          <packing>
raveit65 113dc30
-            <property name="expand">False</property>
raveit65 113dc30
-            <property name="pack_type">end</property>
raveit65 113dc30
-            <property name="position">0</property>
raveit65 113dc30
-          </packing>
raveit65 113dc30
-        </child>
raveit65 113dc30
       </object>
raveit65 113dc30
     </child>
raveit65 113dc30
     <action-widgets>
raveit65 113dc30
-- 
raveit65 113dc30
2.21.0
raveit65 113dc30