Exemplo n.º 1
0
        def set_clipboard_menu(*args):
            clipboard_submenu = gtk.Menu()
            clipboard_menu.set_submenu(clipboard_submenu)
            self.popup_menu_workaround(clipboard_submenu)
            c = self.client
            can_clipboard = c.server_supports_clipboard and c.client_supports_clipboard and c.server_supports_clipboard
            log(
                "set_clipboard_menu(%s) can_clipboard=%s, server=%s, client=%s",
                args, can_clipboard, c.server_supports_clipboard,
                c.client_supports_clipboard)
            clipboard_menu.set_sensitive(can_clipboard)
            LABEL_TO_NAME = {
                "Disabled": None,
                "Clipboard": "CLIPBOARD",
                "Primary": "PRIMARY",
                "Secondary": "SECONDARY"
            }
            from xpra.clipboard.translated_clipboard import TranslatedClipboardProtocolHelper
            for label, remote_clipboard in LABEL_TO_NAME.items():
                clipboard_item = CheckMenuItem(label)

                def remote_clipboard_changed(item):
                    assert can_clipboard
                    item = ensure_item_selected(clipboard_submenu, item)
                    label = item.get_label()
                    remote_clipboard = LABEL_TO_NAME.get(label)
                    old_state = self.client.clipboard_enabled
                    log(
                        "remote_clipboard_changed(%s) remote_clipboard=%s, old_state=%s",
                        item, remote_clipboard, old_state)
                    send_tokens = False
                    if remote_clipboard is not None:
                        #clipboard is not disabled
                        if self.client.clipboard_helper is None:
                            self.client.setup_clipboard_helper(
                                TranslatedClipboardProtocolHelper)
                        self.client.clipboard_helper.remote_clipboard = remote_clipboard
                        send_tokens = True
                        new_state = True
                    else:
                        self.client.clipboard_helper = None
                        send_tokens = False
                        new_state = False
                    log(
                        "remote_clipboard_changed(%s) label=%s, remote_clipboard=%s, old_state=%s, new_state=%s",
                        item, label, remote_clipboard, old_state, new_state)
                    if new_state != old_state:
                        self.client.clipboard_enabled = new_state
                        self.client.emit("clipboard-toggled")
                        send_tokens = True
                    if send_tokens and self.client.clipboard_helper:
                        self.client.clipboard_helper.send_all_tokens()
                active = isinstance(self.client.clipboard_helper, TranslatedClipboardProtocolHelper) \
                            and self.client.clipboard_helper.remote_clipboard==remote_clipboard
                clipboard_item.set_active(active)
                clipboard_item.set_sensitive(can_clipboard)
                clipboard_item.set_draw_as_radio(True)
                clipboard_item.connect("toggled", remote_clipboard_changed)
                clipboard_submenu.append(clipboard_item)
            clipboard_submenu.show_all()
Exemplo n.º 2
0
def populate_encodingsmenu(encodings_submenu, get_current_encoding, set_encoding, encodings, server_encodings):
    encodings_submenu.get_current_encoding = get_current_encoding
    encodings_submenu.set_encoding = set_encoding
    encodings_submenu.encodings = encodings
    encodings_submenu.server_encodings = server_encodings
    encodings_submenu.index_to_encoding = {}
    encodings_submenu.encoding_to_index = {}
    NAME_TO_ENCODING = {}
    i = 0
    for encoding in encodings:
        name = ENCODINGS_TO_NAME.get(encoding, encoding)
        descr = ENCODINGS_HELP.get(encoding)
        NAME_TO_ENCODING[name] = encoding
        encoding_item = CheckMenuItem(name)
        if descr:
            if encoding not in server_encodings:
                descr += "\n(not available on this server)"
            set_tooltip_text(encoding_item, descr)
        def encoding_changed(oitem):
            log("encoding_changed(%s)", oitem)
            item = ensure_item_selected(encodings_submenu, oitem)
            enc = NAME_TO_ENCODING.get(item.get_label())
            log("encoding_changed(%s) item=%s, enc=%s, current=%s", oitem, item, enc, encodings_submenu.get_current_encoding())
            if enc is not None and encodings_submenu.get_current_encoding()!=enc:
                encodings_submenu.set_encoding(enc)
        log("make_encodingsmenu(..) encoding=%s, current=%s, active=%s", encoding, get_current_encoding(), encoding==get_current_encoding())
        encoding_item.set_active(encoding==get_current_encoding())
        encoding_item.set_sensitive(encoding in server_encodings)
        encoding_item.set_draw_as_radio(True)
        encoding_item.connect("toggled", encoding_changed)
        encodings_submenu.append(encoding_item)
        encodings_submenu.index_to_encoding[i] = encoding
        encodings_submenu.encoding_to_index[encoding] = i
        i += 1
    encodings_submenu.show_all()
