Ejemplo n.º 1
0
	def on_unknown_message(self, daemon, message):
		if message.startswith("OSD: message"):
			args = shlex.split(message)[1:]
			m = Message()
			m.parse_argumets(args)
			m.show()
		elif message.startswith("OSD: keyboard"):
			if self._window:
				log.warning("Another OSD is already visible - refusing to show menu")
			else:
				args = shlex.split(message)[1:]
				self._window = Keyboard()
				self._window.connect('destroy', self.on_keyboard_closed)
				# self._window.parse_argumets(args) # TODO: No arguments so far
				self._window.show()
				self._window.use_daemon(self.daemon)
		elif message.startswith("OSD: menu") or message.startswith("OSD: gridmenu"):
			args = shlex.split(message)[1:]
			if self._window:
				log.warning("Another OSD is already visible - refusing to show menu")
			else:
				self._window = GridMenu() if "gridmenu" in message else Menu()
				self._window.connect('destroy', self.on_menu_closed)
				if self._window.parse_argumets(args):
					self._window.show()
					self._window.use_daemon(self.daemon)
				else:
					log.error("Failed to show menu")
					self._window = None
		else:
			log.warning("Unknown command from daemon: '%s'", message)
Ejemplo n.º 2
0
	def on_event(self, daemon, what, data):
		# Restricts Y axis to dead center, as nothing
		# else makes sense in this kind of menu
		if self._submenu:
			return self._submenu.on_event(daemon, what, data)
		if what == self._control_with and self._use_cursor:
			data = data[0], STICK_PAD_MIN
		GridMenu.on_event(self, daemon, what, data)
Ejemplo n.º 3
0
 def on_unknown_message(self, daemon, message):
     if not message.startswith("OSD:"):
         return
     if message.startswith("OSD: message"):
         args = split(message)[1:]
         m = Message()
         m.parse_argumets(args)
         m.show()
     elif message.startswith("OSD: keyboard"):
         if self._window:
             log.warning(
                 "Another OSD is already visible - refusing to show keyboard"
             )
         else:
             args = split(message)[1:]
             self._window = Keyboard()
             self._window.connect('destroy', self.on_keyboard_closed)
             # self._window.parse_argumets(args) # TODO: No arguments so far
             self._window.show()
             self._window.use_daemon(self.daemon)
     elif message.startswith("OSD: menu") or message.startswith(
             "OSD: gridmenu"):
         args = split(message)[1:]
         if self._window:
             log.warning(
                 "Another OSD is already visible - refusing to show menu")
         else:
             self._window = GridMenu() if "gridmenu" in message else Menu()
             self._window.connect('destroy', self.on_menu_closed)
             self._window.use_config(self.config)
             if self._window.parse_argumets(args):
                 self._window.show()
                 self._window.use_daemon(self.daemon)
             else:
                 log.error("Failed to show menu")
                 self._window = None
     elif message.startswith("OSD: area"):
         args = split(message)[1:]
         if self._window:
             log.warning(
                 "Another OSD is already visible - refusing to show area")
         else:
             args = split(message)[1:]
             self._window = Area()
             self._window.connect('destroy', self.on_keyboard_closed)
             if self._window.parse_argumets(args):
                 self._window.show()
             else:
                 self._window.quit()
                 self._window = None
     elif message.startswith("OSD: clear"):
         # Clears active OSD window (if any)
         if self._window:
             self._window.quit()
             self._window = None
     else:
         log.warning("Unknown command from daemon: '%s'", message)
Ejemplo n.º 4
0
	def generate_widget(self, item):
		"""
		Generates gtk widget for specified menutitem
		Ignores Submenus and Separators but applies icon size
		"""
		if isinstance(item, (Separator, Submenu)) or item.id is None:
			return None
		else:
			widget = GridMenu.generate_widget(self, item)
			icon = widget.get_children()[-1]
			if self._size > 1 and isinstance(icon, MenuIcon):
				widget.set_size_request(-1, 32 + self._size * 3)
			return widget
Ejemplo n.º 5
0
	def __init__(self, cls="osd-menu"):
		GridMenu.__init__(self, cls)
