def __init__(self, selection, _log): self.clipboard = gtk.Clipboard(selection=selection) self.selection = selection self._log = _log self.owned_label = label() self.get_targets = gtk.combo_box_new_text() self.get_targets.set_sensitive(False) self.get_targets.connect("changed", self.get_target_changed) self.set_targets = gtk.combo_box_new_text() self.set_targets.append_text("STRING") self.set_targets.append_text("UTF8_STRING") self.set_targets.set_active(0) self.set_targets.connect("changed", self.set_target_changed) self.value_label = label() self.value_entry = gtk.Entry(max=100) self.value_entry.set_width_chars(32) self.clear_label_btn = gtk.Button("X") self.clear_label_btn.connect("clicked", self.clear_label) self.clear_entry_btn = gtk.Button("X") self.clear_entry_btn.connect("clicked", self.clear_entry) self.get_get_targets_btn = gtk.Button("Get Targets") self.get_get_targets_btn.connect("clicked", self.do_get_targets) self.get_target_btn = gtk.Button("Get Target") self.get_target_btn.connect("clicked", self.do_get_target) self.get_target_btn.set_sensitive(False) self.set_target_btn = gtk.Button("Set Target") self.set_target_btn.connect("clicked", self.do_set_target) self.get_string_btn = gtk.Button("Get String") self.get_string_btn.connect("clicked", self.do_get_string) self.set_string_btn = gtk.Button("Set String") self.set_string_btn.connect("clicked", self.do_set_string) self.clipboard.connect("owner-change", self.owner_changed) self.log("ready")
def __init__(self): self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect("destroy", self.destroy) self.window.set_default_size(640, 300) self.window.set_border_width(20) vbox = gtk.VBox(False, 0) vbox.set_spacing(15) self.log = maxdeque(maxlen=25) for x in range(25): self.log.append("") self.events = gtk.Label() fixed = pango.FontDescription('monospace 9') self.events.modify_font(fixed) #how many clipboards to show: self.clipboards = ["CLIPBOARD", "PRIMARY", "SECONDARY"] if sys.platform.startswith("win"): self.clipboards = ["CLIPBOARD"] tb = TableBuilder() table = tb.get_table() labels = [label("Selection")] labels += [ label("Value"), label("Clear"), label("Targets"), label("Actions") ] tb.add_row(*labels) for selection in self.clipboards: cs = ClipboardInstance(selection, self.add_event) get_actions = gtk.HBox() for x in (cs.get_get_targets_btn, cs.get_target_btn, cs.get_string_btn): get_actions.pack_start(x) tb.add_row(label(selection), cs.value_label, cs.clear_label_btn, cs.get_targets, get_actions) set_actions = gtk.HBox() for x in (cs.set_target_btn, cs.set_string_btn): set_actions.pack_start(x) tb.add_row(None, cs.value_entry, cs.clear_entry_btn, cs.set_targets, set_actions) vbox.pack_start(table) vbox.add(self.events) self.window.add(vbox) self.window.show_all() icon = get_icon("clipboard.png") if icon: self.window.set_icon(icon) try: self.add_event( "ALL", "window=%s, xid=%s" % (self.window, hex(self.window.get_window().xid))) except: self.add_event("ALL", "window=%s" % self.window)
def __init__(self): self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect("destroy", self.destroy) self.window.set_default_size(640, 300) self.window.set_border_width(20) vbox = gtk.VBox(False, 0) vbox.set_spacing(15) self.log = maxdeque(maxlen=25) for x in range(25): self.log.append("") self.events = gtk.Label() fixed = pango.FontDescription('monospace 9') self.events.modify_font(fixed) #how many clipboards to show: self.clipboards = ["CLIPBOARD", "PRIMARY", "SECONDARY"] if sys.platform.startswith("win"): self.clipboards = ["CLIPBOARD"] tb = TableBuilder() table = tb.get_table() labels = [label("Selection")] labels += [label("Value"), label("Clear"), label("Targets"), label("Actions")] tb.add_row(*labels) for selection in self.clipboards: cs = ClipboardInstance(selection, self.add_event) get_actions = gtk.HBox() for x in (cs.get_get_targets_btn, cs.get_target_btn, cs.get_string_btn): get_actions.pack_start(x) tb.add_row(label(selection), cs.value_label, cs.clear_label_btn, cs.get_targets, get_actions) set_actions = gtk.HBox() for x in (cs.set_target_btn, cs.set_string_btn): set_actions.pack_start(x) tb.add_row(None, cs.value_entry, cs.clear_entry_btn, cs.set_targets, set_actions) vbox.pack_start(table) vbox.add(self.events) self.window.add(vbox) self.window.show_all() icon = get_icon("clipboard.png") if icon: self.window.set_icon(icon) try: self.add_event("ALL", "window=%s, xid=%s" % (self.window, hex(self.window.get_window().xid))) except: self.add_event("ALL", "window=%s" % self.window)
def __init__(self, client, session_name, window_icon_pixbuf, conn, get_pixbuf): gtk.Window.__init__(self) self.client = client self.session_name = session_name self.connection = conn self.last_populate_time = 0 self.last_populate_statistics = 0 self.is_closed = False self.get_pixbuf = get_pixbuf self.set_title(self.session_name or "Session Info") self.set_destroy_with_parent(True) self.set_resizable(True) self.set_decorated(True) if window_icon_pixbuf: self.set_icon(window_icon_pixbuf) if is_gtk3(): self.set_position(gtk.WindowPosition.CENTER) else: self.set_position(gtk.WIN_POS_CENTER) #tables on the left in a vbox with buttons at the top: self.tab_box = gtk.VBox(False, 0) self.tab_button_box = gtk.HBox(True, 0) self.tabs = [] #pairs of button, table self.populate_cb = None self.tab_box.pack_start(self.tab_button_box, expand=False, fill=True, padding=0) #Package Table: tb = self.table_tab("package.png", "Software", self.populate_package) #title row: tb.attach(title_box(""), 0, xoptions=gtk.EXPAND | gtk.FILL, xpadding=0) tb.attach(title_box("Client"), 1, xoptions=gtk.EXPAND | gtk.FILL, xpadding=0) tb.attach(title_box("Server"), 2, xoptions=gtk.EXPAND | gtk.FILL, xpadding=0) tb.inc() scaps = self.client.server_capabilities from xpra.__init__ import __version__ tb.new_row("Xpra", label(__version__), label(self.client._remote_version or "unknown")) cl_rev, cl_ch, cl_date = "unknown", "", "" try: from xpra.build_info import BUILD_DATE as cl_date, REVISION as cl_rev, LOCAL_MODIFICATIONS as cl_ch except: pass def getcap(*names): for x in names: v = scaps.get(x) if v: return v return "unknown" tb.new_row("Revision", label(cl_rev), label(self.client._remote_revision or "unknown")) tb.new_row( "Local Changes", label(cl_ch), label(getcap("local_modifications", "build.local_modifications"))) tb.new_row("Build date", label(cl_date), label(getcap("build_date", "build.date"))) def make_version_str(version): if version and type(version) in (tuple, list): version = ".".join([str(x) for x in version]) return version or "unknown" def server_version_info(*names): return make_version_str(getcap(*names)) def client_version_info(prop_name): info = "unknown" if hasattr(gtk, prop_name): info = make_version_str(getattr(gtk, prop_name)) return info if is_gtk3(): tb.new_row("PyGobject", label(gobject._version)) tb.new_row("Client GDK", label(gdk._version)) tb.new_row( "GTK", label(gtk._version), label(server_version_info("gtk_version", "server.gtk.version"))) else: tb.new_row( "PyGTK", label(client_version_info("pygtk_version")), label( server_version_info("pygtk_version", "server.pygtk.version"))) tb.new_row( "GTK", label(client_version_info("gtk_version")), label(server_version_info("gtk_version", "server.gtk.version"))) tb.new_row("Python", label(platform.python_version()), label(server_version_info("python_version"))) cl_gst_v, cl_pygst_v = "", "" if HAS_SOUND: try: from xpra.sound.gstreamer_util import gst_version as cl_gst_v, pygst_version as cl_pygst_v except: pass tb.new_row("GStreamer", label(make_version_str(cl_gst_v)), label(server_version_info("gst_version"))) tb.new_row("pygst", label(make_version_str(cl_pygst_v)), label(server_version_info("pygst_version"))) tb.new_row( "OpenGL", label( make_version_str(self.client.opengl_props.get("opengl", "n/a"))), label("n/a")) tb.new_row( "OpenGL Vendor", label(make_version_str(self.client.opengl_props.get("vendor", ""))), label("n/a")) tb.new_row( "PyOpenGL", label( make_version_str( self.client.opengl_props.get("pyopengl", "n/a"))), label("n/a")) # Features Table: tb = self.table_tab("features.png", "Features", self.populate_features) randr_box = gtk.HBox(False, 20) self.server_randr_label = label() self.server_randr_icon = gtk.Image() randr_box.add(self.server_randr_icon) randr_box.add(self.server_randr_label) tb.new_row("RandR Support", randr_box) opengl_box = gtk.HBox(False, 20) self.server_opengl_label = label() self.server_opengl_icon = gtk.Image() opengl_box.add(self.server_opengl_icon) opengl_box.add(self.server_opengl_label) tb.new_row("Client OpenGL", opengl_box) self.server_encodings_label = label() tb.new_row("Server Encodings", self.server_encodings_label) self.client_encodings_label = label() tb.new_row("Client Encodings", self.client_encodings_label) self.server_mmap_icon = gtk.Image() tb.new_row("Memory Mapped Transfers", self.server_mmap_icon) self.server_clipboard_icon = gtk.Image() tb.new_row("Clipboard", self.server_clipboard_icon) self.server_notifications_icon = gtk.Image() tb.new_row("Notification Forwarding", self.server_notifications_icon) self.server_bell_icon = gtk.Image() tb.new_row("Bell Forwarding", self.server_bell_icon) self.server_cursors_icon = gtk.Image() tb.new_row("Cursor Forwarding", self.server_cursors_icon) speaker_box = gtk.HBox(False, 20) self.server_speaker_icon = gtk.Image() speaker_box.add(self.server_speaker_icon) self.speaker_codec_label = label() speaker_box.add(self.speaker_codec_label) tb.new_row("Speaker Forwarding", speaker_box) self.server_speaker_codecs_label = label() tb.new_row("Server Codecs", self.server_speaker_codecs_label) self.client_speaker_codecs_label = label() tb.new_row("Client Codecs", self.client_speaker_codecs_label) microphone_box = gtk.HBox(False, 20) self.server_microphone_icon = gtk.Image() microphone_box.add(self.server_microphone_icon) self.microphone_codec_label = label() microphone_box.add(self.microphone_codec_label) tb.new_row("Microphone Forwarding", microphone_box) self.server_microphone_codecs_label = label() tb.new_row("Server Codecs", self.server_microphone_codecs_label) self.client_microphone_codecs_label = label() tb.new_row("Client Codecs", self.client_microphone_codecs_label) # Connection Table: tb = self.table_tab("connect.png", "Connection", self.populate_connection) tb.new_row("Server Endpoint", label(self.connection.target)) if self.client.server_display: tb.new_row("Server Display", label(self.client.server_display)) if "hostname" in scaps: tb.new_row("Server Hostname", label(scaps.get("hostname"))) if self.client.server_platform: tb.new_row("Server Platform", label(self.client.server_platform)) self.server_load_label = label() tb.new_row("Server Load", self.server_load_label, label_tooltip="Average over 1, 5 and 15 minutes") self.session_started_label = label() tb.new_row("Session Started", self.session_started_label) self.session_connected_label = label() tb.new_row("Session Connected", self.session_connected_label) self.input_packets_label = label() tb.new_row("Packets Received", self.input_packets_label) self.input_bytes_label = label() tb.new_row("Bytes Received", self.input_bytes_label) self.output_packets_label = label() tb.new_row("Packets Sent", self.output_packets_label) self.output_bytes_label = label() tb.new_row("Bytes Sent", self.output_bytes_label) self.compression_label = label() tb.new_row("Compression Level", self.compression_label) self.connection_type_label = label() tb.new_row("Connection Type", self.connection_type_label) self.input_encryption_label = label() tb.new_row("Input Encryption", self.input_encryption_label) self.output_encryption_label = label() tb.new_row("Output Encryption", self.output_encryption_label) # Details: tb = self.table_tab("browse.png", "Statistics", self.populate_statistics) tb.widget_xalign = 1.0 tb.attach(title_box(""), 0, xoptions=gtk.EXPAND | gtk.FILL, xpadding=0) tb.attach(title_box("Latest"), 1, xoptions=gtk.EXPAND | gtk.FILL, xpadding=0) tb.attach(title_box("Minimum"), 2, xoptions=gtk.EXPAND | gtk.FILL, xpadding=0) tb.attach(title_box("Average"), 3, xoptions=gtk.EXPAND | gtk.FILL, xpadding=0) tb.attach(title_box("90 percentile"), 4, xoptions=gtk.EXPAND | gtk.FILL, xpadding=0) tb.attach(title_box("Maximum"), 5, xoptions=gtk.EXPAND | gtk.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)"), *self.server_latency_labels) self.client_latency_labels = maths_labels() tb.add_row(label("Client Latency (ms)"), *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)"), *self.batch_labels) self.damage_labels = maths_labels() tb.add_row(label("Damage Latency (ms)"), *self.damage_labels) self.decoding_labels = maths_labels() tb.add_row(label("Decoding Latency (ms)"), *self.decoding_labels) self.regions_per_second_labels = maths_labels() tb.add_row(label("Regions/s"), *self.regions_per_second_labels) self.regions_sizes_labels = maths_labels() tb.add_row(label("Pixels/region"), *self.regions_sizes_labels) self.pixels_per_second_labels = maths_labels() tb.add_row(label("Pixels/s"), *self.pixels_per_second_labels) self.windows_managed_label = label() tb.new_row("Regular Windows", self.windows_managed_label), self.transient_managed_label = label() tb.new_row("Transient Windows", self.transient_managed_label), self.trays_managed_label = label() tb.new_row("Trays Managed", self.trays_managed_label), if self.client.opengl_enabled: self.opengl_label = label() tb.new_row("OpenGL Windows", self.opengl_label), self.graph_box = gtk.VBox(False, 10) self.add_tab("statistics.png", "Graphs", self.populate_graphs, self.graph_box) bandwidth_label = "Number of bytes measured by the networks sockets" if SHOW_PIXEL_STATS: bandwidth_label += ",\nand number of pixels rendered" self.bandwidth_graph = self.add_graph_button(bandwidth_label, self.save_graphs) self.latency_graph = self.add_graph_button( "The time it takes to send an echo packet and get the reply", self.save_graphs) self.pixel_in_data = maxdeque(N_SAMPLES + 4) self.net_in_bytecount = maxdeque(N_SAMPLES + 4) self.net_out_bytecount = maxdeque(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][1]) self.set_size_request(-1, 480) self.populate() self.populate_all() gobject.timeout_add(1000, self.populate) gobject.timeout_add(100, self.populate_tab) self.connect("realize", self.populate_graphs) add_close_accel(self, self.destroy)
def maths_labels(): return label(), label(), label(), label(), label()