Skip to content

Commit

Permalink
osx fixes: move some osx client code to xpra/client/ dir
Browse files Browse the repository at this point in the history
git-svn-id: https://xpra.org/svn/Xpra/trunk@3370 3bb7dfac-3a0b-4e04-842a-767bc560f471
  • Loading branch information
totaam committed May 13, 2013
1 parent fbe6a94 commit 80ae816
Show file tree
Hide file tree
Showing 5 changed files with 153 additions and 5 deletions.
4 changes: 4 additions & 0 deletions src/xpra/client/osx/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# This file is part of Xpra.
# Copyright (C) 2013 Antoine Martin <antoine@devloop.org.uk>
# Xpra is released under the terms of the GNU GPL v2, or, at your option, any
# later version. See the file COPYING for details.
138 changes: 138 additions & 0 deletions src/xpra/client/osx/osx_client_menu.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
# This file is part of Xpra.
# Copyright (C) 2011-2013 Antoine Martin <antoine@devloop.org.uk>
# Xpra is released under the terms of the GNU GPL v2, or, at your option, any
# later version. See the file COPYING for details.

from xpra.gtk_common.gobject_compat import import_gtk
from xpra.gtk_common.gtk_util import CheckMenuItem
gtk = import_gtk()

from xpra.log import Logger
log = Logger()

#for attention_request:
CRITICAL_REQUEST = 0
INFO_REQUEST = 10


class OSXMenuHelper(object):
"""
we have to do this stuff here so we can
re-use the same instance
"""

def __init__(self, client):
self.client = client
self.menu_bar = None
self.hidden_window = None
self.quit_menu_item = None

def quit(self):
self.client.quit(0)

def build(self):
if self.menu_bar is None:
self.build_menu_bar()
return self.menu_bar

def rebuild(self):
if self.menu_bar:
self.remove_all_menus()
self.menu_bar = None
self.build()

def remove_all_menus(self):
if self.menu_bar:
for x in self.menu_bar.get_children():
self.menu_bar.remove(x)
x.hide()
self.info_menu = None
self.features_menu = None
self.encodings_menu = None
self.quality_menu = None
self.actions_menu = None
#if self.macapp:
# self.macapp.sync_menubar()

def build_menu_bar(self):
self.menu_bar = gtk.MenuBar()
def make_menu(name, submenu):
item = gtk.MenuItem(name)
item.set_submenu(submenu)
item.show_all()
self.menu_bar.add(item)
return submenu
self.info_menu = make_menu("Info", gtk.Menu())
self.features_menu = make_menu("Features", gtk.Menu())
self.encodings_menu = make_menu("Encodings", self.make_encodingssubmenu(False))
if (self.client.speaker_allowed and len(self.client.speaker_codecs)>0) or \
(self.client.microphone_allowed and len(self.client.microphone_codecs)>0):
self.sound_menu = make_menu("Sound", gtk.Menu())
self.quality_menu = make_menu("Min Quality", self.make_qualitysubmenu())
self.speed_menu = make_menu("Speed", self.make_speedsubmenu())
self.actions_menu = make_menu("Actions", gtk.Menu())
def reset_encodings(*args):
self.reset_encoding_options(self.encodings_menu)
self.client.connect("handshake-complete", reset_encodings)

#info
self.info_menu.add(self.make_aboutmenuitem())
self.info_menu.add(self.make_sessioninfomenuitem())
#features
self.features_menu.add(self.make_bellmenuitem())
self.features_menu.add(self.make_cursorsmenuitem())
self.features_menu.add(self.make_notificationsmenuitem())
if not self.client.readonly:
self.features_menu.add(self.make_layoutsmenuitem())
#sound:
if self.client.speaker_allowed and len(self.client.speaker_codecs)>0:
self.sound_menu.add(self.make_speakermenuitem())
if self.client.microphone_allowed and len(self.client.microphone_codecs)>0:
self.sound_menu.add(self.make_microphonemenuitem())
#actions:
self.actions_menu.add(self.make_refreshmenuitem())
self.actions_menu.add(self.make_raisewindowsmenuitem())

self.menu_bar.show_all()


def make_speakermenuitem(self):
speaker = CheckMenuItem("Speaker", "Forward sound output from the server")
def speaker_toggled(*args):
if speaker.active:
self.spk_on()
else:
self.spk_off()
def set_speaker(*args):
speaker.set_active(self.client.speaker_enabled)
speaker.connect('toggled', speaker_toggled)
self.client.connect("handshake-complete", set_speaker)
return speaker

def make_microphonemenuitem(self):
microphone = CheckMenuItem("Microphone", "Forward sound input to the server")
def microphone_toggled(*args):
if microphone.active:
self.mic_on()
else:
self.mic_off()
def set_microphone(*args):
microphone.set_active(self.client.microphone_enabled)
microphone.connect('toggled', microphone_toggled)
self.client.connect("handshake-complete", set_microphone)
return microphone

def set_speedmenu(self, *args):
for x in self.speed_menu.get_children():
if isinstance(x, gtk.CheckMenuItem):
x.set_sensitive(self.client.encoding=="x264")

def set_qualitymenu(self, *args):
vq = not self.client.mmap_enabled and self.client.encoding in ("jpeg", "webp", "x264")
if not vq:
self.quality_menu.hide()
else:
self.quality_menu.show()
self.quality_menu.set_sensitive(vq)
for i in self.quality_menu.get_children():
i.set_sensitive(vq)
4 changes: 1 addition & 3 deletions src/xpra/platform/darwin/gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,13 @@ def get_OSXApplication():


def do_init():
from xpra.gtk_common.quit import gtk_main_quit_really
def quit_launcher(*args):
gtk_main_quit_really()
from osx_menu import getOSXMenu
from xpra.platform.paths import get_icon
osxapp = get_OSXApplication()
icon = get_icon("xpra.png")
if icon:
osxapp.set_dock_icon_pixbuf(icon)
osxapp.set_dock_menu(getOSXMenu().build_dock_menu())
osxapp.set_menu_bar(getOSXMenu().rebuild())
osxapp.ready()

Expand Down
9 changes: 7 additions & 2 deletions src/xpra/platform/darwin/osx_menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,17 @@ def make_menu(name, submenu):
item.show_all()
self.menu_bar.add(item)
return submenu
self.menuitem("About Xpra", "information.png", None, about)
info_menu = make_menu("Info", gtk.Menu())
info_menu = make_menu("Info", gtk.Menu())
info_menu.add(self.menuitem("About Xpra", "information.png", None, about))
self.menu_bar.show_all()


def build_dock_menu(self):
self.dock_menu = gtk.Menu()
self.dock_menu.add(self.menuitem("About Xpra", "information.png", None, about))
self.dock_menu.show_all()
return self.dock_menu

#the code below is mostly duplicated from xpra/client/gtk2...

def menuitem(self, title, icon_name=None, tooltip=None, cb=None):
Expand Down
3 changes: 3 additions & 0 deletions src/xpra/platform/darwin/osx_tray.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ def __init__(self, menu_helper, tray_icon):
#not needed?:
#self.macapp.connect("NSApplicationBlockTermination", self.quit)

def cleanup(self):
pass

def quit(self, *args):
self.menu_helper.quit()

Expand Down

0 comments on commit 80ae816

Please sign in to comment.