Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorC. Scott Ananian <cscott@cscott.net>2011-10-25 07:08:15 (GMT)
committer C. Scott Ananian <cscott@cscott.net>2011-11-02 19:44:28 (GMT)
commitc91efbf665aad71b69d1f43196b57f01ad631a4e (patch)
treef0187280e255cec6eb6a940da012cb2831e56f0a
parentb81f399d5c57465e95cca0fac241975bc75df303 (diff)
Run automatic conversion to gtk3/gir.gtk3-precairo
This doesn't actually work under gtk3 yet, but it shouldn't break on gtk2.
-rw-r--r--TurtleArt/sprites.py43
-rw-r--r--TurtleArt/tablock.py4
-rw-r--r--TurtleArt/tacanvas.py19
-rw-r--r--TurtleArt/tacollaboration.py4
-rw-r--r--TurtleArt/taexporthtml.py6
-rw-r--r--TurtleArt/tagplay.py32
-rw-r--r--TurtleArt/talogo.py4
-rwxr-xr-xTurtleArt/tasprite_factory.py6
-rw-r--r--TurtleArt/tautils.py32
-rw-r--r--TurtleArt/tawindow.py49
-rw-r--r--TurtleArtActivity.py73
-rw-r--r--collaboration/activity.py42
-rw-r--r--collaboration/buddy.py26
-rw-r--r--collaboration/connection_watcher.py16
-rwxr-xr-xcollaboration/neighborhood.py71
-rw-r--r--collaboration/presenceservice.py12
-rwxr-xr-xcollaboration/test.py1
-rw-r--r--collaboration/xocolor.py4
-rw-r--r--gnome_plugins/collaboration_plugin.py13
-rw-r--r--gnome_plugins/plugin.py7
-rw-r--r--gnome_plugins/uploader_plugin.py46
-rw-r--r--plugins/camera_sensor/camera_sensor.py4
-rw-r--r--plugins/plugin.py7
-rw-r--r--plugins/rfid/device.py12
-rw-r--r--plugins/rfid/rfidrweusb.py8
-rw-r--r--plugins/rfid/tis2000.py6
-rw-r--r--plugins/turtle_blocks_extras/turtle_blocks_extras.py4
-rw-r--r--pysamples/grecord.py11
-rwxr-xr-xturtleart.py54
-rw-r--r--util/configfile.py11
-rw-r--r--util/configwizard.py31
-rw-r--r--util/gtkcompat.py132
-rw-r--r--util/menubuilder.py7
33 files changed, 453 insertions, 344 deletions
diff --git a/TurtleArt/sprites.py b/TurtleArt/sprites.py
index 8bd3738..b851be8 100644
--- a/TurtleArt/sprites.py
+++ b/TurtleArt/sprites.py
@@ -42,7 +42,7 @@ Example usage:
return True
# Create a new sprite collection for a gtk Drawing Area.
- my_drawing_area = gtk.DrawingArea()
+ my_drawing_area = Gtk.DrawingArea()
self.sprite_list = Sprites(my_drawing_area)
# Create a "pixbuf" (in this example, from SVG).
@@ -70,18 +70,21 @@ Example usage:
# method for converting SVG to a gtk pixbuf
def svg_str_to_pixbuf(svg_string):
- pl = gtk.gdk.PixbufLoader('svg')
+ pl = GdkPixbuf.PixbufLoader('svg')
pl.write(svg_string)
pl.close()
pixbuf = pl.get_pixbuf()
return pixbuf
"""
-import pygtk
-pygtk.require('2.0')
-import gtk
-import pango
+from util.gtkcompat import Gtk, Gdk, GdkPixbuf, Pango, Rectangle
+def _is_pixbuf(pb):
+ if isinstance(pb, GdkPixbuf.Pixbuf): return True
+ # backwards gtk2 compatibility hack
+ if hasattr(Gdk, 'Pixbuf'):
+ if isinstance(pb, Gdk.Pixbuf): return True
+ return False
class Sprites:
""" A class for the list of sprites and everything they share in common """
@@ -158,7 +161,7 @@ class Sprite:
def __init__(self, sprites, x, y, image):
""" Initialize an individual sprite """
self._sprites = sprites
- self.rect = gtk.gdk.Rectangle(int(x), int(y), 0, 0)
+ self.rect = Rectangle(int(x), int(y), 0, 0)
self.save_xy = (x, y) # remember initial (x, y) position
self._scale = [12]
self._rescale = [True]
@@ -187,7 +190,7 @@ class Sprite:
self.images[i] = image
self._dx[i] = dx
self._dy[i] = dy
- if isinstance(self.images[i], gtk.gdk.Pixbuf):
+ if _is_pixbuf(self.images[i]):
w = self.images[i].get_width()
h = self.images[i].get_height()
else:
@@ -279,7 +282,7 @@ class Sprite:
def set_font(self, font):
""" Set the font for a label """
- self._fd = pango.FontDescription(font)
+ self._fd = Pango.FontDescription(font)
def set_label_color(self, rgb):
""" Set the font color for a label """
@@ -312,7 +315,7 @@ class Sprite:
if self._sprites is None:
return
for i, img in enumerate(self.images):
- if isinstance(img, gtk.gdk.Pixbuf):
+ if _is_pixbuf(img):
self._sprites.area.draw_pixbuf(self._sprites.gc, img, 0, 0,
self.rect.x + self._dx[i],
self.rect.y + self._dy[i])
@@ -347,23 +350,23 @@ class Sprite:
my_height = self.rect.height - self._margins[1] - self._margins[3]
for i in range(len(self.labels)):
pl = self._sprites.canvas.create_pango_layout(str(self.labels[i]))
- self._fd.set_size(int(self._scale[i] * pango.SCALE))
+ self._fd.set_size(int(self._scale[i] * Pango.SCALE))
pl.set_font_description(self._fd)
- w = pl.get_size()[0] / pango.SCALE
+ w = pl.get_size()[0] / Pango.SCALE
if w > my_width:
if self._rescale[i]:
self._fd.set_size(
- int(self._scale[i] * pango.SCALE * my_width / w))
+ int(self._scale[i] * Pango.SCALE * my_width / w))
pl.set_font_description(self._fd)
- w = pl.get_size()[0] / pango.SCALE
+ w = pl.get_size()[0] / Pango.SCALE
else:
j = len(self.labels[i]) - 1
while(w > my_width and j > 0):
pl = self._sprites.canvas.create_pango_layout(
"…" + self.labels[i][len(self.labels[i]) - j:])
- self._fd.set_size(int(self._scale[i] * pango.SCALE))
+ self._fd.set_size(int(self._scale[i] * Pango.SCALE))
pl.set_font_description(self._fd)
- w = pl.get_size()[0] / pango.SCALE
+ w = pl.get_size()[0] / Pango.SCALE
j -= 1
if self._horiz_align[i] == "center":
x = int(self.rect.x + self._margins[0] + (my_width - w) / 2)
@@ -371,7 +374,7 @@ class Sprite:
x = int(self.rect.x + self._margins[0])
else: # right
x = int(self.rect.x + self.rect.width - w - self._margins[2])
- h = pl.get_size()[1] / pango.SCALE
+ h = pl.get_size()[1] / Pango.SCALE
if self._vert_align[i] == "middle":
y = int(self.rect.y + self._margins[1] + (my_height - h) / 2)
elif self._vert_align[i] == "top":
@@ -386,9 +389,9 @@ class Sprite:
max = 0
for i in range(len(self.labels)):
pl = self._sprites.canvas.create_pango_layout(self.labels[i])
- self._fd.set_size(int(self._scale[i] * pango.SCALE))
+ self._fd.set_size(int(self._scale[i] * Pango.SCALE))
pl.set_font_description(self._fd)
- w = pl.get_size()[0] / pango.SCALE
+ w = pl.get_size()[0] / Pango.SCALE
if w > max:
max = w
return max
@@ -410,7 +413,7 @@ class Sprite:
x, y = pos
x = x - self.rect.x
y = y - self.rect.y
- if isinstance(self.images[i], gtk.gdk.Pixbuf):
+ if _is_pixbuf(self.images[i]):
if y > self.images[i].get_height() - 1:
return(-1, -1, -1, -1)
array = self.images[i].get_pixels()
diff --git a/TurtleArt/tablock.py b/TurtleArt/tablock.py
index d2292b1..8b9b229 100644
--- a/TurtleArt/tablock.py
+++ b/TurtleArt/tablock.py
@@ -19,7 +19,7 @@
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
#THE SOFTWARE.
-import gtk
+from util.gtkcompat import Gtk
from gettext import gettext as _
from taconstants import EXPANDABLE, EXPANDABLE_ARGS, OLD_NAMES, CONSTANTS, \
@@ -265,7 +265,7 @@ class Block:
if self.spr is None:
return
if self._image is not None:
- tmp = self._image.scale_simple(w, h, gtk.gdk.INTERP_NEAREST)
+ tmp = self._image.scale_simple(w, h, GdkPixbuf.InterpType.NEAREST)
self.spr.set_image(tmp, 1, x, y)
def rescale(self, scale):
diff --git a/TurtleArt/tacanvas.py b/TurtleArt/tacanvas.py
index 59fcb1c..a5bbbb8 100644
--- a/TurtleArt/tacanvas.py
+++ b/TurtleArt/tacanvas.py
@@ -20,9 +20,8 @@
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
#THE SOFTWARE.
-import gtk
+from util.gtkcompat import Gtk, Gdk, Pango, Rectangle
from math import sin, cos, pi
-import pango
import cairo
import base64
from gettext import gettext as _
@@ -123,7 +122,7 @@ class TurtleGraphics:
self.height = height
if self.tw.interactive_mode:
self.canvas = Sprite(tw.sprite_list, 0, 0,
- gtk.gdk.Pixmap(self.tw.area, self.width * 2,
+ Gdk.Pixmap(self.tw.area, self.width * 2,
self.height * 2, -1))
else:
self.canvas = Sprite(None, 0, 0, self.tw.window)
@@ -202,7 +201,7 @@ class TurtleGraphics:
def clearscreen(self, share=True):
"""Clear the canvas and reset most graphics attributes to defaults."""
- rect = gtk.gdk.Rectangle(0, 0, self.width * 2, self.height * 2)
+ rect = Rectangle(0, 0, self.width * 2, self.height * 2)
self.gc.set_foreground(self.bgcolor)
self.canvas.images[0].draw_rectangle(self.gc, True, *rect)
self.invalt(0, 0, self.width, self.height)
@@ -399,7 +398,7 @@ class TurtleGraphics:
return
self.tw.active_turtle.set_pen_size(ps)
self.gc.set_line_attributes(int(self.pensize * self.tw.coord_scale),
- gtk.gdk.LINE_SOLID, gtk.gdk.CAP_ROUND, gtk.gdk.JOIN_MITER)
+ Gdk.LINE_SOLID, Gdk.CAP_ROUND, Gdk.JOIN_MITER)
self.svg.set_stroke_width(self.pensize)
if self.tw.sharing() and share:
event = "w|%s" % (data_to_string([self._get_my_nick(),
@@ -472,7 +471,7 @@ class TurtleGraphics:
oldc, olds = self.color, self.shade
self.setcolor(c, False)
self.setshade(s, False)
- rect = gtk.gdk.Rectangle(0, 0, self.width * 2, self.height * 2)
+ rect = Rectangle(0, 0, self.width * 2, self.height * 2)
self.gc.set_foreground(self.fgcolor)
self.bgrgb = self.fgrgb[:]
self.canvas.images[0].draw_rectangle(self.gc, True, *rect)
@@ -562,9 +561,9 @@ class TurtleGraphics:
""" Draw text """
w *= self.tw.coord_scale
self.gc.set_foreground(self.fgcolor)
- fd = pango.FontDescription('Sans')
+ fd = Pango.FontDescription('Sans')
try:
- fd.set_size(int(size * self.tw.coord_scale) * pango.SCALE)
+ fd.set_size(int(size * self.tw.coord_scale) * Pango.SCALE)
except TypeError, ValueError:
debug_output("bad value sent to %s" % (__name__),
self.tw.running_sugar)
@@ -578,7 +577,7 @@ class TurtleGraphics:
else:
pl = self.tw.window.create_pango_layout(str(label))
pl.set_font_description(fd)
- pl.set_width(int(w) * pango.SCALE)
+ pl.set_width(int(w) * Pango.SCALE)
self.canvas.images[0].draw_layout(self.gc, int(x), int(y), pl)
w, h = pl.get_pixel_size()
self.invalt(x, y, w, h)
@@ -658,7 +657,7 @@ class TurtleGraphics:
""" Mark a region for refresh """
if self.tw.interactive_mode:
self.tw.area.invalidate_rect(
- gtk.gdk.Rectangle(int(x + self.cx), int(y + self.cy),
+ Rectangle(int(x + self.cx), int(y + self.cy),
int(w), int(h)), False)
def get_color_index(self, r, g, b, a=0):
diff --git a/TurtleArt/tacollaboration.py b/TurtleArt/tacollaboration.py
index 8316c7a..5fac55d 100644
--- a/TurtleArt/tacollaboration.py
+++ b/TurtleArt/tacollaboration.py
@@ -23,7 +23,7 @@ from dbus.service import signal
from dbus.gobject_service import ExportedGObject
import telepathy
-import gtk
+from util.gtkcompat import GdkPixbuf
import base64
from TurtleArt.tautils import data_to_string, data_from_string, get_path, \
@@ -290,7 +290,7 @@ class Collaboration():
else:
tmp_path = '/tmp'
file_name = base64_to_image(data, tmp_path)
- pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(file_name,
+ pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(file_name,
width, height)
x, y = self._tw.canvas.turtle_to_screen_coordinates(x, y)
self._tw.canvas.draw_pixbuf(pixbuf, a, b, x, y, w, h,
diff --git a/TurtleArt/taexporthtml.py b/TurtleArt/taexporthtml.py
index 843b8b0..8ed2b1f 100644
--- a/TurtleArt/taexporthtml.py
+++ b/TurtleArt/taexporthtml.py
@@ -18,9 +18,7 @@
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
#THE SOFTWARE.
-import pygtk
-pygtk.require('2.0')
-import gtk
+from util.gtkcompat import GdkPixbuf
import os.path
from cgi import escape
from gettext import gettext as _
@@ -90,7 +88,7 @@ def save_html(self, tw, embed_flag=True):
if p.endswith(('.svg')):
tmp = imgdata
else:
- pixbuf = gtk.gdk.pixbuf_new_from_file(p)
+ pixbuf = GdkPixbuf.Pixbuf.new_from_file(p)
imgdata = image_to_base64(pixbuf,
get_path(tw.activity, 'instance'))
tmp = HTML_GLUE['img2'][0]
diff --git a/TurtleArt/tagplay.py b/TurtleArt/tagplay.py
index dbce7ed..e264fc9 100644
--- a/TurtleArt/tagplay.py
+++ b/TurtleArt/tagplay.py
@@ -26,16 +26,12 @@
import logging
import os
-import pygtk
-pygtk.require('2.0')
-
-import gobject
-gobject.threads_init()
+from util.gtkcompat import GObject, Gtk
+GObject.threads_init()
import pygst
import gst
import gst.interfaces
-import gtk
import urllib
@@ -97,11 +93,11 @@ class Gplay():
self.got_stream_info = False
self.currentplaying = 0
- self.bin = gtk.Window()
+ self.bin = Gtk.Window()
self.videowidget = VideoWidget()
self.bin.add(self.videowidget)
- self.bin.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_NORMAL)
+ self.bin.set_type_hint(Gdk.WindowTypeHint.NORMAL)
self.bin.set_decorated(False)
if lc.tw.running_sugar:
self.bin.set_transient_for(lc.tw.activity)
@@ -170,14 +166,14 @@ class Gplay():
self.player.play()
-class GstPlayer(gobject.GObject):
+class GstPlayer(GObject.GObject):
__gsignals__ = {
- 'error': (gobject.SIGNAL_RUN_FIRST, None, [str, str]),
- 'eos': (gobject.SIGNAL_RUN_FIRST, None, []),
- 'stream-info': (gobject.SIGNAL_RUN_FIRST, None, [object])}
+ 'error': (GObject.SignalFlags.RUN_FIRST, None, [str, str]),
+ 'eos': (GObject.SignalFlags.RUN_FIRST, None, []),
+ 'stream-info': (GObject.SignalFlags.RUN_FIRST, None, [object])}
def __init__(self, videowidget):
- gobject.GObject.__init__(self)
+ GObject.GObject.__init__(self)
self.playing = False
self.error = False
@@ -277,14 +273,14 @@ class GstPlayer(gobject.GObject):
return self.playing
-class VideoWidget(gtk.DrawingArea):
+class VideoWidget(Gtk.DrawingArea):
def __init__(self):
- gtk.DrawingArea.__init__(self)
- self.set_events(gtk.gdk.EXPOSURE_MASK)
+ GObject.GObject.__init__(self)
+ self.set_events(Gdk.EventMask.EXPOSURE_MASK)
self.imagesink = None
- self.unset_flags(gtk.DOUBLE_BUFFERED)
- self.set_flags(gtk.APP_PAINTABLE)
+ self.unset_flags(Gtk.DOUBLE_BUFFERED)
+ self.set_flags(Gtk.APP_PAINTABLE)
def do_expose_event(self, event):
if self.imagesink:
diff --git a/TurtleArt/talogo.py b/TurtleArt/talogo.py
index 12be92f..c5a2253 100644
--- a/TurtleArt/talogo.py
+++ b/TurtleArt/talogo.py
@@ -21,7 +21,7 @@
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
#THE SOFTWARE.
-import gtk
+from util.gtkcompat import GdkPixbuf
from time import time
from operator import isNumberType
@@ -578,7 +578,7 @@ class LogoCode:
self.filepath is not None and \
self.filepath != '':
try:
- pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(self.filepath,
+ pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(self.filepath,
w, h)
except:
self.tw.showlabel('nojournal', self.filepath)
diff --git a/TurtleArt/tasprite_factory.py b/TurtleArt/tasprite_factory.py
index d05902d..19e38ad 100755
--- a/TurtleArt/tasprite_factory.py
+++ b/TurtleArt/tasprite_factory.py
@@ -20,9 +20,7 @@
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
#THE SOFTWARE.
-import pygtk
-pygtk.require('2.0')
-import gtk
+from util.gtkcompat import GdkPixbuf
import os
from taconstants import HIT_RED, HIT_GREEN, HIDE_WHITE, SHOW_WHITE
@@ -1137,7 +1135,7 @@ if __name__ == "__main__":
def svg_str_to_pixbuf(svg_string):
""" Load pixbuf from SVG string """
- pl = gtk.gdk.PixbufLoader('svg')
+ pl = GdkPixbuf.PixbufLoader('svg')
pl.write(svg_string)
pl.close()
pixbuf = pl.get_pixbuf()
diff --git a/TurtleArt/tautils.py b/TurtleArt/tautils.py
index a47c063..cea1dac 100644
--- a/TurtleArt/tautils.py
+++ b/TurtleArt/tautils.py
@@ -19,7 +19,7 @@
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
#THE SOFTWARE.
-import gtk
+from util.gtkcompat import Gtk
import pickle
import subprocess
import os.path
@@ -169,19 +169,19 @@ def json_dump(data):
def get_load_name(suffix, load_save_folder):
""" Open a load file dialog. """
- _dialog = gtk.FileChooserDialog(_('Load...'), None,
- gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
- gtk.STOCK_OPEN, gtk.RESPONSE_OK))
- _dialog.set_default_response(gtk.RESPONSE_OK)
+ _dialog = Gtk.FileChooserDialog(_('Load...'), None,
+ Gtk.FileChooserAction.OPEN, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
+ Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
+ _dialog.set_default_response(Gtk.ResponseType.OK)
return do_dialog(_dialog, suffix, load_save_folder)
def get_save_name(suffix, load_save_folder, save_file_name):
""" Open a save file dialog. """
- _dialog = gtk.FileChooserDialog(_('Save...'), None,
- gtk.FILE_CHOOSER_ACTION_SAVE, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
- gtk.STOCK_SAVE, gtk.RESPONSE_OK))
- _dialog.set_default_response(gtk.RESPONSE_OK)
+ _dialog = Gtk.FileChooserDialog(_('Save...'), None,
+ Gtk.FileChooserAction.SAVE, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
+ Gtk.STOCK_SAVE, Gtk.ResponseType.OK))
+ _dialog.set_default_response(Gtk.ResponseType.OK)
if save_file_name is not None:
_dialog.set_current_name(save_file_name + suffix)
return do_dialog(_dialog, suffix, load_save_folder)
@@ -196,11 +196,11 @@ def chooser(parent_window, filter, action):
_chooser = ObjectChooser(parent=parent_window, what_filter=filter)
except TypeError:
_chooser = ObjectChooser(None, parent_window,
- gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT)
+ Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT)
if _chooser is not None:
try:
result = _chooser.run()
- if result == gtk.RESPONSE_ACCEPT:
+ if result == Gtk.ResponseType.ACCEPT:
dsobject = _chooser.get_selected_object()
action(dsobject)
dsobject.destroy()
@@ -247,13 +247,13 @@ def data_to_string(data):
def do_dialog(dialog, suffix, load_save_folder):
""" Open a file dialog. """
_result = None
- file_filter = gtk.FileFilter()
+ file_filter = Gtk.FileFilter()
file_filter.add_pattern('*' + suffix)
file_filter.set_name("Turtle Art")
dialog.add_filter(file_filter)
dialog.set_current_folder(load_save_folder)
_response = dialog.run()
- if _response == gtk.RESPONSE_OK:
+ if _response == Gtk.ResponseType.OK:
_result = dialog.get_filename()
load_save_folder = dialog.get_current_folder()
dialog.destroy()
@@ -262,7 +262,7 @@ def do_dialog(dialog, suffix, load_save_folder):
def save_picture(canvas, file_name=''):
""" Save the canvas to a file. """
- _pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, canvas.width,
+ _pixbuf = GdkPixbuf.Pixbuf(GdkPixbuf.Colorspace.RGB, False, 8, canvas.width,
canvas.height)
_pixbuf.get_from_drawable(canvas.canvas.images[0],
canvas.canvas.images[0].get_colormap(),
@@ -282,12 +282,12 @@ def save_svg(string, file_name):
def get_pixbuf_from_journal(dsobject, w, h):
""" Load a pixbuf from a Journal object. """
try:
- _pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(dsobject.file_path,
+ _pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(dsobject.file_path,
int(w), int(h))
except:
try:
_pixbufloader = \
- gtk.gdk.pixbuf_loader_new_with_mime_type('image/png')
+ GdkPixbuf.Pixbuf.loader_new_with_mime_type('image/png')
_pixbufloader.set_size(min(300, int(w)), min(225, int(h)))
_pixbufloader.write(dsobject.metadata['preview'])
_pixbufloader.close()
diff --git a/TurtleArt/tawindow.py b/TurtleArt/tawindow.py
index f1917e8..1a48200 100644
--- a/TurtleArt/tawindow.py
+++ b/TurtleArt/tawindow.py
@@ -22,10 +22,7 @@
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
#THE SOFTWARE.
-import pygtk
-pygtk.require('2.0')
-import gtk
-import gobject
+from util.gtkcompat import Gtk, Gdk, GObject, Rectangle
from gettext import gettext as _
try:
@@ -86,10 +83,10 @@ class TurtleArtWindow():
self.parent = parent
self.send_event = None # method to send events over the network
self.gst_available = GST_AVAILABLE
- if type(canvas_window) == gtk.DrawingArea:
+ if type(canvas_window) == Gtk.DrawingArea:
self.interactive_mode = True
self.window = canvas_window
- self.window.set_flags(gtk.CAN_FOCUS)
+ self.window.set_flags(Gtk.CAN_FOCUS)
self.window.show_all()
if self.parent is not None:
self.parent.show_all()
@@ -105,7 +102,7 @@ class TurtleArtWindow():
self.running_sugar)
exit()
self._setup_events()
- elif type(canvas_window) == gtk.gdk.Pixmap:
+ elif type(canvas_window) == Gdk.Pixmap:
self.interactive_mode = False
self.window = canvas_window
self.running_sugar = False
@@ -129,9 +126,9 @@ class TurtleArtWindow():
self.used_block_list = [] # Which blocks has the user used?
self.save_folder = None
self.save_file_name = None
- self.width = gtk.gdk.screen_width()
- self.height = gtk.gdk.screen_height()
- self.rect = gtk.gdk.Rectangle(0, 0, 0, 0)
+ self.width = Gdk.Screen.width()
+ self.height = Gdk.Screen.height()
+ self.rect = Rectangle(0, 0, 0, 0)
self.keypress = ''
self.keyvalue = 0
@@ -314,7 +311,7 @@ class TurtleArtWindow():
def _add_plugin_icon_dir(self, dirname):
''' If there is an icon subdir, add it to the search path. '''
- icon_theme = gtk.icon_theme_get_default()
+ icon_theme = Gtk.IconTheme.get_default()
icon_path = os.path.join(dirname, 'icons')
if os.path.exists(icon_path):
icon_theme.append_search_path(icon_path)
@@ -352,10 +349,10 @@ class TurtleArtWindow():
def _setup_events(self):
""" Register the events we listen to. """
- self.window.add_events(gtk.gdk.BUTTON_PRESS_MASK)
- self.window.add_events(gtk.gdk.BUTTON_RELEASE_MASK)
- self.window.add_events(gtk.gdk.POINTER_MOTION_MASK)
- self.window.add_events(gtk.gdk.KEY_PRESS_MASK)
+ self.window.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
+ self.window.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK)
+ self.window.add_events(Gdk.EventMask.POINTER_MOTION_MASK)
+ self.window.add_events(Gdk.EventMask.KEY_PRESS_MASK)
self.window.connect("expose-event", self._expose_cb)
self.window.connect("button-press-event", self._buttonpress_cb)
self.window.connect("button-release-event", self._buttonrelease_cb)
@@ -958,7 +955,7 @@ class TurtleArtWindow():
self.mouse_flag = 1
self.mouse_x = x
self.mouse_y = y
- self.button_press(event.get_state() & gtk.gdk.CONTROL_MASK, x, y)
+ self.button_press(event.get_state() & Gdk.EventMask.CONTROL_MASK, x, y)
return True
def button_press(self, mask, x, y):
@@ -1579,7 +1576,7 @@ class TurtleArtWindow():
else:
if self.timeout_tag[0] > 0:
try:
- gobject.source_remove(self.timeout_tag[0])
+ GObject.source_remove(self.timeout_tag[0])
self.timeout_tag[0] = 0
except:
self.timeout_tag[0] = 0
@@ -1592,14 +1589,14 @@ class TurtleArtWindow():
else:
if self.timeout_tag[0] > 0:
try:
- gobject.source_remove(self.timeout_tag[0])
+ GObject.source_remove(self.timeout_tag[0])
self.timeout_tag[0] = 0
except:
self.timeout_tag[0] = 0
else:
if self.timeout_tag[0] > 0:
try:
- gobject.source_remove(self.timeout_tag[0])
+ GObject.source_remove(self.timeout_tag[0])
self.timeout_tag[0] = 0
except:
self.timeout_tag[0] = 0
@@ -1974,7 +1971,7 @@ class TurtleArtWindow():
top = find_top_block(blk)
self.lc.run_blocks(top, self.just_blocks(), True)
if self.interactive_mode:
- gobject.idle_add(self.lc.doevalstep)
+ GObject.idle_add(self.lc.doevalstep)
else:
while self.lc.doevalstep():
pass
@@ -2147,7 +2144,7 @@ class TurtleArtWindow():
blk.name = 'audio'
elif image_media_type(picture):
w, h = calc_image_size(blk.spr)
- pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(picture, w, h)
+ pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(picture, w, h)
else:
blk.name = 'description'
if pixbuf is not None:
@@ -2157,9 +2154,9 @@ class TurtleArtWindow():
def _keypress_cb(self, area, event):
""" Keyboard """
- keyname = gtk.gdk.keyval_name(event.keyval)
- keyunicode = gtk.gdk.keyval_to_unicode(event.keyval)
- if event.get_state() & gtk.gdk.MOD1_MASK:
+ keyname = Gdk.keyval_name(event.keyval)
+ keyunicode = Gdk.keyval_to_unicode(event.keyval)
+ if event.get_state() & Gdk.ModifierType.MOD1_MASK:
alt_mask = True
alt_flag = 'T'
else:
@@ -2736,7 +2733,7 @@ class TurtleArtWindow():
except:
try:
w, h, = calc_image_size(blk.spr)
- pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(
+ pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(
blk.values[0], w, h)
x, y = self._calc_image_offset('', blk.spr)
blk.set_image(pixbuf, x, y)
@@ -2748,7 +2745,7 @@ class TurtleArtWindow():
if not movie_media_type(blk.values[0][-4:]):
try:
w, h, = calc_image_size(blk.spr)
- pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(
+ pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(
blk.values[0], w, h)
x, y = self._calc_image_offset('', blk.spr)
blk.set_image(pixbuf, x, y)
diff --git a/TurtleArtActivity.py b/TurtleArtActivity.py
index f5bdd69..92efed4 100644
--- a/TurtleArtActivity.py
+++ b/TurtleArtActivity.py
@@ -20,10 +20,7 @@
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
#THE SOFTWARE.
-import pygtk
-pygtk.require('2.0')
-import gtk
-import gobject
+from util.gtkcompat import Gtk, GObject
import dbus
import logging
@@ -151,7 +148,7 @@ class TurtleArtActivity(activity.Activity):
datastore.write(dsobject)
dsobject.destroy()
- gobject.timeout_add(250, self.save_as_html.set_icon, 'htmloff')
+ GObject.timeout_add(250, self.save_as_html.set_icon, 'htmloff')
self.tw.saved_pictures = [] # Clear queue of pictures we have viewed.
return
@@ -171,7 +168,7 @@ class TurtleArtActivity(activity.Activity):
datastore.write(dsobject)
dsobject.destroy()
- gobject.timeout_add(250, self.save_as_logo.set_icon, 'logo-saveoff')
+ GObject.timeout_add(250, self.save_as_logo.set_icon, 'logo-saveoff')
return
def do_load_ta_project_cb(self, button):
@@ -190,7 +187,7 @@ class TurtleArtActivity(activity.Activity):
''' Load Python code from the Journal. '''
self.load_python.set_icon('pippy-openon')
self.tw.load_python_code_from_file(fname=None, add_new_block=True)
- gobject.timeout_add(250, self.load_python.set_icon, 'pippy-openoff')
+ GObject.timeout_add(250, self.load_python.set_icon, 'pippy-openoff')
def do_save_as_image_cb(self, button):
''' Save the canvas to the Journal. '''
@@ -198,7 +195,7 @@ class TurtleArtActivity(activity.Activity):
_logger.debug('saving image to journal')
self.tw.save_as_image()
- gobject.timeout_add(250, self.save_as_image.set_icon, 'image-saveoff')
+ GObject.timeout_add(250, self.save_as_image.set_icon, 'image-saveoff')
return
def do_keep_cb(self, button):
@@ -297,28 +294,28 @@ class TurtleArtActivity(activity.Activity):
self.eraser_button.set_icon('eraseroff')
self.recenter()
self.tw.eraser_button()
- gobject.timeout_add(250, self.eraser_button.set_icon, 'eraseron')
+ GObject.timeout_add(250, self.eraser_button.set_icon, 'eraseron')
def do_run_cb(self, button):
''' Callback for run button (rabbit) '''
self.run_button.set_icon('run-faston')
self.tw.lc.trace = 0
self.tw.run_button(0)
- gobject.timeout_add(1000, self.run_button.set_icon, 'run-fastoff')
+ GObject.timeout_add(1000, self.run_button.set_icon, 'run-fastoff')
def do_step_cb(self, button):
''' Callback for step button (turtle) '''
self.step_button.set_icon('run-slowon')
self.tw.lc.trace = 1
self.tw.run_button(3)
- gobject.timeout_add(1000, self.step_button.set_icon, 'run-slowoff')
+ GObject.timeout_add(1000, self.step_button.set_icon, 'run-slowoff')
def do_debug_cb(self, button):
''' Callback for debug button (bug) '''
self.debug_button.set_icon('debugon')
self.tw.lc.trace = 1
self.tw.run_button(9)
- gobject.timeout_add(1000, self.debug_button.set_icon, 'debugoff')
+ GObject.timeout_add(1000, self.debug_button.set_icon, 'debugoff')
def do_stop_cb(self, button):
''' Callback for stop button. '''
@@ -462,10 +459,10 @@ class TurtleArtActivity(activity.Activity):
def __visibility_notify_cb(self, window, event):
''' Callback method for when the activity's visibility changes. '''
- if event.state == gtk.gdk.VISIBILITY_FULLY_OBSCURED:
+ if event.get_state() == Gdk.VisibilityState.FULLY_OBSCURED:
self.tw.background_plugins()
- elif event.state in \
- [gtk.gdk.VISIBILITY_UNOBSCURED, gtk.gdk.VISIBILITY_PARTIAL]:
+ elif event.get_state() in \
+ [Gdk.VISIBILITY_UNOBSCURED, Gdk.VISIBILITY_PARTIAL]:
self.tw.foreground_plugins()
def _keep_clicked_cb(self, button):
@@ -479,18 +476,18 @@ class TurtleArtActivity(activity.Activity):
activity_toolbar_button = ActivityToolbarButton(self)
- edit_toolbar = gtk.Toolbar()
+ edit_toolbar = Gtk.Toolbar()
edit_toolbar_button = ToolbarButton(label=_('Edit'),
page=edit_toolbar,
icon_name='toolbar-edit')
- view_toolbar = gtk.Toolbar()
+ view_toolbar = Gtk.Toolbar()
view_toolbar_button = ToolbarButton(label=_('View'),
page=view_toolbar,
icon_name='toolbar-view')
- self._palette_toolbar = gtk.Toolbar()
+ self._palette_toolbar = Gtk.Toolbar()
self._palette_toolbar_button = ToolbarButton(
page=self._palette_toolbar, icon_name='palette')
- self._help_toolbar = gtk.Toolbar()
+ self._help_toolbar = Gtk.Toolbar()
help_toolbar_button = ToolbarButton(label=_('Help'),
page=self._help_toolbar,
icon_name='help-toolbar')
@@ -530,15 +527,15 @@ class TurtleArtActivity(activity.Activity):
self._toolbox = activity.ActivityToolbox(self)
self.set_toolbox(self._toolbox)
- project_toolbar = gtk.Toolbar()
+ project_toolbar = Gtk.Toolbar()
self._toolbox.add_toolbar(_('Project'), project_toolbar)
- view_toolbar = gtk.Toolbar()
+ view_toolbar = Gtk.Toolbar()
self._toolbox.add_toolbar(_('View'), view_toolbar)
- edit_toolbar = gtk.Toolbar()
+ edit_toolbar = Gtk.Toolbar()
self._toolbox.add_toolbar(_('Edit'), edit_toolbar)
- journal_toolbar = gtk.Toolbar()
+ journal_toolbar = Gtk.Toolbar()
self._toolbox.add_toolbar(_('Import/Export'), journal_toolbar)
- self._help_toolbar = gtk.Toolbar()
+ self._help_toolbar = Gtk.Toolbar()
self._toolbox.add_toolbar(_('Help'), self._help_toolbar)
self._make_palette_buttons(project_toolbar, palette_button=True)
@@ -587,10 +584,10 @@ class TurtleArtActivity(activity.Activity):
is in use. '''
# FIXME: Temporary work-around gtk problem with XO175
if get_hardware() not in [XO175] and \
- (gtk.gtk_version[0] > 2 or gtk.gtk_version[1] > 16):
+ (Gtk.gtk_version[0] > 2 or Gtk.gtk_version[1] > 16):
self.hover_help_label = self._add_label(
_('Move the cursor over the orange palette for help.'),
- self._help_toolbar, gtk.gdk.screen_width() - 2 * ICON_SIZE)
+ self._help_toolbar, Gdk.Screen.width() - 2 * ICON_SIZE)
else:
self.hover_help_label = self._add_label(
_('Move the cursor over the orange palette for help.'),
@@ -695,14 +692,14 @@ class TurtleArtActivity(activity.Activity):
def _setup_scrolled_window(self):
''' Create a scrolled window to contain the turtle canvas. '''
- self.sw = gtk.ScrolledWindow()
+ self.sw = Gtk.ScrolledWindow()
self.set_canvas(self.sw)
- self.sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ self.sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
self.sw.show()
- canvas = gtk.DrawingArea()
- canvas.set_size_request(gtk.gdk.screen_width() * 2,
- gtk.gdk.screen_height() * 2)
+ canvas = Gtk.DrawingArea()
+ canvas.set_size_request(Gdk.Screen.width() * 2,
+ Gdk.Screen.height() * 2)
self.sw.add_with_viewport(canvas)
hadj = self.sw.get_hadjustment()
hadj.connect('value-changed', self._scroll_cb)
@@ -723,7 +720,7 @@ class TurtleArtActivity(activity.Activity):
vadj = self.sw.get_vadjustment()
self.vadj_value = vadj.get_value()
if not self.tw.hw in [XO1]:
- gobject.idle_add(self.tw.move_palettes, self.hadj_value,
+ GObject.idle_add(self.tw.move_palettes, self.hadj_value,
self.vadj_value)
def _setup_canvas(self, canvas_window):
@@ -753,7 +750,7 @@ class TurtleArtActivity(activity.Activity):
def _setup_visibility_handler(self):
''' Notify me when the visibility state changes. '''
- self.add_events(gtk.gdk.VISIBILITY_NOTIFY_MASK)
+ self.add_events(Gdk.EventMask.VISIBILITY_NOTIFY_MASK)
self.connect('visibility-notify-event', self.__visibility_notify_cb)
def write_file(self, file_path):
@@ -816,7 +813,7 @@ class TurtleArtActivity(activity.Activity):
def _copy_cb(self, button):
''' Copy to the clipboard. '''
- clipboard = gtk.Clipboard()
+ clipboard = Gtk.Clipboard()
_logger.debug('Serialize the project and copy to clipboard.')
data = self.tw.assemble_data_to_save(False, False)
if data is not []:
@@ -826,7 +823,7 @@ class TurtleArtActivity(activity.Activity):
def _paste_cb(self, button):
''' Paste from the clipboard. '''
- clipboard = gtk.Clipboard()
+ clipboard = Gtk.Clipboard()
_logger.debug('Paste to the project.')
text = clipboard.wait_for_text()
if text is not None:
@@ -842,12 +839,12 @@ class TurtleArtActivity(activity.Activity):
def _add_label(self, string, toolbar, width=None):
''' Add a label to a toolbar. '''
- label = gtk.Label(string)
+ label = Gtk.Label(label=string)
label.set_line_wrap(True)
if width is not None:
label.set_size_request(width, -1)
label.show()
- toolitem = gtk.ToolItem()
+ toolitem = Gtk.ToolItem()
toolitem.add(label)
toolbar.insert(toolitem, -1)
toolitem.show()
@@ -855,7 +852,7 @@ class TurtleArtActivity(activity.Activity):
def _add_separator(self, toolbar, expand=False, visible=True):
''' Add a separator to a toolbar. '''
- separator = gtk.SeparatorToolItem()
+ separator = Gtk.SeparatorToolItem()
separator.props.draw = visible
separator.set_expand(expand)
if hasattr(toolbar, 'insert'):
diff --git a/collaboration/activity.py b/collaboration/activity.py
index bd58e92..b84104a 100644
--- a/collaboration/activity.py
+++ b/collaboration/activity.py
@@ -26,7 +26,7 @@ from functools import partial
import dbus
from dbus import PROPERTIES_IFACE
-import gobject
+from util.gtkcompat import GObject
from telepathy.client import Channel
from telepathy.interfaces import CHANNEL, \
CHANNEL_INTERFACE_GROUP, \
@@ -46,7 +46,7 @@ CONN_INTERFACE_BUDDY_INFO = 'org.laptop.Telepathy.BuddyInfo'
_logger = logging.getLogger('sugar.presence.activity')
-class Activity(gobject.GObject):
+class Activity(GObject.GObject):
"""UI interface for an Activity in the presence service
Activities in the presence service represent your and other user's
@@ -60,24 +60,24 @@ class Activity(gobject.GObject):
joined
"""
__gsignals__ = {
- 'buddy-joined': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
- ([gobject.TYPE_PYOBJECT])),
- 'buddy-left': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
- ([gobject.TYPE_PYOBJECT])),
- 'new-channel': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
- ([gobject.TYPE_PYOBJECT])),
- 'joined': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
- ([gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT])),
+ 'buddy-joined': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
+ ([GObject.TYPE_PYOBJECT])),
+ 'buddy-left': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
+ ([GObject.TYPE_PYOBJECT])),
+ 'new-channel': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
+ ([GObject.TYPE_PYOBJECT])),
+ 'joined': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
+ ([GObject.TYPE_PYOBJECT, GObject.TYPE_PYOBJECT])),
}
__gproperties__ = {
- 'id': (str, None, None, None, gobject.PARAM_READABLE),
- 'name': (str, None, None, None, gobject.PARAM_READWRITE),
- 'tags': (str, None, None, None, gobject.PARAM_READWRITE),
- 'color': (str, None, None, None, gobject.PARAM_READWRITE),
- 'type': (str, None, None, None, gobject.PARAM_READABLE),
- 'private': (bool, None, None, True, gobject.PARAM_READWRITE),
- 'joined': (bool, None, None, False, gobject.PARAM_READABLE),
+ 'id': (str, None, None, None, GObject.PARAM_READABLE),
+ 'name': (str, None, None, None, GObject.PARAM_READWRITE),
+ 'tags': (str, None, None, None, GObject.PARAM_READWRITE),
+ 'color': (str, None, None, None, GObject.PARAM_READWRITE),
+ 'type': (str, None, None, None, GObject.PARAM_READABLE),
+ 'private': (bool, None, None, True, GObject.PARAM_READWRITE),
+ 'joined': (bool, None, None, False, GObject.PARAM_READABLE),
}
def __init__(self, account_path, connection, room_handle=None,
@@ -88,7 +88,7 @@ class Activity(gobject.GObject):
if properties is None:
properties = {}
- gobject.GObject.__init__(self)
+ GObject.GObject.__init__(self)
self._account_path = account_path
self.telepathy_conn = connection
@@ -467,14 +467,14 @@ class Activity(gobject.GObject):
self.telepathy_text_chan.Close()
-class _BaseCommand(gobject.GObject):
+class _BaseCommand(GObject.GObject):
__gsignals__ = {
- 'finished': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'finished': (GObject.SignalFlags.RUN_FIRST, None,
([object])),
}
def __init__(self):
- gobject.GObject.__init__(self)
+ GObject.GObject.__init__(self)
self.text_channel = None
self.text_channel_group_flags = None
diff --git a/collaboration/buddy.py b/collaboration/buddy.py
index b117940..eedf615 100644
--- a/collaboration/buddy.py
+++ b/collaboration/buddy.py
@@ -17,8 +17,8 @@
import logging
-import gobject
-import gconf
+from util.gtkcompat import GObject
+#from util.gtkcompat import GConf
import dbus
from telepathy.client import Connection
from telepathy.interfaces import CONNECTION
@@ -32,7 +32,7 @@ CONNECTION_INTERFACE_BUDDY_INFO = 'org.laptop.Telepathy.BuddyInfo'
_owner_instance = None
-class BaseBuddyModel(gobject.GObject):
+class BaseBuddyModel(GObject.GObject):
__gtype_name__ = 'SugarBaseBuddyModel'
def __init__(self, **kwargs):
@@ -42,7 +42,7 @@ class BaseBuddyModel(gobject.GObject):
self._tags = None
self._current_activity = None
- gobject.GObject.__init__(self, **kwargs)
+ GObject.GObject.__init__(self, **kwargs)
def get_nick(self):
return self._nick
@@ -50,7 +50,7 @@ class BaseBuddyModel(gobject.GObject):
def set_nick(self, nick):
self._nick = nick
- nick = gobject.property(type=object, getter=get_nick, setter=set_nick)
+ nick = GObject.property(type=object, getter=get_nick, setter=set_nick)
def get_key(self):
return self._key
@@ -58,7 +58,7 @@ class BaseBuddyModel(gobject.GObject):
def set_key(self, key):
self._key = key
- key = gobject.property(type=object, getter=get_key, setter=set_key)
+ key = GObject.property(type=object, getter=get_key, setter=set_key)
def get_color(self):
return self._color
@@ -66,12 +66,12 @@ class BaseBuddyModel(gobject.GObject):
def set_color(self, color):
self._color = color
- color = gobject.property(type=object, getter=get_color, setter=set_color)
+ color = GObject.property(type=object, getter=get_color, setter=set_color)
def get_tags(self):
return self._tags
- tags = gobject.property(type=object, getter=get_tags)
+ tags = GObject.property(type=object, getter=get_tags)
def get_current_activity(self):
return self._current_activity
@@ -81,7 +81,7 @@ class BaseBuddyModel(gobject.GObject):
self._current_activity = current_activity
self.notify('current-activity')
- current_activity = gobject.property(type=object,
+ current_activity = GObject.property(type=object,
getter=get_current_activity,
setter=set_current_activity)
@@ -95,7 +95,7 @@ class OwnerBuddyModel(BaseBuddyModel):
def __init__(self):
BaseBuddyModel.__init__(self)
- #client = gconf.client_get_default()
+ #client = GConf.Client.get_default()
#self.props.nick = client.get_string('/desktop/sugar/user/nick')
self.props.nick = "rgs"
#color = client.get_string('/desktop/sugar/user/color')
@@ -212,7 +212,7 @@ class BuddyModel(BaseBuddyModel):
def set_account(self, account):
self._account = account
- account = gobject.property(type=object, getter=get_account,
+ account = GObject.property(type=object, getter=get_account,
setter=set_account)
def get_contact_id(self):
@@ -221,7 +221,7 @@ class BuddyModel(BaseBuddyModel):
def set_contact_id(self, contact_id):
self._contact_id = contact_id
- contact_id = gobject.property(type=object, getter=get_contact_id,
+ contact_id = GObject.property(type=object, getter=get_contact_id,
setter=set_contact_id)
def get_handle(self):
@@ -230,5 +230,5 @@ class BuddyModel(BaseBuddyModel):
def set_handle(self, handle):
self._handle = handle
- handle = gobject.property(type=object, getter=get_handle,
+ handle = GObject.property(type=object, getter=get_handle,
setter=set_handle)
diff --git a/collaboration/connection_watcher.py b/collaboration/connection_watcher.py
index 96af1cf..36fd6b2 100644
--- a/collaboration/connection_watcher.py
+++ b/collaboration/connection_watcher.py
@@ -21,7 +21,7 @@ import logging
import dbus
import dbus.mainloop.glib
-import gobject
+from util.gtkcompat import GObject
from telepathy.client import Connection
from telepathy.interfaces import CONN_INTERFACE
@@ -32,16 +32,16 @@ from telepathy.constants import CONNECTION_STATUS_CONNECTED, \
_instance = None
-class ConnectionWatcher(gobject.GObject):
+class ConnectionWatcher(GObject.GObject):
__gsignals__ = {
- 'connection-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
- ([gobject.TYPE_PYOBJECT])),
- 'connection-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
- ([gobject.TYPE_PYOBJECT])),
+ 'connection-added': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
+ ([GObject.TYPE_PYOBJECT])),
+ 'connection-removed': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
+ ([GObject.TYPE_PYOBJECT])),
}
def __init__(self, bus=None):
- gobject.GObject.__init__(self)
+ GObject.GObject.__init__(self)
if bus is None:
self.bus = dbus.Bus()
@@ -118,5 +118,5 @@ if __name__ == '__main__':
watcher.connect('connection-added', connection_added_cb)
watcher.connect('connection-removed', connection_removed_cb)
- loop = gobject.MainLoop()
+ loop = GObject.MainLoop()
loop.run()
diff --git a/collaboration/neighborhood.py b/collaboration/neighborhood.py
index 192b66f..5287b42 100755
--- a/collaboration/neighborhood.py
+++ b/collaboration/neighborhood.py
@@ -21,8 +21,7 @@ from functools import partial
from hashlib import sha1
import traceback
-import gobject
-import gconf
+from util.gtkcompat import GObject, GConf
import dbus
from dbus import PROPERTIES_IFACE
from telepathy.interfaces import ACCOUNT, \
@@ -75,20 +74,20 @@ will be very slow in returning these queries, so just be patient.
"""
-class ActivityModel(gobject.GObject):
+class ActivityModel(GObject.GObject):
__gsignals__ = {
- 'current-buddy-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'current-buddy-added': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
([object])),
- 'current-buddy-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'current-buddy-removed': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
([object])),
- 'buddy-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'buddy-added': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
([object])),
- 'buddy-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'buddy-removed': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
([object])),
}
def __init__(self, activity_id, room_handle):
- gobject.GObject.__init__(self)
+ GObject.GObject.__init__(self)
self.activity_id = activity_id
self.room_handle = room_handle
@@ -105,7 +104,7 @@ class ActivityModel(gobject.GObject):
def set_color(self, color):
self._color = color
- color = gobject.property(type=object, getter=get_color, setter=set_color)
+ color = GObject.property(type=object, getter=get_color, setter=set_color)
def get_bundle(self):
return self._bundle
@@ -113,7 +112,7 @@ class ActivityModel(gobject.GObject):
def set_bundle(self, bundle):
self._bundle = bundle
- bundle = gobject.property(type=object, getter=get_bundle,
+ bundle = GObject.property(type=object, getter=get_bundle,
setter=set_bundle)
def get_name(self):
@@ -122,7 +121,7 @@ class ActivityModel(gobject.GObject):
def set_name(self, name):
self._name = name
- name = gobject.property(type=object, getter=get_name, setter=set_name)
+ name = GObject.property(type=object, getter=get_name, setter=set_name)
def is_private(self):
return self._private
@@ -130,7 +129,7 @@ class ActivityModel(gobject.GObject):
def set_private(self, private):
self._private = private
- private = gobject.property(type=object, getter=is_private,
+ private = GObject.property(type=object, getter=is_private,
setter=set_private)
def get_buddies(self):
@@ -146,7 +145,7 @@ class ActivityModel(gobject.GObject):
self.notify('buddies')
self.emit('buddy-removed', buddy)
- buddies = gobject.property(type=object, getter=get_buddies)
+ buddies = GObject.property(type=object, getter=get_buddies)
def get_current_buddies(self):
return self._current_buddies
@@ -161,35 +160,35 @@ class ActivityModel(gobject.GObject):
self.notify('current-buddies')
self.emit('current-buddy-removed', buddy)
- current_buddies = gobject.property(type=object, getter=get_current_buddies)
+ current_buddies = GObject.property(type=object, getter=get_current_buddies)
-class _Account(gobject.GObject):
+class _Account(GObject.GObject):
__gsignals__ = {
- 'activity-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'activity-added': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
([object, object])),
- 'activity-updated': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'activity-updated': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
([object, object])),
- 'activity-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'activity-removed': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
([object])),
- 'buddy-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'buddy-added': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
([object, object, object])),
- 'buddy-updated': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'buddy-updated': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
([object, object])),
- 'buddy-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'buddy-removed': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
([object])),
- 'buddy-joined-activity': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'buddy-joined-activity': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
([object, object])),
- 'buddy-left-activity': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'buddy-left-activity': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
([object, object])),
- 'current-activity-updated': (gobject.SIGNAL_RUN_FIRST,
- gobject.TYPE_NONE, ([object, object])),
- 'connected': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])),
- 'disconnected': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])),
+ 'current-activity-updated': (GObject.SignalFlags.RUN_FIRST,
+ GObject.TYPE_NONE, ([object, object])),
+ 'connected': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE, ([])),
+ 'disconnected': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE, ([])),
}
def __init__(self, account_path):
- gobject.GObject.__init__(self)
+ GObject.GObject.__init__(self)
self.object_path = account_path
@@ -632,20 +631,20 @@ class _Account(gobject.GObject):
-class Neighborhood(gobject.GObject):
+class Neighborhood(GObject.GObject):
__gsignals__ = {
- 'activity-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'activity-added': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
([object])),
- 'activity-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'activity-removed': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
([object])),
- 'buddy-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'buddy-added': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
([object])),
- 'buddy-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'buddy-removed': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
([object])),
}
def __init__(self, params = {}):
- gobject.GObject.__init__(self)
+ GObject.GObject.__init__(self)
self._buddies = {None: get_owner_instance()}
self._activities = {}
@@ -729,7 +728,7 @@ class Neighborhood(gobject.GObject):
#print('Still dont have a Salut account, creating one')
- client = gconf.client_get_default()
+ client = GConf.Client.get_default()
nick = client.get_string('/desktop/sugar/user/nick')
params = {
@@ -1042,7 +1041,7 @@ if __name__ == "__main__":
params["password"] = "test"
params["register"] = True
- loop = gobject.MainLoop()
+ loop = GObject.MainLoop()
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
n = get_neighborhood(params)
loop.run()
diff --git a/collaboration/presenceservice.py b/collaboration/presenceservice.py
index 33caadd..5f4da2d 100644
--- a/collaboration/presenceservice.py
+++ b/collaboration/presenceservice.py
@@ -22,7 +22,7 @@ STABLE.
import logging
-import gobject
+from util.gtkcompat import GObject
import dbus
import dbus.exceptions
import dbus.glib
@@ -50,18 +50,18 @@ ACCOUNT_MANAGER_PATH = '/org/freedesktop/Telepathy/AccountManager'
CONN_INTERFACE_ACTIVITY_PROPERTIES = 'org.laptop.Telepathy.ActivityProperties'
-class PresenceService(gobject.GObject):
+class PresenceService(GObject.GObject):
"""Provides simplified access to the Telepathy framework to activities"""
__gsignals__ = {
- 'activity-shared': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
- ([gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT,
- gobject.TYPE_PYOBJECT])),
+ 'activity-shared': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
+ ([GObject.TYPE_PYOBJECT, GObject.TYPE_PYOBJECT,
+ GObject.TYPE_PYOBJECT])),
}
def __init__(self):
"""Initialise the service and attempt to connect to events
"""
- gobject.GObject.__init__(self)
+ GObject.GObject.__init__(self)
self._activity_cache = None
self._buddy_cache = {}
diff --git a/collaboration/test.py b/collaboration/test.py
index db7be0d..62bc5e5 100755
--- a/collaboration/test.py
+++ b/collaboration/test.py
@@ -1,6 +1,5 @@
#!/usr/bin/python
-import gobject
import dbus
import dbus.mainloop
import dbus.mainloop.glib
diff --git a/collaboration/xocolor.py b/collaboration/xocolor.py
index 395e345..6252cb6 100644
--- a/collaboration/xocolor.py
+++ b/collaboration/xocolor.py
@@ -22,7 +22,7 @@ STABLE.
import random
import logging
-import gconf
+from util.gtkcompat import GConf
colors = [
['#B20008', '#FF2B34'], \
@@ -237,7 +237,7 @@ class XoColor:
elif not is_valid(color_string):
logging.debug('Color string is not valid: %s, '
'fallback to default', color_string)
- client = gconf.client_get_default()
+ client = GConf.Client.get_default()
color_string = client.get_string('/desktop/sugar/user/color')
randomize = False
else:
diff --git a/gnome_plugins/collaboration_plugin.py b/gnome_plugins/collaboration_plugin.py
index 4ba98a5..b62cf78 100644
--- a/gnome_plugins/collaboration_plugin.py
+++ b/gnome_plugins/collaboration_plugin.py
@@ -26,8 +26,7 @@ import os.path
import dbus
from gettext import gettext as _
-import gobject
-import gtk
+from util.gtkcompat import GObject, Gtk
from plugin import Plugin
@@ -53,9 +52,9 @@ CONNECTION_INTERFACE_ACTIVITY_PROPERTIES = \
class Collaboration_plugin(Plugin):
__gsignals__ = {
- 'joined': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'joined': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
()),
- 'shared': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'shared': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
()),
}
@@ -110,17 +109,17 @@ class Collaboration_plugin(Plugin):
self._setup_config_file(self._parent.get_config_home())
def get_menu(self):
- menu = gtk.Menu()
+ menu = Gtk.Menu()
MenuBuilder.make_menu_item(menu, _('Enable collaboration'),
self._connect_cb)
- self._activities_submenu = gtk.Menu()
+ self._activities_submenu = Gtk.Menu()
activities_menu = MenuBuilder.make_sub_menu(self._activities_submenu,
_('Activities'))
menu.append(activities_menu)
- self._buddies_submenu = gtk.Menu()
+ self._buddies_submenu = Gtk.Menu()
buddies_menu = MenuBuilder.make_sub_menu(self._buddies_submenu,
_('Buddies'))
menu.append(buddies_menu)
diff --git a/gnome_plugins/plugin.py b/gnome_plugins/plugin.py
index 590c9bc..903be9f 100644
--- a/gnome_plugins/plugin.py
+++ b/gnome_plugins/plugin.py
@@ -20,12 +20,11 @@
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
#THE SOFTWARE.
-import gobject
+from util.gtkcompat import GObject
-
-class Plugin(gobject.GObject):
+class Plugin(GObject.GObject):
def __init__(self):
- gobject.GObject.__init__(self)
+ GObject.GObject.__init__(self)
def get_menu(self):
raise RuntimeError("You need to define get__menu for your plugin.")
diff --git a/gnome_plugins/uploader_plugin.py b/gnome_plugins/uploader_plugin.py
index 06224fa..b156f71 100644
--- a/gnome_plugins/uploader_plugin.py
+++ b/gnome_plugins/uploader_plugin.py
@@ -32,7 +32,7 @@ except ImportError, e:
_UPLOAD_AVAILABLE = False
import os
-import gtk
+from util.gtkcompat import Gtk
from plugin import Plugin
from util.menubuilder import MenuBuilder
@@ -60,7 +60,7 @@ class Uploader_plugin(Plugin):
self.tw = turtleart_window
def get_menu(self):
- menu = gtk.Menu()
+ menu = Gtk.Menu()
MenuBuilder.make_menu_item(menu, _('Upload to Web'),
self.do_upload_to_web)
upload_menu = MenuBuilder.make_sub_menu(menu, _('Upload'))
@@ -74,32 +74,32 @@ class Uploader_plugin(Plugin):
return
self.uploading = False
- self.pop_up = gtk.Window()
+ self.pop_up = Gtk.Window()
self.pop_up.set_default_size(600, 400)
self.pop_up.connect('delete_event', self._stop_uploading)
- table = gtk.Table(8, 1, False)
+ table = Gtk.Table(8, 1, False)
self.pop_up.add(table)
- login_label = gtk.Label(_('You must have an account at \
+ login_label = Gtk.Label(label=_('You must have an account at \
http://turtleartsite.sugarlabs.org to upload your project.'))
table.attach(login_label, 0, 1, 0, 1)
- self.login_message = gtk.Label('')
+ self.login_message = Gtk.Label(label='')
table.attach(self.login_message, 0, 1, 1, 2)
- self.Hbox1 = gtk.HBox()
+ self.Hbox1 = Gtk.HBox()
table.attach(self.Hbox1, 0, 1, 2, 3, xpadding=5, ypadding=3)
- self.username_entry = gtk.Entry()
- username_label = gtk.Label(_('Username:') + ' ')
+ self.username_entry = Gtk.Entry()
+ username_label = Gtk.Label(label=_('Username:') + ' ')
username_label.set_size_request(150, 25)
username_label.set_alignment(1.0, 0.5)
self.username_entry.set_size_request(450, 25)
self.Hbox1.add(username_label)
self.Hbox1.add(self.username_entry)
- self.Hbox2 = gtk.HBox()
+ self.Hbox2 = Gtk.HBox()
table.attach(self.Hbox2, 0, 1, 3, 4, xpadding=5, ypadding=3)
- self.password_entry = gtk.Entry()
- password_label = gtk.Label(_('Password:') + ' ')
+ self.password_entry = Gtk.Entry()
+ password_label = Gtk.Label(label=_('Password:') + ' ')
self.password_entry.set_visibility(False)
password_label.set_size_request(150, 25)
password_label.set_alignment(1.0, 0.5)
@@ -107,34 +107,34 @@ http://turtleartsite.sugarlabs.org to upload your project.'))
self.Hbox2.add(password_label)
self.Hbox2.add(self.password_entry)
- self.Hbox3 = gtk.HBox()
+ self.Hbox3 = Gtk.HBox()
table.attach(self.Hbox3, 0, 1, 4, 5, xpadding=5, ypadding=3)
- self.title_entry = gtk.Entry()
- title_label = gtk.Label(_('Title:') + ' ')
+ self.title_entry = Gtk.Entry()
+ title_label = Gtk.Label(label=_('Title:') + ' ')
title_label.set_size_request(150, 25)
title_label.set_alignment(1.0, 0.5)
self.title_entry.set_size_request(450, 25)
self.Hbox3.add(title_label)
self.Hbox3.add(self.title_entry)
- self.Hbox4 = gtk.HBox()
+ self.Hbox4 = Gtk.HBox()
table.attach(self.Hbox4, 0, 1, 5, 6, xpadding=5, ypadding=3)
- self.description_entry = gtk.TextView()
- description_label = gtk.Label(_('Description:') + ' ')
+ self.description_entry = Gtk.TextView()
+ description_label = Gtk.Label(label=_('Description:') + ' ')
description_label.set_size_request(150, 25)
description_label.set_alignment(1.0, 0.5)
- self.description_entry.set_wrap_mode(gtk.WRAP_WORD)
+ self.description_entry.set_wrap_mode(Gtk.WrapMode.WORD)
self.description_entry.set_size_request(450, 50)
self.Hbox4.add(description_label)
self.Hbox4.add(self.description_entry)
- self.Hbox5 = gtk.HBox()
+ self.Hbox5 = Gtk.HBox()
table.attach(self.Hbox5, 0, 1, 6, 7, xpadding=5, ypadding=3)
- self.submit_button = gtk.Button(_('Submit to Web'))
+ self.submit_button = Gtk.Button(_('Submit to Web'))
self.submit_button.set_size_request(300, 25)
self.submit_button.connect('pressed', self._do_remote_logon)
self.Hbox5.add(self.submit_button)
- self.cancel_button = gtk.Button(_('Cancel'))
+ self.cancel_button = Gtk.Button(_('Cancel'))
self.cancel_button.set_size_request(300, 25)
self.cancel_button.connect('pressed', self._stop_uploading)
self.Hbox5.add(self.cancel_button)
@@ -204,6 +204,6 @@ if __name__ == "__main__":
if u.enabled():
print "Uploader is enabled... trying to upload"
u.do_upload_to_web()
- gtk.main()
+ Gtk.main()
else:
print "Uploader is not enabled... exiting"
diff --git a/plugins/camera_sensor/camera_sensor.py b/plugins/camera_sensor/camera_sensor.py
index 5bd21ee..927f031 100644
--- a/plugins/camera_sensor/camera_sensor.py
+++ b/plugins/camera_sensor/camera_sensor.py
@@ -16,7 +16,7 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
import gst
-import gtk
+from util.gtkcompat import Gtk
from fcntl import ioctl
import os
from gettext import gettext as _
@@ -236,6 +236,6 @@ is pushed to the stack'),
self._video_capture_device.close()
self._camera.save_camera_input_to_file()
self._camera.stop_camera_input()
- return gtk.gdk.pixbuf_new_from_file(self._imagepath)
+ return GdkPixbuf.Pixbuf.new_from_file(self._imagepath)
else:
return None
diff --git a/plugins/plugin.py b/plugins/plugin.py
index 3065129..bdba7aa 100644
--- a/plugins/plugin.py
+++ b/plugins/plugin.py
@@ -16,12 +16,11 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-import gobject
+from util.gtkcompat import GObject
-
-class Plugin(gobject.GObject):
+class Plugin(GObject.GObject):
def __init__(self):
- gobject.GObject.__init__(self)
+ GObject.GObject.__init__(self)
def setup(self):
""" Setup is called once, when the Turtle Window is created. """
diff --git a/plugins/rfid/device.py b/plugins/rfid/device.py
index 04a82b2..962a20f 100644
--- a/plugins/rfid/device.py
+++ b/plugins/rfid/device.py
@@ -1,6 +1,6 @@
-import gobject
+from util.gtkcompat import GObject
-class RFIDDevice(gobject.GObject):
+class RFIDDevice(GObject.GObject):
"""
Ancestor class for every supported device.
The main class for the device driver must be called "RFIDReader".
@@ -10,10 +10,10 @@ class RFIDDevice(gobject.GObject):
# signal "disconnected" has to be emitted when the device is
# unplugged or an error has been detected.
__gsignals__ = {
- 'tag-read': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
- (gobject.TYPE_STRING,)),
- 'disconnected': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
- (gobject.TYPE_STRING,))
+ 'tag-read': (GObject.SignalFlags.RUN_LAST, GObject.TYPE_NONE,
+ (GObject.TYPE_STRING,)),
+ 'disconnected': (GObject.SignalFlags.RUN_LAST, GObject.TYPE_NONE,
+ (GObject.TYPE_STRING,))
}
def __init__(self):
"""
diff --git a/plugins/rfid/rfidrweusb.py b/plugins/rfid/rfidrweusb.py
index bd12631..6855754 100644
--- a/plugins/rfid/rfidrweusb.py
+++ b/plugins/rfid/rfidrweusb.py
@@ -2,7 +2,7 @@ from device import RFIDDevice
from serial import Serial
import dbus
from dbus.mainloop.glib import DBusGMainLoop
-import gobject
+from util.gtkcompat import GObject
from time import sleep
import utils
@@ -81,8 +81,8 @@ class RFIDReader(RFIDDevice):
self.ser = Serial(self.device, 9600, timeout=0.1)
self._connected = True
if self._select_animal_tag:
- #gobject.idle_add(self._loop)
- gobject.timeout_add(1000, self._loop)
+ #GObject.idle_add(self._loop)
+ GObject.timeout_add(1000, self._loop)
retval = True
except:
self._connected = False
@@ -196,5 +196,5 @@ class RFIDReader(RFIDDevice):
# else:
# print "Not connected"
#
-# mloop = gobject.MainLoop()
+# mloop = GObject.MainLoop()
# mloop.run()
diff --git a/plugins/rfid/tis2000.py b/plugins/rfid/tis2000.py
index 91d1991..8f6f925 100644
--- a/plugins/rfid/tis2000.py
+++ b/plugins/rfid/tis2000.py
@@ -2,7 +2,7 @@ from device import RFIDDevice
from serial import Serial
import dbus
from dbus.mainloop.glib import DBusGMainLoop
-import gobject
+from util.gtkcompat import GObject
import re
from time import sleep
@@ -71,7 +71,7 @@ class RFIDReader(RFIDDevice):
self._escape()
self._clear()
self._format()
- gobject.idle_add(self._loop)
+ GObject.idle_add(self._loop)
retval = True
except:
self._connected = False
@@ -248,5 +248,5 @@ class RFIDReader(RFIDDevice):
# else:
# print "Not connected"
#
-# mloop = gobject.MainLoop()
+# mloop = GObject.MainLoop()
# mloop.run()
diff --git a/plugins/turtle_blocks_extras/turtle_blocks_extras.py b/plugins/turtle_blocks_extras/turtle_blocks_extras.py
index c3f00b1..8013ea6 100644
--- a/plugins/turtle_blocks_extras/turtle_blocks_extras.py
+++ b/plugins/turtle_blocks_extras/turtle_blocks_extras.py
@@ -15,7 +15,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-import gtk
+from util.gtkcompat import Gtk
from time import time
import os.path
from gettext import gettext as _
@@ -994,7 +994,7 @@ bullets'))
return
pixbuf = None
try:
- pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(self.tw.lc.filepath,
+ pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(self.tw.lc.filepath,
scale, scale)
except:
self.tw.showlabel('nojournal', self.tw.lc.filepath)
diff --git a/pysamples/grecord.py b/pysamples/grecord.py
index 84b1a5c..94599ee 100644
--- a/pysamples/grecord.py
+++ b/pysamples/grecord.py
@@ -15,11 +15,10 @@ def myblock(tw, arg):
import os
import time
- import gtk
+ from util.gtkcompat import Gtk, GObject
import gst
- import gobject
- gobject.threads_init()
+ GObject.threads_init()
from TurtleArt.tautils import get_path
from TurtleArt.tagplay import play_audio_from_file
@@ -139,7 +138,7 @@ def myblock(tw, arg):
audioBus.add_signal_watch()
self._audio_transcode_handler = audioBus.connect(
'message', self._onMuxedAudioMessageCb, audioline)
- self._transcode_id = gobject.timeout_add(
+ self._transcode_id = GObject.timeout_add(
200, self._transcodeUpdateCb, audioline)
audioline.set_state(gst.STATE_PLAYING)
@@ -170,9 +169,9 @@ def myblock(tw, arg):
if message.type != gst.MESSAGE_EOS:
return True
- gobject.source_remove(self._audio_transcode_handler)
+ GObject.source_remove(self._audio_transcode_handler)
self._audio_transcode_handler = None
- gobject.source_remove(self._transcode_id)
+ GObject.source_remove(self._transcode_id)
self._transcode_id = None
pipe.set_state(gst.STATE_NULL)
pipe.get_bus().remove_signal_watch()
diff --git a/turtleart.py b/turtleart.py
index ca9153a..1980e1d 100755
--- a/turtleart.py
+++ b/turtleart.py
@@ -21,9 +21,7 @@
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
#THE SOFTWARE.
-import pygtk
-pygtk.require('2.0')
-import gtk
+from util.gtkcompat import Gtk, Gdk, GdkPixbuf
import getopt
import sys
@@ -83,9 +81,9 @@ class TurtleMain():
self._plugins = []
if self.output_png:
- pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8,
- gtk.gdk.screen_width(),
- gtk.gdk.screen_height())
+ pixbuf = GdkPixbuf.Pixbuf(GdkPixbuf.Colorspace.RGB, False, 8,
+ Gdk.Screen.width(),
+ Gdk.Screen.height())
self.canvas, mask = pixbuf.render_pixmap_and_mask()
self._build_window()
self._draw_and_quit()
@@ -166,7 +164,7 @@ class TurtleMain():
self.tw.load_start(self.ta_file)
self.tw.lc.trace = 0
self.tw.run_button(0)
- gtk.main()
+ Gtk.main()
def _draw_and_quit(self):
''' Non-interactive mode: run the project, save it to a file
@@ -265,7 +263,7 @@ class TurtleMain():
def _setup_gtk(self):
''' Set up a scrolled window in which to run Turtle Blocks. '''
- win = gtk.Window(gtk.WINDOW_TOPLEVEL)
+ win = Gtk.Window()
win.set_default_size(self.width, self.height)
win.move(self.x, self.y)
win.maximize()
@@ -275,7 +273,7 @@ class TurtleMain():
self._ICON_SUBPATH))
win.connect('delete_event', self._quit_ta)
- vbox = gtk.VBox(False, 0)
+ vbox = Gtk.VBox.new(False, 0)
win.add(vbox)
vbox.show()
@@ -283,16 +281,16 @@ class TurtleMain():
vbox.pack_start(menu_bar, False, False, 2)
menu_bar.show()
- sw = gtk.ScrolledWindow()
- sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ sw = Gtk.ScrolledWindow()
+ sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
sw.show()
- canvas = gtk.DrawingArea()
- width = gtk.gdk.screen_width() * 2
- height = gtk.gdk.screen_height() * 2
+ canvas = Gtk.DrawingArea()
+ width = Gdk.Screen.width() * 2
+ height = Gdk.Screen.height() * 2
canvas.set_size_request(width, height)
sw.add_with_viewport(canvas)
canvas.show()
- vbox.pack_end(sw, True, True)
+ vbox.pack_end(sw, True, True, 0)
win.show_all()
self.win = win
@@ -300,7 +298,7 @@ class TurtleMain():
def _get_menu_bar(self):
''' Instead of Sugar toolbars, use GNOME menus. '''
- menu = gtk.Menu()
+ menu = Gtk.Menu()
MenuBuilder.make_menu_item(menu, _('New'), self._do_new_cb)
MenuBuilder.make_menu_item(menu, _('Open'), self._do_open_cb)
MenuBuilder.make_menu_item(menu, _('Save'), self._do_save_cb)
@@ -314,7 +312,7 @@ class TurtleMain():
MenuBuilder.make_menu_item(menu, _('Quit'), self.destroy)
activity_menu = MenuBuilder.make_sub_menu(menu, _('File'))
- menu = gtk.Menu()
+ menu = Gtk.Menu()
MenuBuilder.make_menu_item(menu, _('Cartesian coordinates'),
self._do_cartesian_cb)
MenuBuilder.make_menu_item(menu, _('Polar coordinates'),
@@ -329,12 +327,12 @@ class TurtleMain():
self._do_resize_cb, -1)
view_menu = MenuBuilder.make_sub_menu(menu, _('View'))
- menu = gtk.Menu()
+ menu = Gtk.Menu()
MenuBuilder.make_menu_item(menu, _('Copy'), self._do_copy_cb)
MenuBuilder.make_menu_item(menu, _('Paste'), self._do_paste_cb)
edit_menu = MenuBuilder.make_sub_menu(menu, _('Edit'))
- menu = gtk.Menu()
+ menu = Gtk.Menu()
MenuBuilder.make_menu_item(menu, _('Show palette'),
self._do_palette_cb)
MenuBuilder.make_menu_item(menu, _('Hide palette'),
@@ -343,7 +341,7 @@ class TurtleMain():
self._do_hideshow_cb)
tool_menu = MenuBuilder.make_sub_menu(menu, _('Tools'))
- menu = gtk.Menu()
+ menu = Gtk.Menu()
MenuBuilder.make_menu_item(menu, _('Clean'), self._do_eraser_cb)
MenuBuilder.make_menu_item(menu, _('Run'), self._do_run_cb)
MenuBuilder.make_menu_item(menu, _('Step'), self._do_step_cb)
@@ -351,7 +349,7 @@ class TurtleMain():
MenuBuilder.make_menu_item(menu, _('Stop'), self._do_stop_cb)
turtle_menu = MenuBuilder.make_sub_menu(menu, _('Turtle'))
- menu_bar = gtk.MenuBar()
+ menu_bar = Gtk.MenuBar()
menu_bar.append(activity_menu)
menu_bar.append(edit_menu)
menu_bar.append(view_menu)
@@ -372,12 +370,12 @@ class TurtleMain():
else:
if self.tw.project_has_changed():
self._show_save_dialog(False)
- gtk.main_quit()
+ Gtk.main_quit()
def _show_save_dialog(self, new_project=True):
''' Dialog for save project '''
- dlg = gtk.MessageDialog(parent=None, type=gtk.MESSAGE_INFO,
- buttons=gtk.BUTTONS_OK_CANCEL,
+ dlg = Gtk.MessageDialog(parent=None, type=Gtk.MessageType.INFO,
+ buttons=Gtk.ButtonsType.OK_CANCEL,
message_format=_(
'You have unsaved work. Would you like to save before quitting?'))
dlg.set_title(_('Save project?'))
@@ -385,7 +383,7 @@ class TurtleMain():
resp = dlg.run()
dlg.destroy()
- if resp == gtk.RESPONSE_OK:
+ if resp == Gtk.ResponseType.OK:
if new_project:
self._save_as()
else:
@@ -545,7 +543,7 @@ class TurtleMain():
def _do_copy_cb(self, button):
''' Callback for copy button. '''
- clipBoard = gtk.Clipboard()
+ clipBoard = Gtk.Clipboard()
data = self.tw.assemble_data_to_save(False, False)
if data is not []:
text = data_to_string(data)
@@ -553,7 +551,7 @@ class TurtleMain():
def _do_paste_cb(self, button):
''' Callback for paste button. '''
- clipBoard = gtk.Clipboard()
+ clipBoard = Gtk.Clipboard()
text = clipBoard.wait_for_text()
if text is not None:
if self.tw.selected_blk is not None and\
@@ -576,7 +574,7 @@ class TurtleMain():
def destroy(self, event, data=None):
''' Callback for destroy event. '''
- gtk.main_quit()
+ Gtk.main_quit()
def nick_changed(self, nick):
''' TODO: Rename default turtle in dictionary '''
diff --git a/util/configfile.py b/util/configfile.py
index adabb34..8f8e755 100644
--- a/util/configfile.py
+++ b/util/configfile.py
@@ -16,21 +16,20 @@
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
-import gobject
+from util.gtkcompat import GObject
-
-class ConfigFile(gobject.GObject):
+class ConfigFile(GObject.GObject):
"""Load/save a simple (key = value) config file"""
__gsignals__ = {
- 'configuration-loaded': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'configuration-loaded': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
()),
- 'configuration-saved': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'configuration-saved': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
()),
}
def __init__(self, config_file_path, valid_keys={}):
- gobject.GObject.__init__(self)
+ GObject.GObject.__init__(self)
self._config_file_path = config_file_path
self._valid_keys = valid_keys
diff --git a/util/configwizard.py b/util/configwizard.py
index 6c66bd1..144f793 100644
--- a/util/configwizard.py
+++ b/util/configwizard.py
@@ -16,8 +16,7 @@
# Boston, MA 02111-1307, USA.
from configfile import ConfigFile
-import gtk
-
+from util.gtkcompat import Gtk
class ConfigWizard():
"""Simple configuration wizard window."""
@@ -54,10 +53,10 @@ class ConfigWizard():
if self._config_file_obj is None:
raise RuntimeError("I need the run time obj")
- self._config_popup = gtk.Window()
+ self._config_popup = Gtk.Window()
self._config_popup.set_default_size(200, 200)
self._config_popup.connect('delete_event', self._close_config_cb)
- table = gtk.Table(12, 1, True)
+ table = Gtk.Table(12, 1, True)
self._config_popup.add(table)
row = 1
@@ -66,12 +65,12 @@ class ConfigWizard():
table.attach(hbox, 0, 1, row, row + 1, xpadding=5, ypadding=2)
row = row + 1
- hbox = gtk.HBox()
- save_button = gtk.Button('Save')
+ hbox = Gtk.HBox()
+ save_button = Gtk.Button('Save')
save_button.set_size_request(50, 15)
save_button.connect('pressed', self._save_config_cb)
hbox.add(save_button)
- cancel_button = gtk.Button('Cancel')
+ cancel_button = Gtk.Button('Cancel')
cancel_button.set_size_request(50, 15)
cancel_button.connect('pressed', self._close_config_cb)
hbox.add(cancel_button)
@@ -83,8 +82,8 @@ class ConfigWizard():
try:
self._do_save_config()
except Exception, e:
- w = gtk.Window()
- l = gtk.Label(e.message)
+ w = Gtk.Window()
+ l = Gtk.Label(label=e.message)
w.add(l)
w.show_all()
finally:
@@ -94,9 +93,9 @@ class ConfigWizard():
for i in self._config_items:
param_name = i["item_name"]
v = self._config_entries[param_name]
- if v.__class__ is gtk.Entry:
+ if v.__class__ is Gtk.Entry:
value = v.get_text()
- elif v.__class__ is gtk.CheckButton:
+ elif v.__class__ is Gtk.CheckButton:
value = v.get_active()
else:
raise RuntimeError("Don't recognize the class %s" % type(v))
@@ -111,20 +110,20 @@ class ConfigWizard():
param_name = opts["item_name"]
with_value = opts["item_with_value"] if "item_with_value" in opts \
else True
- hbox = gtk.HBox()
+ hbox = Gtk.HBox()
if opts["item_type"] == "text":
- entry = gtk.Entry()
+ entry = Gtk.Entry()
entry.set_size_request(150, 25)
if with_value:
value = self._config_file_obj.get(param_name, True)
entry.set_text(str(value))
elif opts["item_type"] == "boolean":
- entry = gtk.CheckButton()
+ entry = Gtk.CheckButton()
if with_value:
value = self._config_file_obj.get(param_name, True)
entry.set_active(value)
self._config_entries[param_name] = entry
- label = gtk.Label(opts["item_label"] + ': ')
+ label = Gtk.Label(label=opts["item_label"] + ': ')
label.set_alignment(1.0, 0.5)
label.set_size_request(100, 25)
hbox.add(label)
@@ -215,4 +214,4 @@ def test_wizard_from_config_file_path(test_config_file):
if __name__ == "__main__":
#test_wizard_from_config_file_obj("/tmp/configwizard.test.0001")
test_wizard_from_config_file_path("/tmp/configwizard.test.0002")
- gtk.main()
+ Gtk.main()
diff --git a/util/gtkcompat.py b/util/gtkcompat.py
new file mode 100644
index 0000000..c60ea73
--- /dev/null
+++ b/util/gtkcompat.py
@@ -0,0 +1,132 @@
+# Import Gtk and GObject, put include crazy thunks so that old
+# code using pygtk and Gtk 2.0 code continues to run.
+FORCE_GTK2 = True
+
+try:
+ if FORCE_GTK2: raise ValueError("forcing gtk2")
+ import gi
+ gi.require_version('Gtk', '3.0')
+ from gi.repository import Gtk, Gdk, GObject, GdkPixbuf
+ from gi.repository import Pango
+ Rectangle = lambda x, y, w, h: (x,y,w,h)
+ GObject.TYPE_NONE = None # compatibility hack
+ class GConf:
+ pass # XXX no more GConf, sigh
+except ValueError, ImportError:
+ # fall back to old pygtk, with various evil hacks
+ import pygtk
+ pygtk.require('2.0')
+ import gtk as Gtk
+ import gobject as GObject
+ import gconf
+ import pango as Pango
+ Gdk = Gtk.gdk
+ Rectangle = Gdk.Rectangle
+
+ class GConf:
+ class Client:
+ get_default = gconf.client_get_default
+
+ class GObjectSignalFlags:
+ RUN_FIRST = GObject.SIGNAL_RUN_FIRST
+ GObject.SignalFlags = GObjectSignalFlags
+
+ class GdkEventMask:
+ EXPOSURE_MASK = Gdk.EXPOSURE_MASK
+ BUTTON_PRESS_MASK = Gdk.BUTTON_PRESS_MASK
+ BUTTON_RELEASE_MASK = Gdk.BUTTON_RELEASE_MASK
+ POINTER_MOTION_MASK = Gdk.POINTER_MOTION_MASK
+ KEY_PRESS_MASK = Gdk.KEY_PRESS_MASK
+ CONTROL_MASK = Gdk.CONTROL_MASK
+ VISIBILITY_NOTIFY_MASK = Gdk.VISIBILITY_NOTIFY_MASK
+ Gdk.EventMask = GdkEventMask
+
+ class GdkModifierType:
+ MOD1_MASK = Gdk.MOD1_MASK
+ Gdk.ModifierType = GdkModifierType
+
+ class GdkPixbuf:
+ class InterpType:
+ NEAREST = Gdk.INTERP_NEAREST
+ class Colorspace:
+ RGB = Gdk.COLORSPACE_RGB
+ class Pixbuf:
+ # XXX not the same as Gdk.Pixbuf, sadly. don't do instanceof!
+ new_from_file_at_size = Gdk.pixbuf_new_from_file_at_size
+ new_from_file = Gdk.pixbuf_new_from_file
+ loader_new_with_mime_type = Gdk.pixbuf_loader_new_with_mime_type
+ PixbufLoader = Gdk.PixbufLoader
+
+ class GdkScreen:
+ width = Gdk.screen_width
+ height = Gdk.screen_height
+ Gdk.Screen = GdkScreen
+
+ class GdkVisibilityState:
+ FULLY_OBSCURED = Gdk.VISIBILITY_FULLY_OBSCURED
+ Gdk.VisibilityState = GdkVisibilityState
+
+ class GdkWindowTypeHint:
+ NORMAL = Gdk.WINDOW_TYPE_HINT_NORMAL
+ Gdk.WindowTypeHint = GdkWindowTypeHint
+
+ class GtkFileChooserAction:
+ OPEN = Gtk.FILE_CHOOSER_ACTION_OPEN
+ SAVE = Gtk.FILE_CHOOSER_ACTION_SAVE
+ Gtk.FileChooserAction = GtkFileChooserAction
+
+ class GtkResponseType:
+ OK = Gtk.RESPONSE_OK
+ CANCEL = Gtk.RESPONSE_CANCEL
+ ACCEPT = Gtk.RESPONSE_ACCEPT
+ Gtk.ResponseType = GtkResponseType
+
+ class GtkButtonsType:
+ OK_CANCEL = Gtk.BUTTONS_OK_CANCEL
+ Gtk.ButtonsType = GtkButtonsType
+
+ class GtkMessageType:
+ INFO = Gtk.MESSAGE_INFO
+ Gtk.MessageType = GtkMessageType
+
+ class GtkDialogFlags:
+ MODAL = Gtk.DIALOG_MODAL
+ DESTROY_WITH_PARENT = Gtk.DIALOG_DESTROY_WITH_PARENT
+ Gtk.DialogFlags = GtkDialogFlags
+
+ class GtkIconTheme:
+ get_default = Gtk.icon_theme_get_default
+ Gtk.IconTheme = GtkIconTheme
+
+ class GtkPolicyType:
+ AUTOMATIC = Gtk.POLICY_AUTOMATIC
+ Gtk.PolicyType = GtkPolicyType
+
+ class GtkWrapMode:
+ WORD = Gtk.WRAP_WORD
+ Gtk.WrapMode = GtkWrapMode
+
+ class GtkWindowType:
+ TOPLEVEL = Gtk.WINDOW_TOPLEVEL
+ Gtk.WindowType = GtkWindowType
+
+ # hack around named parameter for Gtk.Label
+ GtkLabel = Gtk.Label
+ def GtkLabel2(label=''):
+ return GtkLabel(label)
+ Gtk.Label = GtkLabel2
+
+ # hack around named parameters
+ GtkVBox1 = Gtk.VBox
+ class GtkVBox2:
+ @staticmethod
+ def new(homogenous, spacing):
+ return GtkVBox1(homogenous, spacing)
+ Gtk.VBox = GtkVBox2
+
+ GtkMenuItem1 = Gtk.MenuItem
+ class GtkMenuItem2:
+ @staticmethod
+ def new_with_label(label):
+ return GtkMenuItem1(label)
+ Gtk.MenuItem = GtkMenuItem2
diff --git a/util/menubuilder.py b/util/menubuilder.py
index 4ee4550..7df065d 100644
--- a/util/menubuilder.py
+++ b/util/menubuilder.py
@@ -15,14 +15,13 @@
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
-import gtk
-
+from util.gtkcompat import Gtk
class MenuBuilder():
@classmethod
def make_sub_menu(cls, menu, name):
""" add a new submenu to the toolbar """
- sub_menu = gtk.MenuItem(name)
+ sub_menu = Gtk.MenuItem.new_with_label(name)
sub_menu.show()
sub_menu.set_submenu(menu)
return sub_menu
@@ -30,7 +29,7 @@ class MenuBuilder():
@classmethod
def make_menu_item(cls, menu, tooltip, callback, arg=None):
""" add a new item to the submenu """
- menu_items = gtk.MenuItem(tooltip)
+ menu_items = Gtk.MenuItem.new_with_label(tooltip)
menu.append(menu_items)
if arg is None:
menu_items.connect('activate', callback)