本文整理汇总了Python中xpra.gtk_common.gobject_compat.is_gtk3函数的典型用法代码示例。如果您正苦于以下问题:Python is_gtk3函数的具体用法?Python is_gtk3怎么用?Python is_gtk3使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了is_gtk3函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: _do_paint_rgb
def _do_paint_rgb(self, cairo_format, has_alpha, img_data, x, y, width, height, rowstride, options):
""" must be called from UI thread """
log("cairo._do_paint_rgb(%s, %s, %s bytes,%s,%s,%s,%s,%s,%s)", cairo_format, has_alpha, len(img_data), x, y, width, height, rowstride, options)
rgb_format = options.strget("rgb_format", "RGB")
if _memoryview and isinstance(img_data, _memoryview):
#Pixbuf cannot use the memoryview directly:
img_data = img_data.tobytes()
#"cairo.ImageSurface.create_for_data" is not implemented in GTK3! ARGH!
# http://cairographics.org/documentation/pycairo/3/reference/surfaces.html#cairo.ImageSurface.create_for_data
# "Not yet available in Python 3"
#
#It is available in the cffi cairo bindings, which can be used instead of pycairo
# but then we can't use it from the draw callbacks:
# https://mail.gnome.org/archives/python-hackers-list/2011-December/msg00004.html
# "PyGObject just lacks the glue code that allows it to pass the statically-wrapped
# cairo.Pattern to introspected methods"
if not is_gtk3() and rgb_format in ("ARGB", "XRGB"):
#the pixel format is also what cairo expects
#maybe we should also check that the stride is acceptable for cairo?
#cairo_stride = cairo.ImageSurface.format_stride_for_width(cairo_format, width)
#log("cairo_stride=%s, stride=%s", cairo_stride, rowstride)
img_surface = cairo.ImageSurface.create_for_data(img_data, cairo_format, width, height, rowstride)
return self.cairo_paint_surface(img_surface, x, y)
if not is_gtk3() and rgb_format in ("RGBA", "RGBX"):
#with GTK2, we can use a pixbuf from RGB(A) pixels
if rgb_format=="RGBA":
#we have to unpremultiply for pixbuf!
img_data = self.unpremultiply(img_data)
pixbuf = pixbuf_new_from_data(img_data, COLORSPACE_RGB, has_alpha, 8, width, height, rowstride)
return self.cairo_paint_pixbuf(pixbuf, x, y)
#PIL fallback
PIL = get_codec("PIL")
if has_alpha:
oformat = "RGBA"
else:
oformat = "RGB"
img = PIL.Image.frombuffer(oformat, (width,height), img_data, "raw", rgb_format, rowstride, 1)
#This is insane, the code below should work, but it doesn't:
# img_data = bytearray(img.tostring('raw', oformat, 0, 1))
# pixbuf = pixbuf_new_from_data(img_data, COLORSPACE_RGB, True, 8, width, height, rowstride)
# success = self.cairo_paint_pixbuf(pixbuf, x, y)
#So we still rountrip via PNG:
png = BytesIOClass()
img.save(png, format="PNG")
reader = BytesIOClass(png.getvalue())
png.close()
img = cairo.ImageSurface.create_from_png(reader)
return self.cairo_paint_surface(img, x, y)
开发者ID:svn2github,项目名称:Xpra,代码行数:51,代码来源:cairo_backing.py
示例2: get_preferred_size
def get_preferred_size(widget):
if is_gtk3():
#ignore "min", we only care about "natural":
_, w = widget.get_preferred_width()
_, h = widget.get_preferred_height()
return w, h
return widget.size_request()
开发者ID:svn2github,项目名称:Xpra,代码行数:7,代码来源:gtk_util.py
示例3: get_pixbuf_from_data
def get_pixbuf_from_data(rgb_data, has_alpha, w, h, rowstride):
if is_gtk3():
data = array.array('B', strtobytes(rgb_data))
return GdkPixbuf.Pixbuf.new_from_data(data, GdkPixbuf.Colorspace.RGB,
True, 8, w, h, rowstride,
None, None)
return gdk.pixbuf_new_from_data(rgb_data, gdk.COLORSPACE_RGB, has_alpha, 8, w, h, rowstride)
开发者ID:svn2github,项目名称:Xpra,代码行数:7,代码来源:gtk_util.py
示例4: add_close_accel
def add_close_accel(window, callback):
if is_gtk3():
return #TODO: implement accel for gtk3
accel_group = gtk.AccelGroup()
accel_group.connect_group(ord('w'), gdk.CONTROL_MASK, gtk.ACCEL_LOCKED, callback)
window.add_accel_group(accel_group)
accel_group = gtk.AccelGroup()
key, mod = gtk.accelerator_parse('<Alt>F4')
accel_group.connect_group(key, mod, gtk.ACCEL_LOCKED, callback)
escape_key, modifier = gtk.accelerator_parse('Escape')
accel_group.connect_group(escape_key, modifier, gtk.ACCEL_LOCKED | gtk.ACCEL_VISIBLE, callback)
window.add_accel_group(accel_group)
开发者ID:svn2github,项目名称:Xpra,代码行数:12,代码来源:gtk_util.py
示例5: owner_changed
def owner_changed(self, cb, event):
r = {}
if not is_gtk3():
r = {gtk.gdk.OWNER_CHANGE_CLOSE : "close",
gtk.gdk.OWNER_CHANGE_DESTROY : "destroy",
gtk.gdk.OWNER_CHANGE_NEW_OWNER : "new owner"}
owner = self.clipboard.get_owner()
#print("xid=%s, owner=%s" % (self.value_entry.get_window().xid, event.owner))
weownit = (owner is not None)
if weownit:
owner_info="(us)"
else:
owner_info = hex(event.owner)
self.log("Owner changed, reason: %s, new owner=%s" % (
r.get(event.reason, event.reason), owner_info))
开发者ID:svn2github,项目名称:Xpra,代码行数:15,代码来源:gtk_view_clipboard.py
示例6: add_close_accel
def add_close_accel(window, callback):
if is_gtk3():
def connect(ag, *args):
ag.connect(*args)
else:
def connect(ag, *args):
ag.connect_group(*args)
accel_group = gtk.AccelGroup()
key, mod = gtk.accelerator_parse('<control>F4')
connect(accel_group, key, mod, ACCEL_LOCKED, callback)
window.add_accel_group(accel_group)
accel_group = gtk.AccelGroup()
key, mod = gtk.accelerator_parse('<Alt>F4')
connect(accel_group, key, mod, ACCEL_LOCKED, callback)
escape_key, modifier = gtk.accelerator_parse('Escape')
connect(accel_group, escape_key, modifier, ACCEL_LOCKED | ACCEL_VISIBLE, callback)
window.add_accel_group(accel_group)
开发者ID:svn2github,项目名称:Xpra,代码行数:17,代码来源:gtk_util.py
示例7: about
def about(on_close=None):
global about_dialog
if about_dialog:
about_dialog.show()
about_dialog.present()
return
from xpra.platform.paths import get_icon
xpra_icon = get_icon("xpra.png")
dialog = gtk.AboutDialog()
if not is_gtk3():
def on_website_hook(dialog, web, *args):
''' called when the website item is selected '''
webbrowser.open(SITE_URL)
def on_email_hook(dialog, mail, *args):
webbrowser.open("mailto://[email protected]")
gtk.about_dialog_set_url_hook(on_website_hook)
gtk.about_dialog_set_email_hook(on_email_hook)
if xpra_icon:
dialog.set_icon(xpra_icon)
dialog.set_name("Xpra")
dialog.set_version(__version__)
dialog.set_authors(('Antoine Martin <[email protected]>',
'Nathaniel Smith <[email protected]>',
'Serviware - Arthur Huillet <[email protected]>'))
_license = load_license()
dialog.set_license(_license or "Your installation may be corrupted,"
+ " the license text for GPL version 2 could not be found,"
+ "\nplease refer to:\nhttp://www.gnu.org/licenses/gpl-2.0.txt")
dialog.set_comments("\n".join(get_build_info()))
dialog.set_website(SITE_URL)
dialog.set_website_label(SITE_DOMAIN)
if xpra_icon:
dialog.set_logo(xpra_icon)
if hasattr(dialog, "set_program_name"):
dialog.set_program_name(APPLICATION_NAME)
def close(*args):
close_about()
#the about function may be called as a widget callback
#so avoid calling the widget as if it was a function!
if on_close and hasattr(on_close, '__call__'):
on_close()
dialog.connect("response", close)
add_close_accel(dialog, close)
about_dialog = dialog
dialog.show()
开发者ID:svn2github,项目名称:Xpra,代码行数:45,代码来源:about.py
示例8: make_client
def make_client(error_cb, opts):
app = None
if not opts.client_toolkit:
from xpra.gtk_common.gobject_compat import import_gobject, is_gtk3
import_gobject()
if is_gtk3():
opts.client_toolkit = "gtk3"
else:
opts.client_toolkit = "gtk2"
ct = opts.client_toolkit.lower()
toolkits = {}
try:
import gtk.gdk #@UnusedImport
import xpra.client.gtk2 #@UnusedImport
toolkits["gtk2"] = "xpra.client.gtk2.client"
except Exception, e:
print("cannot load gtk2: %s" % e)
开发者ID:svn2github,项目名称:Xpra,代码行数:18,代码来源:main.py
示例9: do_setup_xprops
def do_setup_xprops(self, *args):
log("do_setup_xprops(%s)", args)
if is_gtk3():
log("x11 root properties and XSETTINGS are not supported yet with GTK3")
return
ROOT_PROPS = ["RESOURCE_MANAGER", "_NET_WORKAREA", "_NET_CURRENT_DESKTOP"]
try:
from xpra.x11.xsettings import XSettingsWatcher
from xpra.x11.xroot_props import XRootPropWatcher
if self._xsettings_watcher is None:
self._xsettings_watcher = XSettingsWatcher()
self._xsettings_watcher.connect("xsettings-changed", self._handle_xsettings_changed)
self._handle_xsettings_changed()
if self._root_props_watcher is None:
self._root_props_watcher = XRootPropWatcher(ROOT_PROPS)
self._root_props_watcher.connect("root-prop-changed", self._handle_root_prop_changed)
#ensure we get the initial value:
self._root_props_watcher.do_notify("RESOURCE_MANAGER")
except ImportError as e:
log.error("failed to load X11 properties/settings bindings: %s - root window properties will not be propagated", e)
开发者ID:svn2github,项目名称:Xpra,代码行数:20,代码来源:gui.py
示例10: get_gtk_version_info
def get_gtk_version_info():
#update props given:
global GTK_VERSION_INFO
def av(k, v):
GTK_VERSION_INFO.setdefault(k, {})["version"] = v
if not GTK_VERSION_INFO:
if hasattr(gtk, "pygtk_version"):
av("pygtk", gtk.pygtk_version)
if hasattr(gtk, "gtk_version"):
#GTK2:
av("gtk", gtk.gtk_version)
elif hasattr(gtk, "_version"):
#GTK3:
av("gtk", gtk._version)
if hasattr(gdk, "__version__"):
#GTK2:
av("gdk", gdk.__version__)
elif hasattr(gdk, "_version"):
#GTK3:
av("gdk", gdk._version)
if is_gtk3():
try:
import gi
av("gi", gi.__version__)
except:
pass
if hasattr(gobject, "pygobject_version"):
av("gobject", gobject.pygobject_version)
elif hasattr(gobject, "_version"):
av("gobject", gobject._version)
if hasattr(cairo, "version"):
av("cairo", cairo.version)
if hasattr(pango, "version_string"):
av("pango", pango.version_string())
try:
import glib
av("glib", glib.glib_version)
av("pyglib", glib.pyglib_version)
except:
pass
return GTK_VERSION_INFO.copy()
开发者ID:svn2github,项目名称:Xpra,代码行数:41,代码来源:gtk_util.py
示例11: grok_modifier_map
def grok_modifier_map(display, meanings):
"""Return an dict mapping modifier names to corresponding X modifier
bitmasks."""
#TODO: needs fixing for GTK3
from xpra.keyboard.mask import MODIFIER_MAP
modifier_map = MODIFIER_MAP.copy()
modifier_map.update({
"scroll": 0,
"num": 0,
"meta": 0,
"super": 0,
"hyper": 0,
"alt": 0,
})
if not meanings:
meanings = DEFAULT_MODIFIER_MEANINGS
(max_keypermod, keycodes) = X11Keyboard.get_modifier_map()
assert len(keycodes) == 8 * max_keypermod
keymap = keymap_get_for_display(display)
for i in range(8):
for j in range(max_keypermod):
keycode = keycodes[i * max_keypermod + j]
if keycode:
entries = keymap.get_entries_for_keycode(keycode)
if entries is None:
# This keycode has no entry in the keymap:
continue
if is_gtk3():
found, _, keyvals = entries
if not found:
continue
else:
#(keyval, _, _, _) in entries
keyvals = [x[0] for x in entries]
for keyval in keyvals:
keyval_name = gdk.keyval_name(keyval)
modifier = meanings.get(keyval_name)
if modifier:
modifier_map[modifier] |= (1 << i)
return modifier_map
开发者ID:ljmljz,项目名称:xpra,代码行数:41,代码来源:keys.py
示例12: get_gtk_version_info
def get_gtk_version_info():
#update props given:
global GTK_VERSION_INFO
if not GTK_VERSION_INFO:
if hasattr(gtk, "pygtk_version"):
GTK_VERSION_INFO["pygtk.version"] = gtk.pygtk_version
if hasattr(gtk, "gtk_version"):
#GTK2:
GTK_VERSION_INFO["gtk.version"] = gtk.gtk_version
elif hasattr(gtk, "_version"):
#GTK3:
GTK_VERSION_INFO["gtk.version"] = gtk._version
if hasattr(gdk, "__version__"):
#GTK2:
GTK_VERSION_INFO["gdk.version"] = gdk.__version__
elif hasattr(gdk, "_version"):
#GTK3:
GTK_VERSION_INFO["gdk.version"] = gdk._version
if is_gtk3():
try:
import gi
GTK_VERSION_INFO["gi.version"] = gi.__version__
except:
pass
if hasattr(gobject, "pygobject_version"):
GTK_VERSION_INFO["gobject.version"] = gobject.pygobject_version
elif hasattr(gobject, "_version"):
GTK_VERSION_INFO["gobject.version"] = gobject._version
if hasattr(cairo, "version"):
GTK_VERSION_INFO["cairo.version"] = cairo.version
if hasattr(pango, "version_string"):
GTK_VERSION_INFO["pango.version"] = pango.version_string()
try:
import glib
GTK_VERSION_INFO["glib.version"] = glib.glib_version
GTK_VERSION_INFO["pyglib.version"] = glib.pyglib_version
except:
pass
return GTK_VERSION_INFO.copy()
开发者ID:svn2github,项目名称:Xpra,代码行数:39,代码来源:gtk_util.py
示例13: __init__
def __init__(self):
self.window = gtk.Window()
self.window.connect("destroy", self.destroy)
self.window.set_default_size(540, 800)
self.window.set_border_width(20)
self.window.set_title("Keyboard State Tool")
# Title
vbox = gtk.VBox(False, 0)
vbox.set_spacing(15)
label = gtk.Label("Keyboard State")
label.modify_font(pango.FontDescription("sans 13"))
vbox.pack_start(label)
self.modifiers = gtk.Label()
vbox.add(self.modifiers)
self.mouse = gtk.Label()
vbox.add(self.mouse)
self.keys = gtk.Label()
fixed = pango.FontDescription('monospace 9')
self.keys.modify_font(fixed)
vbox.add(self.keys)
self.window.add(vbox)
self.window.show_all()
gobject.timeout_add(100, self.populate_modifiers)
self.key_events = maxdeque(maxlen=35)
self.window.connect("key-press-event", self.key_press)
self.window.connect("key-release-event", self.key_release)
if not is_gtk3():
self.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND2))
icon = get_icon("keyboard.png")
if icon:
self.window.set_icon(icon)
开发者ID:svn2github,项目名称:Xpra,代码行数:38,代码来源:gtk_view_keyboard.py
示例14: imagebutton
def imagebutton(title, icon, tooltip=None, clicked_callback=None, icon_size=32, default=False, min_size=None, label_color=None):
button = gtk.Button(title)
settings = button.get_settings()
settings.set_property('gtk-button-images', True)
if icon:
button.set_image(scaled_image(icon, icon_size))
if tooltip:
button.set_tooltip_text(tooltip)
if min_size:
button.set_size_request(min_size, min_size)
if clicked_callback:
button.connect("clicked", clicked_callback)
if default:
if is_gtk3():
button.set_can_default(True)
else:
button.set_flags(gtk.CAN_DEFAULT)
if label_color:
alignment = button.get_children()[0]
b_hbox = alignment.get_children()[0]
label = b_hbox.get_children()[1]
label.modify_fg(STATE_NORMAL, label_color)
return button
开发者ID:svn2github,项目名称:Xpra,代码行数:23,代码来源:gtk_util.py
示例15: import_gtk
gtk = import_gtk()
gdk = import_gdk()
from xpra.gtk_common.gtk_util import get_xwindow
from xpra.log import Logger
log = Logger("x11", "window")
try:
from xpra.x11.gtk2.gdk_bindings import (
get_pywindow, #@UnresolvedImport
get_xvisual, #@UnresolvedImport
)
except ImportError as e:
#we should only ever be missing the gdk_bindings with GTK3 builds:
log("cannot import gdk bindings", exc_info=True)
assert is_gtk3()
def missing_fn(*args):
raise NotImplementedError()
get_pywindow, get_xvisual = missing_fn, missing_fn
from xpra.x11.bindings.window_bindings import (
constants, #@UnresolvedImport
X11WindowBindings, #@UnresolvedImport
PropertyError) #@UnresolvedImport
X11Window = X11WindowBindings()
from xpra.os_util import StringIOClass
from xpra.gtk_common.error import xsync, XError
from xpra.codecs.argb.argb import premultiply_argb_in_place #@UnresolvedImport
开发者ID:svn2github,项目名称:Xpra,代码行数:29,代码来源:prop.py
示例16: import_gtk
gtk = import_gtk()
gdk = import_gdk()
from xpra.log import Logger
log = Logger("gtk", "util")
GTK_VERSION_INFO = {}
if hasattr(gtk, "pygtk_version"):
GTK_VERSION_INFO["pygtk_version"] = gtk.pygtk_version
if hasattr(gtk, "gtk_version"):
GTK_VERSION_INFO["gtk_version"] = gtk.gtk_version
elif hasattr(gtk, "_version"):
GTK_VERSION_INFO["gtk_version"] = gtk._version
if is_gtk3():
#where is this gone now?
FILL = None
else:
FILL = gtk.FILL
def add_gtk_version_info(props, gtk, prefix="", new_namespace=False):
#update props given:
global GTK_VERSION_INFO
for k,v in GTK_VERSION_INFO.items():
if new_namespace:
k = k.replace("_", ".")
props[prefix+k] = v
开发者ID:svn2github,项目名称:Xpra,代码行数:29,代码来源:gtk_util.py
示例17: __init__
#.........这里部分代码省略.........
tb, stats_box = self.table_tab("browse.png", "Statistics", self.populate_statistics)
tb.widget_xalign = 1.0
tb.attach(title_box(""), 0, xoptions=EXPAND|FILL, xpadding=0)
tb.attach(title_box("Latest"), 1, xoptions=EXPAND|FILL, xpadding=0)
tb.attach(title_box("Minimum"), 2, xoptions=EXPAND|FILL, xpadding=0)
tb.attach(title_box("Average"), 3, xoptions=EXPAND|FILL, xpadding=0)
tb.attach(title_box("90 percentile"), 4, xoptions=EXPAND|FILL, xpadding=0)
tb.attach(title_box("Maximum"), 5, xoptions=EXPAND|FILL, xpadding=0)
tb.inc()
def maths_labels():
return label(), label(), label(), label(), label()
self.server_latency_labels = maths_labels()
tb.add_row(label("Server Latency (ms)", "The time it takes for the server to respond to pings"),
*self.server_latency_labels)
self.client_latency_labels = maths_labels()
tb.add_row(label("Client Latency (ms)", "The time it takes for the client to respond to pings, as measured by the server"),
*self.client_latency_labels)
if self.client.windows_enabled:
if self.client.server_info_request:
self.batch_labels = maths_labels()
tb.add_row(label("Batch Delay (ms)", "How long the server waits for new screen updates to accumulate before processing them"),
*self.batch_labels)
self.damage_labels = maths_labels()
tb.add_row(label("Damage Latency (ms)", "The time it takes to compress a frame and pass it to the OS network layer"),
*self.damage_labels)
self.quality_labels = maths_labels()
tb.add_row(label("Encoding Quality (pct)"), *self.quality_labels)
self.speed_labels = maths_labels()
tb.add_row(label("Encoding Speed (pct)"), *self.speed_labels)
self.decoding_labels = maths_labels()
tb.add_row(label("Decoding Latency (ms)", "How long it takes the client to decode a screen update"), *self.decoding_labels)
self.regions_per_second_labels = maths_labels()
tb.add_row(label("Regions/s", "The number of screen updates per second (includes both partial and full screen updates)"), *self.regions_per_second_labels)
self.regions_sizes_labels = maths_labels()
tb.add_row(label("Pixels/region", "The number of pixels per screen update"), *self.regions_sizes_labels)
self.pixels_per_second_labels = maths_labels()
tb.add_row(label("Pixels/s", "The number of pixels processed per second"), *self.pixels_per_second_labels)
#Window count stats:
wtb = TableBuilder()
stats_box.add(wtb.get_table())
#title row:
wtb.attach(title_box(""), 0, xoptions=EXPAND|FILL, xpadding=0)
wtb.attach(title_box("Regular"), 1, xoptions=EXPAND|FILL, xpadding=0)
wtb.attach(title_box("Transient"), 2, xoptions=EXPAND|FILL, xpadding=0)
wtb.attach(title_box("Trays"), 3, xoptions=EXPAND|FILL, xpadding=0)
if self.client.client_supports_opengl:
wtb.attach(title_box("OpenGL"), 4, xoptions=EXPAND|FILL, xpadding=0)
wtb.inc()
wtb.attach(label("Windows:"), 0, xoptions=EXPAND|FILL, xpadding=0)
self.windows_managed_label = label()
wtb.attach(self.windows_managed_label, 1)
self.transient_managed_label = label()
wtb.attach(self.transient_managed_label, 2)
self.trays_managed_label = label()
wtb.attach(self.trays_managed_label, 3)
if self.client.client_supports_opengl:
self.opengl_label = label()
wtb.attach(self.opengl_label, 4)
#add encoder info:
etb = TableBuilder()
stats_box.add(etb.get_table())
self.encoder_info_box = gtk.HBox(spacing=4)
etb.new_row("Window Encoders", self.encoder_info_box)
if not is_gtk3():
#needs porting to cairo...
self.graph_box = gtk.VBox(False, 10)
self.add_tab("statistics.png", "Graphs", self.populate_graphs, self.graph_box)
bandwidth_label = "Bandwidth used"
if SHOW_PIXEL_STATS:
bandwidth_label += ",\nand number of pixels rendered"
self.bandwidth_graph = self.add_graph_button(bandwidth_label, self.save_graphs)
self.connect("realize", self.populate_graphs)
self.latency_graph = self.add_graph_button(None, self.save_graphs)
self.pixel_in_data = deque(maxlen=N_SAMPLES+4)
self.net_in_bytecount = deque(maxlen=N_SAMPLES+4)
self.net_out_bytecount = deque(maxlen=N_SAMPLES+4)
self.sound_in_bytecount = deque(maxlen=N_SAMPLES+4)
self.sound_out_bytecount = deque(maxlen=N_SAMPLES+4)
self.set_border_width(15)
self.add(self.tab_box)
if not is_gtk3():
self.set_geometry_hints(self.tab_box)
def window_deleted(*args):
self.is_closed = True
self.connect('delete_event', window_deleted)
self.show_tab(self.tabs[0][2])
self.set_size_request(-1, 480)
self.init_counters()
self.populate()
self.populate_all()
gobject.timeout_add(1000, self.populate)
gobject.timeout_add(100, self.populate_tab)
add_close_accel(self, self.destroy)
开发者ID:svn2github,项目名称:Xpra,代码行数:101,代码来源:session_info.py
示例18: main
def main():
from xpra.platform import program_context
with program_context("Xpra-Sound-Source"):
import os.path
if "-v" in sys.argv:
log.enable_debug()
sys.argv.remove("-v")
if len(sys.argv) not in (2, 3):
log.error("usage: %s filename [codec] [--encoder=rencode]", sys.argv[0])
return 1
filename = sys.argv[1]
if filename=="-":
from xpra.os_util import disable_stdout_buffering
disable_stdout_buffering()
elif os.path.exists(filename):
log.error("file %s already exists", filename)
return 1
codec = None
codecs = get_codecs()
if len(sys.argv)==3:
codec = sys.argv[2]
if codec not in codecs:
log.error("invalid codec: %s, codecs supported: %s", codec, codecs)
return 1
else:
parts = filename.split(".")
if len(parts)>1:
extension = parts[-1]
if extension.lower() in codecs:
codec = extension.lower()
log.info("guessed codec %s from file extension %s", codec, extension)
if codec is None:
codec = MP3
log.info("using default codec: %s", codec)
#in case we're running against pulseaudio,
#try to setup the env:
try:
from xpra.platform.paths import get_icon_filename
f = get_icon_filename("xpra.png")
from xpra.sound.pulseaudio.pulseaudio_util import add_audio_tagging_env
add_audio_tagging_env(icon_path=f)
except Exception as e:
log.warn("failed to setup pulseaudio tagging: %s", e)
from threading import Lock
if filename=="-":
f = sys.stdout
else:
f = open(filename, "wb")
ss = SoundSource(codecs=[codec])
lock = Lock()
def new_buffer(ss, data, metadata):
log.info("new buffer: %s bytes (%s), metadata=%s", len(data), type(data), metadata)
with lock:
if f:
f.write(data)
f.flush()
from xpra.gtk_common.gobject_compat import import_glib
glib = import_glib()
glib_mainloop = glib.MainLoop()
ss.connect("new-buffer", new_buffer)
ss.start()
import signal
def deadly_signal(sig, frame):
log.warn("got deadly signal %s", SIGNAMES.get(sig, sig))
glib.idle_add(ss.stop)
glib.idle_add(glib_mainloop.quit)
def force_quit(sig, frame):
sys.exit()
signal.signal(signal.SIGINT, force_quit)
signal.signal(signal.SIGTERM, force_quit)
from xpra.gtk_common.gobject_compat import is_gtk3
if not is_gtk3():
signal.signal(signal.SIGINT, deadly_signal)
signal.signal(signal.SIGTERM, deadly_signal)
try:
glib_mainloop.run()
except Exception as e:
log.error("main loop error: %s", e)
ss.stop()
f.flush()
if f!=sys.stdout:
log.info("wrote %s bytes to %s", f.tell(), filename)
with lock:
f.close()
f = None
return 0
开发者ID:svn2github,项目名称:Xpra,代码行数:95,代码来源:src.py
示例19: pygtk2
import os
import sys
#pygtk3 vs pygtk2 (sigh)
from xpra.gtk_common.gobject_compat import import_gobject, import_cairo, is_gtk3
gobject = import_gobject()
cairo = import_cairo()
from xpra.client.window_backing_base import WindowBackingBase, unpremultiply_argb
from xpra.log import Logger
log = Logger("paint")
#transparency with GTK:
# - on MS Windows: not supported
# - on OSX: only with gtk3
DEFAULT_HAS_ALPHA = not sys.platform.startswith("win") and (not sys.platform.startswith("darwin") or is_gtk3())
GTK_ALPHA_SUPPORTED = (unpremultiply_argb is not None) and os.environ.get("XPRA_ALPHA", DEFAULT_HAS_ALPHA) in (True, "1")
"""
Generic GTK superclass for Backing code (for both GTK2 and GTK3),
see CairoBacking, PixmapBacking and TrayBacking for actual implementations.
(some may override HAS_ALPHA, TrayBacking does)
"""
class GTKWindowBacking(WindowBackingBase):
HAS_ALPHA = GTK_ALPHA_SUPPORTED
def __init__(self, wid, window_alpha):
WindowBackingBase.__init__(self, wid, window_alpha and self.HAS_ALPHA, gobject.idle_add)
开发者ID:svn2github,项目名称:Xpra,代码行数:30,代码来源:gtk_window_backing_base.py
示例20: popup_menu_workaround
def popup_menu_workaround(self, menu):
#win32 workaround:
if sys.platform.startswith("win") and not is_gtk3():
self.add_popup_menu_workaround(menu)
开发者ID:svn2github,项目名称:Xpra,代码行数:4,代码来源:gtk_tray_menu_base.py
注:本文中的xpra.gtk_common.gobject_compat.is_gtk3函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论