Exemplo n.º 3
0
    def add_top_bar_widgets(self, hbox):
        #use an event box so we can style it:
        b = gtk.HBox()
        eb = gtk.EventBox()
        eb.add(b)
        eb.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(red=0, green=0, blue=0))
        white = gtk.gdk.Color(red=60000, green=63000, blue=65000)
        hbox.pack_start(eb, expand=True, fill=True)
        for i, l in {
                "encoding.png": "Encoding",
                "speed.png": "Speed",
                "information.png": "Information",
                "keyboard.png": "Keyboard",
                "clipboard.png": "Clipboard"
        }.items():
            icon = self._client.get_pixbuf(i)

            def clicked(*args):
                self.info("clicked(%s)", args)

            button = imagebutton(l,
                                 icon,
                                 clicked_callback=clicked,
                                 label_color=white)
            button.set_relief(gtk.RELIEF_NONE)
            b.add(button)
        icon = self._client.get_pixbuf("xpra.png")
        submenu = gtk.Menu()
        for l, a, s, r in (
            ("Check Option 1", True, True, False),
            ("Disabled Option", True, False, False),
            ("Radio 1", True, True, True),
            ("Radio 2", False, True, True),
        ):
            item = CheckMenuItem(l)

            def item_changed(item):
                self.info("item_changed(%s)", item)

            item.set_active(a)
            item.set_sensitive(s)
            item.set_draw_as_radio(r)
            item.connect("toggled", item_changed)
            submenu.append(item)
        submenu.show_all()

        def show_menu(btn, *args):
            self.info("show_menu(%s, %s)", btn, args)
            submenu.popup(None, None, None, 1, 0)

        menu_button = imagebutton("Xpra",
                                  icon,
                                  clicked_callback=show_menu,
                                  label_color=white)
        menu_button.set_relief(gtk.RELIEF_NONE)
        menu_button.show_all()
        b.add(menu_button)
Exemplo n.º 4
0
 def set_clipboard_menu(*args):
     clipboard_submenu = gtk.Menu()
     clipboard_menu.set_submenu(clipboard_submenu)
     self.popup_menu_workaround(clipboard_submenu)
     c = self.client
     can_clipboard = c.server_supports_clipboard and c.client_supports_clipboard and c.server_supports_clipboard
     debug("set_clipboard_menu(%s) can_clipboard=%s, server=%s, client=%s", args, can_clipboard, c.server_supports_clipboard, c.client_supports_clipboard)
     clipboard_menu.set_sensitive(can_clipboard)
     LABEL_TO_NAME = {"Disabled"  : None,
                     "Clipboard" : "CLIPBOARD",
                     "Primary"   : "PRIMARY",
                     "Secondary" : "SECONDARY"}
     from xpra.clipboard.translated_clipboard import TranslatedClipboardProtocolHelper
     for label, remote_clipboard in LABEL_TO_NAME.items():
         clipboard_item = CheckMenuItem(label)
         def remote_clipboard_changed(item):
             assert can_clipboard
             item = ensure_item_selected(clipboard_submenu, item)
             label = item.get_label()
             remote_clipboard = LABEL_TO_NAME.get(label)
             old_state = self.client.clipboard_enabled
             debug("remote_clipboard_changed(%s) remote_clipboard=%s, old_state=%s", item, remote_clipboard, old_state)
             send_tokens = False
             if remote_clipboard is not None:
                 #clipboard is not disabled
                 if self.client.clipboard_helper is None:
                     self.client.setup_clipboard_helper(TranslatedClipboardProtocolHelper)
                 self.client.clipboard_helper.remote_clipboard = remote_clipboard
                 send_tokens = True
                 new_state = True
             else:
                 self.client.clipboard_helper = None
                 send_tokens = False
                 new_state = False
             debug("remote_clipboard_changed(%s) label=%s, remote_clipboard=%s, old_state=%s, new_state=%s",
                      item, label, remote_clipboard, old_state, new_state)
             if new_state!=old_state:
                 self.client.clipboard_enabled = new_state
                 self.client.emit("clipboard-toggled")
                 send_tokens = True
             if send_tokens and self.client.clipboard_helper:
                 self.client.clipboard_helper.send_all_tokens()
         active = isinstance(self.client.clipboard_helper, TranslatedClipboardProtocolHelper) \
                     and self.client.clipboard_helper.remote_clipboard==remote_clipboard
         clipboard_item.set_active(active)
         clipboard_item.set_sensitive(can_clipboard)
         clipboard_item.set_draw_as_radio(True)
         clipboard_item.connect("toggled", remote_clipboard_changed)
         clipboard_submenu.append(clipboard_item)
     clipboard_submenu.show_all()
