[gedit] Port externaltools to libpeas/gsettings/pygi
- From: Ignacio Casal Quinteiro <icq src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit] Port externaltools to libpeas/gsettings/pygi
- Date: Tue, 18 Jan 2011 17:42:54 +0000 (UTC)
commit 8b6d353e0ab94ad52ce6119759db5e14b281fbba
Author: Ignacio Casal Quinteiro <icq gnome org>
Date: Tue Jan 18 12:54:18 2011 +0100
Port externaltools to libpeas/gsettings/pygi
configure.ac | 1 +
plugins/externaltools/Makefile.am | 7 +-
...e.gedit.plugins.externaltools.gschema.xml.in.in | 20 +++
plugins/externaltools/tools/__init__.py | 150 +++++++++-----------
plugins/externaltools/tools/capture.py | 35 +++---
plugins/externaltools/tools/filelookup.py | 7 +-
plugins/externaltools/tools/functions.py | 20 +--
plugins/externaltools/tools/library.py | 6 +-
plugins/externaltools/tools/manager.py | 150 ++++++++++----------
plugins/externaltools/tools/outputpanel.py | 121 +++++-----------
plugins/externaltools/tools/tools.ui | 1 -
11 files changed, 234 insertions(+), 284 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 6833e13..57200cc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -423,6 +423,7 @@ plugins/checkupdate/org.gnome.gedit.plugins.checkupdate.gschema.xml.in
plugins/checkupdate/Makefile
plugins/externaltools/data/Makefile
plugins/externaltools/Makefile
+plugins/externaltools/org.gnome.gedit.plugins.externaltools.gschema.xml.in
plugins/externaltools/scripts/Makefile
plugins/externaltools/tools/Makefile
plugins/docinfo/Makefile
diff --git a/plugins/externaltools/Makefile.am b/plugins/externaltools/Makefile.am
index 7ee009e..cf13620 100644
--- a/plugins/externaltools/Makefile.am
+++ b/plugins/externaltools/Makefile.am
@@ -7,7 +7,12 @@ plugin_in_files = externaltools.plugin.desktop.in
plugin_DATA = $(plugin_in_files:.plugin.desktop.in=.plugin)
-EXTRA_DIST = $(plugin_in_files)
+gsettings_SCHEMAS = org.gnome.gedit.plugins.externaltools.gschema.xml
+
+ INTLTOOL_XML_NOMERGE_RULE@
+ GSETTINGS_RULES@
+
+EXTRA_DIST = $(plugin_in_files) org.gnome.gedit.plugins.externaltools.gschema.xml.in.in
CLEANFILES = $(plugin_DATA)
DISTCLEANFILES = $(plugin_DATA)
diff --git a/plugins/externaltools/org.gnome.gedit.plugins.externaltools.gschema.xml.in.in b/plugins/externaltools/org.gnome.gedit.plugins.externaltools.gschema.xml.in.in
new file mode 100644
index 0000000..2033b2b
--- /dev/null
+++ b/plugins/externaltools/org.gnome.gedit.plugins.externaltools.gschema.xml.in.in
@@ -0,0 +1,20 @@
+<schemalist>
+ <schema gettext-domain="@GETTEXT_PACKAGE@" id="org.gnome.gedit.plugins.externaltools" path="/org/gnome/gedit/plugins/externaltools/">
+ <key name="use-system-font" type="b">
+ <default>true</default>
+ <_summary>Whether to use the system font</_summary>
+ <_description>
+ If true, the external tools will use the desktop-global standard
+ font if it's monospace (and the most similar font it can
+ come up with otherwise).
+ </_description>
+ </key>
+ <key name="font" type="s">
+ <default>'Monospace 10'</default>
+ <_summary>Font</_summary>
+ <_description>
+ A Pango font name. Examples are "Sans 12" or "Monospace Bold 14".
+ </_description>
+ </key>
+ </schema>
+</schemalist>
diff --git a/plugins/externaltools/tools/__init__.py b/plugins/externaltools/tools/__init__.py
index efea1e9..d75f84f 100644
--- a/plugins/externaltools/tools/__init__.py
+++ b/plugins/externaltools/tools/__init__.py
@@ -16,11 +16,9 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-__all__ = ('ExternalToolsPlugin', 'ExternalToolsWindowHelper',
- 'Manager', 'OutputPanel', 'Capture', 'UniqueById')
+__all__ = ('ExternalToolsPlugin', 'Manager', 'OutputPanel', 'Capture', 'UniqueById')
-import gedit
-import gtk
+from gi.repository import GObject, Gtk, Gedit, PeasGtk
from manager import Manager
from library import ToolLibrary
from outputpanel import OutputPanel
@@ -38,7 +36,7 @@ class ToolMenu(object):
self._menupath = menupath
self._merge_id = 0
- self._action_group = gtk.ActionGroup("ExternalToolsPluginToolActions")
+ self._action_group = Gtk.ActionGroup("ExternalToolsPluginToolActions")
self._signals = []
self.update()
@@ -62,31 +60,31 @@ class ToolMenu(object):
action.set_data(self.ACTION_HANDLER_DATA_KEY, None)
self._action_group.remove_action(action)
-
- accelmap = gtk.accel_map_get()
+
+ accelmap = Gtk.AccelMap.get()
for s in self._signals:
accelmap.disconnect(s)
-
+
self._signals = []
def _insert_directory(self, directory, path):
- manager = self._window.get_ui_manager()
+ ui_manager = self._window.get_ui_manager()
for item in directory.subdirs:
action_name = 'ExternalToolDirectory%X' % id(item)
- action = gtk.Action(action_name, item.name.replace('_', '__'), None, None)
+ action = Gtk.Action(action_name, item.name.replace('_', '__'), None, None)
self._action_group.add_action(action)
- manager.add_ui(self._merge_id, path,
- action_name, action_name,
- gtk.UI_MANAGER_MENU, False)
+ ui_manager.add_ui(self._merge_id, path,
+ action_name, action_name,
+ Gtk.UIManagerItemType.MENU, False)
self._insert_directory(item, path + '/' + action_name)
for item in directory.tools:
action_name = 'ExternalToolTool%X' % id(item)
- action = gtk.Action(action_name, item.name.replace('_', '__'), item.comment, None)
+ action = Gtk.Action(action_name, item.name.replace('_', '__'), item.comment, None)
handler = action.connect("activate", capture_menu_action, self._window, item)
action.set_data(self.ACTION_ITEM_DATA_KEY, item)
@@ -96,19 +94,19 @@ class ToolMenu(object):
accelpath = '<Actions>/ExternalToolsPluginToolActions/%s' % (action_name, )
if item.shortcut:
- key, mod = gtk.accelerator_parse(item.shortcut)
- gtk.accel_map_change_entry(accelpath, key, mod, True)
-
- self._signals.append(gtk.accel_map_get().connect('changed::%s' % (accelpath,), self.on_accelmap_changed, item))
+ key, mod = Gtk.accelerator_parse(item.shortcut)
+ Gtk.AccelMap.change_entry(accelpath, key, mod, True)
+ self._signals.append(Gtk.AccelMap.get().connect('changed::%s' % (accelpath,), self.on_accelmap_changed, item))
+
self._action_group.add_action_with_accel(action, item.shortcut)
- manager.add_ui(self._merge_id, path,
- action_name, action_name,
- gtk.UI_MANAGER_MENUITEM, False)
+ ui_manager.add_ui(self._merge_id, path,
+ action_name, action_name,
+ Gtk.UIManagerItemType.MENUITEM, False)
def on_accelmap_changed(self, accelmap, path, key, mod, tool):
- tool.shortcut = gtk.accelerator_name(key, mod)
+ tool.shortcut = Gtk.accelerator_name(key, mod)
tool.save()
self._window.get_data("ExternalToolsPluginWindowData").update_manager(tool)
@@ -155,31 +153,32 @@ class ToolMenu(object):
if item is not None:
action.set_visible(states[item.applicability] and self.filter_language(language, item))
-class ExternalToolsWindowHelper(object):
- def __init__(self, plugin, window):
- super(ExternalToolsWindowHelper, self).__init__()
+class ExternalToolsPlugin(GObject.Object, Gedit.WindowActivatable, PeasGtk.Configurable):
+ __gtype_name__ = "ExternalToolsPlugin"
- self._window = window
- self._plugin = plugin
+ window = GObject.property(type=Gedit.Window)
+
+ def __init__(self):
+ GObject.Object.__init__(self)
+ self._manager = None
+ self._manager_default_size = None
+
+ def do_activate(self):
self._library = ToolLibrary()
+ self._library.set_locations(os.path.join(self.plugin_info.get_data_dir(), 'tools'))
- manager = window.get_ui_manager()
+ ui_manager = self.window.get_ui_manager()
- self._action_group = gtk.ActionGroup('ExternalToolsPluginActions')
+ self._action_group = Gtk.ActionGroup(name='ExternalToolsPluginActions')
self._action_group.set_translation_domain('gedit')
- self._action_group.add_actions([('ExternalToolManager',
- None,
- _('Manage _External Tools...'),
- None,
+ self._action_group.add_actions([('ExternalToolManager', None,
+ _('Manage _External Tools...'), None,
_("Opens the External Tools Manager"),
- lambda action: plugin.open_dialog()),
- ('ExternalTools',
- None,
- _('External _Tools'),
- None,
- _("External tools"),
- None)])
- manager.insert_action_group(self._action_group, -1)
+ lambda action, data: self.open_dialog()),
+ ('ExternalTools', None,
+ _('External _Tools'), None,
+ _("External tools"), None)])
+ ui_manager.insert_action_group(self._action_group, -1)
ui_string = """
<ui>
@@ -199,72 +198,54 @@ class ExternalToolsWindowHelper(object):
</menubar>
</ui>"""
- self._merge_id = manager.add_ui_from_string(ui_string)
+ self._merge_id = ui_manager.add_ui_from_string(ui_string)
- self.menu = ToolMenu(self._library, self._window,
+ self.menu = ToolMenu(self._library, self.window,
"/MenuBar/ToolsMenu/ToolsOps_4/ExternalToolsMenu/ExternalToolPlaceholder")
- manager.ensure_update()
+ ui_manager.ensure_update()
# Create output console
- self._output_buffer = OutputPanel(self._plugin.get_data_dir(), window)
- bottom = window.get_bottom_panel()
+ self._output_buffer = OutputPanel(self.plugin_info.get_data_dir(), self.window)
+ bottom = self.window.get_bottom_panel()
+ image = Gtk.Image(stock=Gtk.STOCK_EXECUTE, icon_size=Gtk.IconSize.MENU)
bottom.add_item(self._output_buffer.panel,
"GeditExternalToolsShellOutput",
_("Shell Output"),
- gtk.STOCK_EXECUTE)
+ image)
- def update_ui(self):
- self.menu.filter(self._window.get_active_document())
- self._window.get_ui_manager().ensure_update()
+ def do_update_state(self):
+ return
+ self.menu.filter(self.window.get_active_document())
+ self.window.get_ui_manager().ensure_update()
- def deactivate(self):
- manager = self._window.get_ui_manager()
+ def do_deactivate(self):
+ ui_manager = self.window.get_ui_manager()
self.menu.deactivate()
- manager.remove_ui(self._merge_id)
- manager.remove_action_group(self._action_group)
- manager.ensure_update()
+ ui_manager.remove_ui(self._merge_id)
+ ui_manager.remove_action_group(self._action_group)
+ ui_manager.ensure_update()
- bottom = self._window.get_bottom_panel()
+ bottom = self.window.get_bottom_panel()
bottom.remove_item(self._output_buffer.panel)
def update_manager(self, tool):
- self._plugin.update_manager(tool)
-
-class ExternalToolsPlugin(gedit.Plugin):
- WINDOW_DATA_KEY = "ExternalToolsPluginWindowData"
-
- def __init__(self):
- super(ExternalToolsPlugin, self).__init__()
-
- self._manager = None
- self._manager_default_size = None
-
- ToolLibrary().set_locations(os.path.join(self.get_data_dir(), 'tools'))
-
- def activate(self, window):
- helper = ExternalToolsWindowHelper(self, window)
- window.set_data(self.WINDOW_DATA_KEY, helper)
-
- def deactivate(self, window):
- window.get_data(self.WINDOW_DATA_KEY).deactivate()
- window.set_data(self.WINDOW_DATA_KEY, None)
-
- def update_ui(self, window):
- window.get_data(self.WINDOW_DATA_KEY).update_ui()
+ self.update_manager(tool)
- def create_configure_dialog(self):
- return self.open_dialog()
+ def do_create_configure_widget(self):
+ #FIXME
+ #return self.open_dialog()
+ pass
def open_dialog(self):
if not self._manager:
- self._manager = Manager(self.get_data_dir())
+ self._manager = Manager(self.plugin_info.get_data_dir())
if self._manager_default_size:
self._manager.dialog.set_default_size(*self._manager_default_size)
self._manager.dialog.connect('destroy', self.on_manager_destroy)
- window = gedit.app_get_default().get_active_window()
+ window = Gedit.App.get_default().get_active_window()
self._manager.run(window)
return self._manager.dialog
@@ -276,7 +257,8 @@ class ExternalToolsPlugin(gedit.Plugin):
self._manager.tool_changed(tool, True)
def on_manager_destroy(self, dialog):
- self._manager_default_size = [dialog.allocation.width, dialog.allocation.height]
+ alloc = dialog.get_allocation()
+ self._manager_default_size = [alloc.width, alloc.height]
self._manager = None
# ex:ts=4:et:
diff --git a/plugins/externaltools/tools/capture.py b/plugins/externaltools/tools/capture.py
index e47862c..520b22a 100644
--- a/plugins/externaltools/tools/capture.py
+++ b/plugins/externaltools/tools/capture.py
@@ -21,11 +21,10 @@ __all__ = ('Capture', )
import os, sys, signal
import locale
import subprocess
-import gobject
import fcntl
-import glib
+from gi.repository import GObject, GLib
-class Capture(gobject.GObject):
+class Capture(GObject.Object):
CAPTURE_STDOUT = 0x01
CAPTURE_STDERR = 0x02
CAPTURE_BOTH = 0x03
@@ -34,14 +33,14 @@ class Capture(gobject.GObject):
WRITE_BUFFER_SIZE = 0x4000
__gsignals__ = {
- 'stdout-line' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_STRING,)),
- 'stderr-line' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_STRING,)),
- 'begin-execute': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, tuple()),
- 'end-execute' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_INT,))
+ 'stdout-line' : (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (GObject.TYPE_STRING,)),
+ 'stderr-line' : (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (GObject.TYPE_STRING,)),
+ 'begin-execute': (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, tuple()),
+ 'end-execute' : (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (GObject.TYPE_INT,))
}
def __init__(self, command, cwd = None, env = {}):
- gobject.GObject.__init__(self)
+ GObject.GObject.__init__(self)
self.pipe = None
self.env = env
self.cwd = cwd
@@ -101,8 +100,8 @@ class Capture(gobject.GObject):
flags = fcntl.fcntl(self.pipe.stdout.fileno(), fcntl.F_GETFL) | os.O_NONBLOCK
fcntl.fcntl(self.pipe.stdout.fileno(), fcntl.F_SETFL, flags)
- gobject.io_add_watch(self.pipe.stdout,
- gobject.IO_IN | gobject.IO_HUP,
+ GObject.io_add_watch(self.pipe.stdout,
+ GObject.IO_IN | GObject.IO_HUP,
self.on_output)
if self.flags & self.CAPTURE_STDERR:
@@ -110,8 +109,8 @@ class Capture(gobject.GObject):
flags = fcntl.fcntl(self.pipe.stderr.fileno(), fcntl.F_GETFL) | os.O_NONBLOCK
fcntl.fcntl(self.pipe.stderr.fileno(), fcntl.F_SETFL, flags)
- gobject.io_add_watch(self.pipe.stderr,
- gobject.IO_IN | gobject.IO_HUP,
+ GObject.io_add_watch(self.pipe.stderr,
+ GObject.IO_IN | GObject.IO_HUP,
self.on_output)
# IO
@@ -120,10 +119,10 @@ class Capture(gobject.GObject):
self.write_buffer = str(self.input_text)
if self.idle_write_chunk():
- self.idle_write_id = gobject.idle_add(self.idle_write_chunk)
+ self.idle_write_id = GObject.idle_add(self.idle_write_chunk)
# Wait for the process to complete
- gobject.child_watch_add(self.pipe.pid, self.on_child_end)
+ GObject.child_watch_add(self.pipe.pid, self.on_child_end)
def idle_write_chunk(self):
if not self.pipe:
@@ -153,7 +152,7 @@ class Capture(gobject.GObject):
return False
def on_output(self, source, condition):
- if condition & (glib.IO_IN | glib.IO_PRI):
+ if condition & (GLib.IO_IN | GLib.IO_PRI):
line = source.read()
if len(line) > 0:
@@ -179,7 +178,7 @@ class Capture(gobject.GObject):
else:
self.emit('stderr-line', line)
- if condition & ~(glib.IO_IN | glib.IO_PRI):
+ if condition & ~(GLib.IO_IN | GLib.IO_PRI):
if self.read_buffer:
if source == self.pipe.stdout:
self.emit('stdout-line', self.read_buffer)
@@ -197,7 +196,7 @@ class Capture(gobject.GObject):
def stop(self, error_code = -1):
if self.pipe is not None:
if self.idle_write_id:
- gobject.source_remove(self.idle_write_id)
+ GObject.source_remove(self.idle_write_id)
self.idle_write_id = 0
if not self.tried_killing:
@@ -209,6 +208,6 @@ class Capture(gobject.GObject):
def on_child_end(self, pid, error_code):
# In an idle, so it is emitted after all the std*-line signals
# have been intercepted
- gobject.idle_add(self.emit, 'end-execute', error_code)
+ GObject.idle_add(self.emit, 'end-execute', error_code)
# ex:ts=4:et:
diff --git a/plugins/externaltools/tools/filelookup.py b/plugins/externaltools/tools/filelookup.py
index 229823b..499776e 100644
--- a/plugins/externaltools/tools/filelookup.py
+++ b/plugins/externaltools/tools/filelookup.py
@@ -17,8 +17,7 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
import os
-import gio
-import gedit
+from gi.repository import Gio, Gedit
class FileLookup:
"""
@@ -110,7 +109,7 @@ class OpenDocumentRelPathFileLookupProvider(FileLookupProvider):
if path.startswith('/'):
return None
- for doc in gedit.app_get_default().get_documents():
+ for doc in Gedit.app_get_default().get_documents():
if doc.is_local():
location = doc.get_location()
if location:
@@ -135,7 +134,7 @@ class OpenDocumentFileLookupProvider(FileLookupProvider):
if path.startswith('/'):
return None
- for doc in gedit.app_get_default().get_documents():
+ for doc in Gedit.app_get_default().get_documents():
if doc.is_local():
location = doc.get_location()
if location and location.get_uri().endswith(path):
diff --git a/plugins/externaltools/tools/functions.py b/plugins/externaltools/tools/functions.py
index 2e2f048..a05ce54 100644
--- a/plugins/externaltools/tools/functions.py
+++ b/plugins/externaltools/tools/functions.py
@@ -17,11 +17,7 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
import os
-import gtk
-from gtk import gdk
-import gio
-import gedit
-#import gtksourceview
+from gi.repository import Gio, Gtk, Gdk, Gedit
from outputpanel import OutputPanel
from capture import *
@@ -92,7 +88,7 @@ def run_external_tool(window, node):
capture.set_env(GEDIT_CURRENT_DOCUMENT_URI = location.get_uri(),
GEDIT_CURRENT_DOCUMENT_NAME = name,
GEDIT_CURRENT_DOCUMENT_SCHEME = scheme)
- if gedit.utils.location_has_file_scheme(location):
+ if Gedit.utils.location_has_file_scheme(location):
path = location.get_path()
cwd = os.path.dirname(path)
capture.set_cwd(cwd)
@@ -107,7 +103,7 @@ def run_external_tool(window, node):
if location.get_uri() is not None]
documents_path = [location.get_path()
for location in documents_location
- if gedit.utils.location_has_file_scheme(location)]
+ if Gedit.utils.location_has_file_scheme(location)]
capture.set_env(GEDIT_DOCUMENTS_URI = ' '.join(documents_uri),
GEDIT_DOCUMENTS_PATH = ' '.join(documents_path))
@@ -226,7 +222,7 @@ class MultipleDocumentsSaver:
for doc in docs:
signals[doc] = doc.connect('saving', self.on_document_saving)
- gedit.commands.save_document(window, doc)
+ Gedit.commands.save_document(window, doc)
doc.disconnect(signals[doc])
def on_document_saving(self, doc, size, total_size):
@@ -262,7 +258,7 @@ def capture_stderr_line_panel(capture, line, panel):
panel.write(line, panel.error_tag)
def capture_begin_execute_panel(capture, panel, view, label):
- view.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(gdk.Cursor(gdk.WATCH))
+ view.get_window(Gtk.TextWindowType.TEXT).set_cursor(Gdk.Cursor(Gdk.CursorType.WATCH))
panel['stop'].set_sensitive(True)
panel.clear()
@@ -279,8 +275,8 @@ def capture_end_execute_panel(capture, exit_code, panel, view, output_type):
end.forward_chars(300)
uri = ''
- mtype = gio.content_type_guess(data=doc.get_text(start, end))
- lmanager = gedit.get_language_manager()
+ mtype = Gio.content_type_guess(data=doc.get_text(start, end))
+ lmanager = Gedit.get_language_manager()
location = doc.get_location()
if location:
@@ -290,7 +286,7 @@ def capture_end_execute_panel(capture, exit_code, panel, view, output_type):
if language is not None:
doc.set_language(language)
- view.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(gdk.Cursor(gdk.XTERM))
+ view.get_window(Gtk.TEXT_WINDOW_TEXT).set_cursor(Gdk.Cursor(Gdk.CursorType.XTERM))
view.set_cursor_visible(True)
view.set_editable(True)
diff --git a/plugins/externaltools/tools/library.py b/plugins/externaltools/tools/library.py
index 56a1c84..c296b63 100644
--- a/plugins/externaltools/tools/library.py
+++ b/plugins/externaltools/tools/library.py
@@ -41,7 +41,7 @@ class ToolLibrary(Singleton):
if platform.platform() != 'Windows':
for d in self.get_xdg_data_dirs():
- self.locations.append(os.path.join(d, 'gedit-2', 'plugins', 'externaltools', 'tools'))
+ self.locations.append(os.path.join(d, 'gedit', 'plugins', 'externaltools', 'tools'))
self.locations.append(datadir)
@@ -53,7 +53,7 @@ class ToolLibrary(Singleton):
if userdir:
toolsdir = os.path.join(userdir, 'gedit/tools')
else:
- toolsdir = os.path.expanduser('~/.gnome2/gedit/tools')
+ toolsdir = os.path.expanduser('~/.config/gedit/tools')
self.locations.insert(0, toolsdir);
@@ -82,7 +82,7 @@ class ToolLibrary(Singleton):
if userdir:
filename = os.path.join(userdir, 'gedit/gedit-tools.xml')
else:
- filename = os.path.expanduser('~/.gnome2/gedit/gedit-tools.xml')
+ filename = os.path.expanduser('~/.config/gedit/gedit-tools.xml')
if not os.path.isfile(filename):
return
diff --git a/plugins/externaltools/tools/manager.py b/plugins/externaltools/tools/manager.py
index 014f231..a8b5e7b 100644
--- a/plugins/externaltools/tools/manager.py
+++ b/plugins/externaltools/tools/manager.py
@@ -18,24 +18,23 @@
__all__ = ('Manager', )
-import gedit
-import gtk
-import gtksourceview2 as gsv
import os.path
from library import *
from functions import *
import hashlib
from xml.sax import saxutils
-import gobject
+from gi.repository import GObject, Gtk, GtkSource, Gedit
+
+class LanguagesPopup(Gtk.Window):
+ __gtype_name__ = "LanguagePopup"
-class LanguagesPopup(gtk.Window):
COLUMN_NAME = 0
COLUMN_ID = 1
COLUMN_ENABLED = 2
def __init__(self, languages):
- gtk.Window.__init__(self, gtk.WINDOW_POPUP)
-
+ Gtk.Window.__init__(self, type=Gtk.WindowType.POPUP)
+
self.set_default_size(200, 200)
self.props.can_focus = True
@@ -47,40 +46,40 @@ class LanguagesPopup(gtk.Window):
self.grab_add()
- gtk.gdk.keyboard_grab(self.window, False, 0L)
- gtk.gdk.pointer_grab(self.window, False, gtk.gdk.BUTTON_PRESS_MASK |
- gtk.gdk.BUTTON_RELEASE_MASK |
- gtk.gdk.POINTER_MOTION_MASK |
- gtk.gdk.ENTER_NOTIFY_MASK |
- gtk.gdk.LEAVE_NOTIFY_MASK |
- gtk.gdk.PROXIMITY_IN_MASK |
- gtk.gdk.PROXIMITY_OUT_MASK, None, None, 0L)
+ Gdk.keyboard_grab(self.window, False, 0L)
+ Gdk.pointer_grab(self.window, False, Gdk.BUTTON_PRESS_MASK |
+ Gdk.BUTTON_RELEASE_MASK |
+ Gdk.POINTER_MOTION_MASK |
+ Gdk.ENTER_NOTIFY_MASK |
+ Gdk.LEAVE_NOTIFY_MASK |
+ Gdk.PROXIMITY_IN_MASK |
+ Gdk.PROXIMITY_OUT_MASK, None, None, 0L)
self.view.get_selection().select_path((0,))
def build(self):
- self.model = gtk.ListStore(str, str, bool)
+ self.model = Gtk.ListStore(str, str, bool)
- self.sw = gtk.ScrolledWindow()
+ self.sw = Gtk.ScrolledWindow()
self.sw.show()
- self.sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
- self.sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
+ self.sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
+ self.sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN)
- self.view = gtk.TreeView(self.model)
+ self.view = Gtk.TreeView(self.model)
self.view.show()
self.view.set_headers_visible(False)
- column = gtk.TreeViewColumn()
+ column = Gtk.TreeViewColumn()
- renderer = gtk.CellRendererToggle()
+ renderer = Gtk.CellRendererToggle()
column.pack_start(renderer, False)
column.set_attributes(renderer, active=self.COLUMN_ENABLED)
renderer.connect('toggled', self.on_language_toggled)
- renderer = gtk.CellRendererText()
+ renderer = Gtk.CellRendererText()
column.pack_start(renderer, True)
column.set_attributes(renderer, text=self.COLUMN_NAME)
@@ -113,7 +112,7 @@ class LanguagesPopup(gtk.Window):
return val == '-'
def init_languages(self, languages):
- manager = gsv.LanguageManager()
+ manager = GtkSource.LanguageManager()
langs = gedit.language_manager_list_languages_sorted(manager, True)
self.model.append([_('All languages'), None, not languages])
@@ -142,7 +141,7 @@ class LanguagesPopup(gtk.Window):
self.model.set_value(self.model.get_iter_first(), self.COLUMN_ENABLED, False)
def do_key_press_event(self, event):
- if event.keyval == gtk.keysyms.Escape:
+ if event.keyval == Gtk.keysyms.Escape:
self.destroy()
return True
else:
@@ -166,10 +165,10 @@ class LanguagesPopup(gtk.Window):
event.y_root <= origin[1] + geometry[3]
def do_destroy(self):
- gtk.gdk.keyboard_ungrab(0L)
- gtk.gdk.pointer_ungrab(0L)
+ Gdk.keyboard_ungrab(0L)
+ Gdk.pointer_ungrab(0L)
- return gtk.Window.do_destroy(self)
+ return Gtk.Window.do_destroy(self)
def setup_event(self, event, window):
fr = event.window.get_origin()
@@ -182,7 +181,7 @@ class LanguagesPopup(gtk.Window):
def resolve_widgets(self, root):
res = [root]
- if isinstance(root, gtk.Container):
+ if isinstance(root, Gtk.Container):
root.forall(lambda x, y: res.extend(self.resolve_widgets(x)), None)
return res
@@ -210,7 +209,7 @@ class LanguagesPopup(gtk.Window):
if not (window.get_events() & event.type):
continue
- if self.in_window(event, window):
+ if self.in_window(event, window):
self.setup_event(event, window)
if widget.event(event):
@@ -248,8 +247,6 @@ class LanguagesPopup(gtk.Window):
def do_proximity_out_event(self, event):
return self.propagate_mouse_event(event)
-gobject.type_register(LanguagesPopup)
-
class Manager:
TOOL_COLUMN = 0 # For Tree
NAME_COLUMN = 1 # For Combo
@@ -275,7 +272,7 @@ class Manager:
}
# Load the "main-window" widget from the ui file.
- self.ui = gtk.Builder()
+ self.ui = Gtk.Builder()
self.ui.add_from_file(os.path.join(self.datadir, 'ui', 'tools.ui'))
self.ui.connect_signals(callbacks)
self.dialog = self.ui.get_object('tool-manager-dialog')
@@ -345,7 +342,7 @@ class Manager:
del self.accelerators[shortcut]
def add_tool_to_language(self, tool, language):
- if isinstance(language, gsv.Language):
+ if isinstance(language, GtkSource.Language):
lid = language.get_id()
else:
lid = language
@@ -353,7 +350,7 @@ class Manager:
if not lid in self._languages:
piter = self.model.append(None, [language])
- parent = gtk.TreeRowReference(self.model, self.model.get_path(piter))
+ parent = Gtk.TreeRowReference.new(self.model, self.model.get_path(piter))
self._languages[lid] = parent
else:
parent = self._languages[lid]
@@ -364,11 +361,11 @@ class Manager:
if not tool in self._tool_rows:
self._tool_rows[tool] = []
- self._tool_rows[tool].append(gtk.TreeRowReference(self.model, self.model.get_path(child)))
+ self._tool_rows[tool].append(Gtk.TreeRowReference.new(self.model, self.model.get_path(child)))
return child
def add_tool(self, tool):
- manager = gsv.LanguageManager()
+ manager = GtkSource.LanguageManager()
ret = None
for lang in tool.languages:
@@ -391,16 +388,16 @@ class Manager:
self.script_hash = None
self.accelerators = dict()
- self.model = gtk.TreeStore(object)
+ self.model = Gtk.TreeStore(object)
self.view.set_model(self.model)
for tool in self.tools.tree.tools:
self.add_tool(tool)
self.model.set_default_sort_func(self.sort_tools)
- self.model.set_sort_column_id(-1, gtk.SORT_ASCENDING)
+ self.model.set_sort_column_id(-1, Gtk.SortType.ASCENDING)
- def sort_tools(self, model, iter1, iter2):
+ def sort_tools(self, model, iter1, iter2, user_data=None):
# For languages, sort All before everything else, otherwise alphabetical
t1 = model.get_value(iter1, self.TOOL_COLUMN)
t2 = model.get_value(iter2, self.TOOL_COLUMN)
@@ -413,7 +410,7 @@ class Manager:
return 1
def lang_name(lang):
- if isinstance(lang, gsv.Language):
+ if isinstance(lang, GtkSource.Language):
return lang.get_name()
else:
return _('Plain Text')
@@ -428,13 +425,13 @@ class Manager:
def __init_tools_view(self):
# Tools column
- column = gtk.TreeViewColumn('Tools')
- renderer = gtk.CellRendererText()
+ column = Gtk.TreeViewColumn('Tools')
+ renderer = Gtk.CellRendererText()
column.pack_start(renderer, False)
renderer.set_property('editable', True)
self.view.append_column(column)
- column.set_cell_data_func(renderer, self.get_cell_data_cb)
+ column.set_cell_data_func(renderer, self.get_cell_data_cb, None)
renderer.connect('edited', self.on_view_label_cell_edited)
renderer.connect('editing-started', self.on_view_label_cell_editing_started)
@@ -493,7 +490,8 @@ class Manager:
self.current_node.save_files = combo_value(self, 'save-files')
buf = self['commands'].get_buffer()
- script = buf.get_text(*buf.get_bounds())
+ (start, end) = buf.get_bounds()
+ script = buf.get_text(start, end, False)
h = self.compute_hash(script)
if h != self.script_hash:
# script has changed -> save it
@@ -521,7 +519,7 @@ class Manager:
if not self.current_node or not self.current_node.languages:
self['languages_label'].set_text(_('All Languages'))
else:
- manager = gsv.LanguageManager()
+ manager = GtkSource.LanguageManager()
langs = []
for lang in self.current_node.languages:
@@ -542,14 +540,15 @@ class Manager:
buf = self['commands'].get_buffer()
script = default(''.join(node.get_script()), '')
- buf.begin_not_undoable_action()
- buf.set_text(script)
- buf.end_not_undoable_action()
+ buf.begin_not_undoable_action()
+ buf.set_text(script)
+ buf.end_not_undoable_action()
self.script_hash = self.compute_hash(script)
- contenttype = gio.content_type_guess(data=script)
- lmanager = gedit.get_language_manager()
- language = lmanager.guess_language(content_type=contenttype)
+
+ contenttype, uncertain = Gio.content_type_guess(None, script)
+ lmanager = GtkSource.LanguageManager.get_default()
+ language = lmanager.guess_language(None, contenttype)
if language is not None:
buf.set_language(language)
@@ -593,7 +592,7 @@ class Manager:
self['tool-table'].set_sensitive(True)
else:
self.clear_fields()
- self['tool-table'].set_sensitive(False)
+ self['tool-table'].set_sensitive(False)
def language_id_from_iter(self, piter):
if not piter:
@@ -605,7 +604,7 @@ class Manager:
piter = self.model.iter_parent(piter)
tool = self.model.get_value(piter, self.TOOL_COLUMN)
- if isinstance(tool, gsv.Language):
+ if isinstance(tool, GtkSource.Language):
return tool.get_id()
elif tool:
return 'plain'
@@ -712,7 +711,7 @@ class Manager:
piter = self.model.get_iter(path)
tool = self.model.get_value(piter, self.TOOL_COLUMN)
- if isinstance(editable, gtk.Entry):
+ if isinstance(editable, Gtk.Entry):
editable.set_text(tool.name)
editable.grab_focus()
@@ -742,7 +741,7 @@ class Manager:
# Check whether accelerator already exists
self.remove_accelerator(self.current_node)
- name = gtk.accelerator_name(keyval, mod)
+ name = Gtk.accelerator_name(keyval, mod)
if name == '':
self.current_node.shorcut = None
@@ -752,15 +751,15 @@ class Manager:
col = self.accelerator_collision(name, self.current_node)
if col:
- dialog = gtk.MessageDialog(self.dialog,
- gtk.DIALOG_MODAL,
- gtk.MESSAGE_ERROR,
- gtk.BUTTONS_OK,
+ dialog = Gtk.MessageDialog(self.dialog,
+ Gtk.DIALOG_MODAL,
+ Gtk.MESSAGE_ERROR,
+ Gtk.BUTTONS_OK,
_('This accelerator is already bound to %s') % (', '.join(map(lambda x: x.name, col)),))
dialog.run()
dialog.destroy()
-
+
self.add_accelerator(self.current_node)
return False
@@ -771,20 +770,20 @@ class Manager:
return True
def on_accelerator_key_press(self, entry, event):
- mask = event.state & gtk.accelerator_get_default_mod_mask()
+ mask = event.state & Gtk.accelerator_get_default_mod_mask()
- if event.keyval == gtk.keysyms.Escape:
+ if event.keyval == Gdk.KEY_Escape:
entry.set_text(default(self.current_node.shortcut, ''))
self['commands'].grab_focus()
return True
- elif event.keyval == gtk.keysyms.Delete \
- or event.keyval == gtk.keysyms.BackSpace:
+ elif event.keyval == Gdk.KEY_Delete \
+ or event.keyval == Gdk.KEY_BackSpace:
entry.set_text('')
self.remove_accelerator(self.current_node)
self.current_node.shortcut = None
self['commands'].grab_focus()
return True
- elif event.keyval in range(gtk.keysyms.F1, gtk.keysyms.F12 + 1):
+ elif event.keyval in range(Gdk.KEY_F1, Gdk.KEY_F12 + 1):
# New accelerator
if self.set_accelerator(event.keyval, mask):
entry.set_text(default(self.current_node.shortcut, ''))
@@ -792,7 +791,7 @@ class Manager:
# Capture all `normal characters`
return True
- elif gtk.gdk.keyval_to_unicode(event.keyval):
+ elif Gdk.keyval_to_unicode(event.keyval):
if mask:
# New accelerator
if self.set_accelerator(event.keyval, mask):
@@ -817,8 +816,8 @@ class Manager:
self.tool_changed(self.current_node)
def on_tool_manager_dialog_response(self, dialog, response):
- if response == gtk.RESPONSE_HELP:
- gedit.app_get_default().show_help(self.dialog, 'gedit', 'gedit-external-tools-plugin')
+ if response == Gtk.ResponseType.HELP:
+ Gedit.app_get_default().show_help(self.dialog, 'gedit', 'gedit-external-tools-plugin')
return
self.on_tool_manager_dialog_focus_out(dialog, None)
@@ -830,17 +829,20 @@ class Manager:
def on_tool_manager_dialog_focus_out(self, dialog, event):
self.save_current_tool()
+ #FIXME: this is wrong, we must emit a signal and let the plugin update the menu
+ """
for window in gedit.app_get_default().get_windows():
helper = window.get_data("ExternalToolsPluginWindowData")
helper.menu.update()
-
- def get_cell_data_cb(self, column, cell, model, piter):
+ """
+
+ def get_cell_data_cb(self, column, cell, model, piter, user_data=None):
tool = model.get_value(piter, self.TOOL_COLUMN)
if tool == None or not isinstance(tool, Tool):
if tool == None:
label = _('All Languages')
- elif not isinstance(tool, gsv.Language):
+ elif not isinstance(tool, GtkSource.Language):
label = _('Plain Text')
else:
label = tool.get_name()
@@ -882,7 +884,7 @@ class Manager:
ret = None
if node:
- ref = gtk.TreeRowReference(self.model, self.model.get_path(piter))
+ ref = Gtk.TreeRowReference(self.model, self.model.get_path(piter))
# Update languages, make sure to inhibit selection change stuff
self.view.get_selection().handler_block(self.selection_changed_id)
@@ -908,7 +910,7 @@ class Manager:
del self._languages[language]
# Now, add for any that are new
- manager = gsv.LanguageManager()
+ manager = GtkSource.LanguageManager()
for lang in self.current_node.languages:
if not self.tool_in_language(self.current_node, lang):
diff --git a/plugins/externaltools/tools/outputpanel.py b/plugins/externaltools/tools/outputpanel.py
index dc9321f..55defb6 100644
--- a/plugins/externaltools/tools/outputpanel.py
+++ b/plugins/externaltools/tools/outputpanel.py
@@ -19,18 +19,13 @@
__all__ = ('OutputPanel', 'UniqueById')
-import gtk, gedit
-import pango
-import gconf
-import gobject
import os
from weakref import WeakKeyDictionary
from capture import *
-from gtk import gdk
import re
-import gio
import linkparsing
import filelookup
+from gi.repository import GObject, Gio, Gdk, Gtk, Pango, Gedit
class UniqueById:
__shared_state = WeakKeyDictionary()
@@ -47,12 +42,6 @@ class UniqueById:
return self.__class__.__shared_state
class OutputPanel(UniqueById):
-
- DEFAULT_FONT = "Monospace 10"
-
- GCONF_INTERFACE_DIR = "/desktop/gnome/interface"
- GCONF_PROFILE_DIR = "/apps/gnome-terminal/profiles/Default"
-
def __init__(self, datadir, window):
if UniqueById.__init__(self, window):
return
@@ -64,23 +53,18 @@ class OutputPanel(UniqueById):
'on_view_button_press_event': self.on_view_button_press_event
}
- gconf_client.add_dir(self.GCONF_INTERFACE_DIR,
- gconf.CLIENT_PRELOAD_NONE)
- gconf_client.add_dir(self.GCONF_PROFILE_DIR,
- gconf.CLIENT_PRELOAD_NONE)
-
- gconf_client.notify_add(self.GCONF_INTERFACE_DIR,
- self.on_gconf_notification)
- gconf_client.notify_add(self.GCONF_PROFILE_DIR,
- self.on_gconf_notification)
+ self.profile_settings = self.get_profile_settings()
+ self.profile_settings.connect("changed", self.font_changed)
+ self.system_settings = Gio.Settings.new("org.gnome.desktop.interface")
+ self.system_settings.connect("changed::monospace-font-name", self.font_changed)
self.window = window
- self.ui = gtk.Builder()
+ self.ui = Gtk.Builder()
self.ui.add_from_file(os.path.join(datadir, 'ui', 'outputpanel.ui'))
self.ui.connect_signals(callbacks)
self.panel = self["output-panel"]
- self.reconfigure()
+ self.font_changed()
buffer = self['view'].get_buffer()
@@ -90,18 +74,18 @@ class OutputPanel(UniqueById):
self.error_tag.set_property('foreground', 'red')
self.italic_tag = buffer.create_tag('italic')
- self.italic_tag.set_property('style', pango.STYLE_OBLIQUE)
+ self.italic_tag.set_property('style', Pango.Style.OBLIQUE)
self.bold_tag = buffer.create_tag('bold')
- self.bold_tag.set_property('weight', pango.WEIGHT_BOLD)
+ self.bold_tag.set_property('weight', Pango.Weight.BOLD)
self.invalid_link_tag = buffer.create_tag('invalid_link')
self.link_tag = buffer.create_tag('link')
- self.link_tag.set_property('underline', pango.UNDERLINE_SINGLE)
+ self.link_tag.set_property('underline', Pango.Underline.SINGLE)
- self.link_cursor = gdk.Cursor(gdk.HAND2)
- self.normal_cursor = gdk.Cursor(gdk.XTERM)
+ self.link_cursor = Gdk.Cursor.new(Gdk.CursorType.HAND2)
+ self.normal_cursor = Gdk.Cursor.new(Gdk.CursorType.XTERM)
self.process = None
@@ -110,39 +94,19 @@ class OutputPanel(UniqueById):
self.link_parser = linkparsing.LinkParser()
self.file_lookup = filelookup.FileLookup()
- def reconfigure(self):
- # WORKING ON BUG: 611161
- # Font
- font_desc = None
- system_font = gconf_get_str(self.GCONF_INTERFACE_DIR + "/monospace_font_name",
- self.DEFAULT_FONT)
+ def get_profile_settings(self):
+ #FIXME return either the gnome-terminal settings or the gedit one
+ return Gio.Settings.new("org.gnome.gedit.plugins.externaltools")
- if gconf_get_bool(self.GCONF_PROFILE_DIR + "/use_system_font"):
- font_name = system_font
+ def font_changed(self, settings=None, key=None):
+ if self.profile_settings.get_boolean("use-system-font"):
+ font = self.system_settings.get_string("monospace-font-name")
else:
- font_name = gconf_get_str(self.GCONF_PROFILE_DIR + "/font", system_font)
-
- try:
- font_desc = pango.FontDescription(font_name)
- except:
- if font_name != self.DEFAULT_FONT:
- if font_name != system_font:
- try:
- font_desc = pango.FontDescription(system_font)
- except:
- pass
-
- if font_desc == None:
- try:
- font_desc = pango.FontDescription(self.DEFAULT_FONT)
- except:
- pass
-
- if font_desc != None:
- self["view"].modify_font(font_desc)
-
- def on_gconf_notification(self, client, cnxn_id, entry, what):
- self.reconfigure()
+ font = self.profile_settings.get_string("font")
+
+ font_desc = Pango.font_description_from_string(font)
+
+ self["view"].override_font(font_desc)
def set_process(self, process):
self.process = process
@@ -204,7 +168,7 @@ class OutputPanel(UniqueById):
buffer.apply_tag(tag, start_iter, end_iter)
buffer.delete_mark(insert)
- gobject.idle_add(self.scroll_to_end)
+ GObject.idle_add(self.scroll_to_end)
def show(self):
panel = self.window.get_bottom_panel()
@@ -217,17 +181,17 @@ class OutputPanel(UniqueById):
else:
cursor = self.normal_cursor
- view.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(cursor)
+ view.get_window(Gtk.TextWindowType.TEXT).set_cursor(cursor)
def on_view_motion_notify_event(self, view, event):
- if event.window == view.get_window(gtk.TEXT_WINDOW_TEXT):
+ if event.window == view.get_window(Gtk.TextWindowType.TEXT):
self.update_cursor_style(view, int(event.x), int(event.y))
return False
def on_view_visibility_notify_event(self, view, event):
- if event.window == view.get_window(gtk.TEXT_WINDOW_TEXT):
- x, y, m = event.window.get_pointer()
+ if event.window == view.get_window(Gtk.TextWindowType.TEXT):
+ win, x, y, flags = event.window.get_pointer()
self.update_cursor_style(view, x, y)
return False
@@ -243,8 +207,8 @@ class OutputPanel(UniqueById):
"""
# get the offset within the buffer from the x,y coordinates
- buff_x, buff_y = view.window_to_buffer_coords(gtk.TEXT_WINDOW_TEXT,
- x, y)
+ buff_x, buff_y = view.window_to_buffer_coords(Gtk.TextWindowType.TEXT,
+ x, y)
iter_at_xy = view.get_iter_at_location(buff_x, buff_y)
offset = iter_at_xy.get_offset()
@@ -257,8 +221,8 @@ class OutputPanel(UniqueById):
return None
def on_view_button_press_event(self, view, event):
- if event.button != 1 or event.type != gdk.BUTTON_PRESS or \
- event.window != view.get_window(gtk.TEXT_WINDOW_TEXT):
+ if event.button != 1 or event.type != Gdk.BUTTON_PRESS or \
+ event.window != view.get_window(Gtk.TextWindowType.TEXT):
return False
link = self.get_link_at_location(view, int(event.x), int(event.y))
@@ -268,24 +232,7 @@ class OutputPanel(UniqueById):
gfile = self.file_lookup.lookup(link.path)
if gfile:
- gedit.commands.load_location(self.window, gfile, None, link.line_nr, -1)
- gobject.idle_add(self.idle_grab_focus)
-
-gconf_client = gconf.client_get_default()
-def gconf_get_bool(key, default = False):
- val = gconf_client.get(key)
-
- if val is not None and val.type == gconf.VALUE_BOOL:
- return val.get_bool()
- else:
- return default
-
-def gconf_get_str(key, default = ""):
- val = gconf_client.get(key)
-
- if val is not None and val.type == gconf.VALUE_STRING:
- return val.get_string()
- else:
- return default
+ Gedit.commands_load_location(self.window, gfile, None, link.line_nr, -1)
+ GObject.idle_add(self.idle_grab_focus)
# ex:ts=4:et:
diff --git a/plugins/externaltools/tools/tools.ui b/plugins/externaltools/tools/tools.ui
index dff7d19..f65a641 100644
--- a/plugins/externaltools/tools/tools.ui
+++ b/plugins/externaltools/tools/tools.ui
@@ -131,7 +131,6 @@
<property name="default_height">500</property>
<property name="type_hint">dialog</property>
<property name="skip_taskbar_hint">True</property>
- <property name="has_separator">False</property>
<signal name="focus_out_event" handler="on_tool_manager_dialog_focus_out"/>
<signal name="response" handler="on_tool_manager_dialog_response"/>
<child internal-child="vbox">
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]