Ejemplo n.º 6
0
 def on_unknown_message(self, daemon, message):
     if not message.startswith("OSD:"):
         return
     if message.startswith("OSD: message"):
         args = shsplit(message)[1:]
         m = Message()
         m.parse_argumets(args)
         m.show()
     elif message.startswith("OSD: keyboard"):
         if self._window:
             log.warning(
                 "Another OSD is already visible - refusing to show keyboard"
             )
         else:
             args = shsplit(message)[1:]
             self._window = Keyboard(self.config)
             self._window.connect('destroy', self.on_keyboard_closed)
             self._window.parse_argumets(args)
             self._window.show()
             self._window.use_daemon(self.daemon)
     elif message.startswith("OSD: gesture"):
         if self._window:
             log.warning(
                 "Another OSD is already visible - refusing to show keyboard"
             )
         else:
             args = shsplit(message)[1:]
             self._window = GestureDisplay(self.config)
             self._window.parse_argumets(args)
             self._window.use_daemon(self.daemon)
             self._window.show()
             self._window.connect('destroy', self.on_gesture_recognized)
     elif self._is_menu_message(message):
         args = shsplit(message)[1:]
         if self._window:
             log.warning(
                 "Another OSD is already visible - refusing to show menu")
         else:
             if message.startswith("OSD: hmenu"):
                 self._window = HorizontalMenu()
             elif message.startswith("OSD: radialmenu"):
                 self._window = RadialMenu()
             elif message.startswith("OSD: quickmenu"):
                 self._window = QuickMenu()
             elif message.startswith("OSD: gridmenu"):
                 self._window = GridMenu()
             elif message.startswith("OSD: dialog"):
                 self._window = Dialog()
             else:
                 self._window = Menu()
             self._window.connect('destroy', self.on_menu_closed)
             self._window.use_config(self.config)
             if self._window.parse_argumets(args):
                 self._window.show()
                 self._window.use_daemon(self.daemon)
             else:
                 log.error("Failed to show menu")
                 self._window = None
     elif message.startswith("OSD: area"):
         args = shsplit(message)[1:]
         if self._window:
             log.warning(
                 "Another OSD is already visible - refusing to show area")
         else:
             args = shsplit(message)[1:]
             self._window = Area()
             self._window.connect('destroy', self.on_keyboard_closed)
             if self._window.parse_argumets(args):
                 self._window.show()
             else:
                 self._window.quit()
                 self._window = None
     elif message.startswith("OSD: clear"):
         # Clears active OSD window (if any)
         if self._window:
             self._window.quit()
             self._window = None
     else:
         log.warning("Unknown command from daemon: '%s'", message)
Ejemplo n.º 7
0
class OSDDaemon(object):
	def __init__(self):
		self.exit_code = -1
		self.mainloop = GLib.MainLoop()
		self._window = None
		self._registered = False
		OSDWindow._apply_css()
	
	
	def quit(self, code=-1):
		self.exit_code = code
		self.mainloop.quit()
	
	
	def get_exit_code(self):
		return self.exit_code
	
	
	def on_daemon_died(self, *a):
		log.error("Daemon died")
		self.quit(2)
	
	
	def on_daemon_connected(self, *a):
		def success(*a):
			log.info("Sucessfully registered as scc-osd-daemon")
			self._registered = True
		def failure(why):
			log.error("Failed to registered as scc-osd-daemon: %s", why)
			self.quit(1)
		
		if not self._registered:
			self.daemon.request('Register: osd', success, failure)
	
	
	def on_menu_closed(self, m):
		""" Called after OSD menu is hidden from screen """
		self._window = None
		if m.get_exit_code() == 0:
			# 0 means that user selected item and confirmed selection
			self.daemon.request(
				'Selected: %s %s' % (m.get_menuid(), m.get_selected_item_id()),
				lambda *a : False, lambda *a : False)
	
	
	def on_keyboard_closed(self, *a):
		""" Called after on-screen keyboard is hidden from the screen """
		self._window = None
	
	
	def on_unknown_message(self, daemon, message):
		if message.startswith("OSD: message"):
			args = shlex.split(message)[1:]
			m = Message()
			m.parse_argumets(args)
			m.show()
		elif message.startswith("OSD: keyboard"):
			if self._window:
				log.warning("Another OSD is already visible - refusing to show menu")
			else:
				args = shlex.split(message)[1:]
				self._window = Keyboard()
				self._window.connect('destroy', self.on_keyboard_closed)
				# self._window.parse_argumets(args) # TODO: No arguments so far
				self._window.show()
				self._window.use_daemon(self.daemon)
		elif message.startswith("OSD: menu") or message.startswith("OSD: gridmenu"):
			args = shlex.split(message)[1:]
			if self._window:
				log.warning("Another OSD is already visible - refusing to show menu")
			else:
				self._window = GridMenu() if "gridmenu" in message else Menu()
				self._window.connect('destroy', self.on_menu_closed)
				if self._window.parse_argumets(args):
					self._window.show()
					self._window.use_daemon(self.daemon)
				else:
					log.error("Failed to show menu")
					self._window = None
		else:
			log.warning("Unknown command from daemon: '%s'", message)
	
	
	def run(self):
		self.daemon = DaemonManager()
		self.daemon.connect('dead', self.on_daemon_died)
		self.daemon.connect('alive', self.on_daemon_connected)
		self.daemon.connect('unknown-msg', self.on_unknown_message)
		self.mainloop.run()