Exemplo n.º 5
0
def make_encodingsmenu(get_current_encoding, set_encoding, encodings,
                       server_encodings):
    encodings_submenu = gtk.Menu()
    encodings_submenu.get_current_encoding = get_current_encoding
    encodings_submenu.set_encoding = set_encoding
    encodings_submenu.encodings = encodings
    encodings_submenu.server_encodings = server_encodings
    encodings_submenu.index_to_encoding = {}
    encodings_submenu.encoding_to_index = {}
    NAME_TO_ENCODING = {}
    i = 0
    cur = get_current_encoding()
    cur = {"h264": "x264", "vp8": "vpx"}.get(cur, cur)
    for encoding in encodings:
        name = ENCODINGS_TO_NAME.get(encoding, encoding)
        descr = ENCODINGS_HELP.get(encoding)
        NAME_TO_ENCODING[name] = encoding
        encoding_item = CheckMenuItem(name)
        if descr:
            if encoding not in server_encodings:
                descr += "\n(not available on this server)"
            set_tooltip_text(encoding_item, descr)

        def encoding_changed(oitem):
            item = ensure_item_selected(encodings_submenu, oitem)
            enc = NAME_TO_ENCODING.get(item.get_label())
            debug("encoding_changed(%s) item=%s, enc=%s, current=%s", oitem,
                  item, enc, encodings_submenu.get_current_encoding())
            if enc is not None and encodings_submenu.get_current_encoding(
            ) != enc:
                encodings_submenu.set_encoding(enc)

        debug("make_encodingsmenu(..) encoding=%s, current=%s, active=%s",
              encoding, get_current_encoding(),
              encoding == get_current_encoding())
        encoding_item.set_active(encoding == cur)
        encoding_item.set_sensitive(encoding in server_encodings)
        encoding_item.set_draw_as_radio(True)
        encoding_item.connect("toggled", encoding_changed)
        encodings_submenu.append(encoding_item)
        encodings_submenu.index_to_encoding[i] = encoding
        encodings_submenu.encoding_to_index[encoding] = i
        i += 1
    encodings_submenu.show_all()
    return encodings_submenu
Exemplo n.º 6
0
 def add_top_bar_widgets(self, hbox):
     #use an event box so we can style it:
     b = gtk.HBox()
     eb = gtk.EventBox()
     eb.add(b)
     eb.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(red=0, green=0, blue=0))
     white = gtk.gdk.Color(red=60000, green=63000, blue=65000)
     hbox.pack_start(eb, expand=True, fill=True)
     for i,l in {"encoding.png"  : "Encoding",
               "speed.png"       : "Speed",
               "information.png" : "Information",
               "keyboard.png"    : "Keyboard",
               "clipboard.png"   : "Clipboard"}.items():
         icon = self._client.get_pixbuf(i)
         def clicked(*args):
             self.info("clicked(%s)", args)
         button = imagebutton(l, icon, clicked_callback=clicked, label_color=white)
         button.set_relief(gtk.RELIEF_NONE)
         b.add(button)
     icon = self._client.get_pixbuf("xpra.png")
     submenu = gtk.Menu()
     for l, a, s, r in (
                        ("Check Option 1", True, True, False),
                        ("Disabled Option", True, False, False),
                        ("Radio 1", True, True, True),
                        ("Radio 2", False, True, True),
                        ):
         item = CheckMenuItem(l)
         def item_changed(item):
             self.info("item_changed(%s)", item)
         item.set_active(a)
         item.set_sensitive(s)
         item.set_draw_as_radio(r)
         item.connect("toggled", item_changed)
         submenu.append(item)
     submenu.show_all()
     def show_menu(btn, *args):
         self.info("show_menu(%s, %s)", btn, args)
         submenu.popup(None, None, None, 1, 0)
     menu_button = imagebutton("Xpra", icon, clicked_callback=show_menu, label_color=white)
     menu_button.set_relief(gtk.RELIEF_NONE)
     menu_button.show_all()
     b.add(menu_button)