Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1# This file is part of Xpra. 

2# Copyright (C) 2020 Antoine Martin <antoine@xpra.org> 

3# Xpra is released under the terms of the GNU GPL v2, or, at your option, any 

4# later version. See the file COPYING for details. 

5 

6from gi.repository import Gtk, Gdk 

7 

8from xpra.client.gtk_base.menu_helper import MenuHelper 

9from xpra.log import Logger 

10 

11log = Logger("gtk", "window") 

12 

13 

14class WindowMenuHelper(MenuHelper): 

15 

16 def __init__(self, client, window): 

17 super().__init__(client) 

18 self.window = window 

19 

20 def setup_menu(self): 

21 menu = Gtk.Menu() 

22 #menu.append(self.make_closemenuitem()) 

23 menu.connect("deactivate", self.menu_deactivated) 

24 #menu.append(self.make_aboutmenuitem()) 

25 menu.append(self.make_infomenuitem()) 

26 #if self.client.client_supports_opengl: 

27 # menu.append(self.make_openglmenuitem()) 

28 menu.append(self.make_minimizemenuitem()) 

29 menu.append(self.make_maximizemenuitem()) 

30 menu.append(self.make_fullscreenmenuitem()) 

31 menu.append(self.make_abovenmenuitem()) 

32 menu.append(self.make_refreshmenuitem()) 

33 menu.append(self.make_reinitmenuitem()) 

34 menu.append(self.make_closemenuitem()) 

35 menu.show_all() 

36 return menu 

37 

38 def make_infomenuitem(self): 

39 def show_info(*_args): 

40 from xpra.client.gtk_base.window_info import WindowInfo 

41 wi = WindowInfo(self.client, self.window) 

42 wi.show() 

43 gl = self.menuitem("Window Information", "information.png", "Window state and details", show_info) 

44 gl.set_tooltip_text() 

45 return gl 

46 

47 def make_openglmenuitem(self): 

48 gl = self.checkitem("OpenGL") 

49 gl.set_tooltip_text("hardware accelerated rendering using OpenGL") 

50 return gl 

51 

52 def make_minimizemenuitem(self): 

53 def minimize(*args): 

54 log("minimize%s", args) 

55 self.window.iconify() 

56 return self.menuitem("Minimize", "minimize.png", None, minimize) 

57 

58 def make_maximizemenuitem(self): 

59 def maximize(*args): 

60 log("maximize%s", args) 

61 if self.window.is_maximized(): 

62 self.window.unmaximize() 

63 else: 

64 self.window.maximize() 

65 def get_label(maximized): 

66 return "Unmaximize" if maximized else "Maximize" 

67 label = get_label(self.window.is_maximized()) 

68 self.maximize_menuitem = self.menuitem(label, "maximize.png", None, maximize) 

69 def set_sensitive_state(): 

70 self.maximize_menuitem.set_sensitive(self.window.can_maximize()) 

71 def window_state_updated(widget, event): 

72 maximized_changed = event.changed_mask & Gdk.WindowState.MAXIMIZED 

73 log("state_changed%s maximized_changed=%s", (widget, event), maximized_changed) 

74 if maximized_changed: 

75 label = get_label(event.new_window_state & Gdk.WindowState.MAXIMIZED) 

76 self.maximize_menuitem.set_label(label) 

77 self.window.connect("window-state-event", window_state_updated) 

78 return self.maximize_menuitem 

79 

80 def make_fullscreenmenuitem(self): 

81 def fullscreen(*args): 

82 log("fullscreen%s", args) 

83 self.window.fullscreen() 

84 return self.menuitem("Fullscreen", "scaling.png", None, fullscreen) 

85 

86 def make_abovenmenuitem(self): 

87 def icon_name(): 

88 if self.window._above: 

89 return "ticked.png" 

90 return "unticked.png" 

91 def toggle_above(*args): 

92 above = not self.window._above 

93 log("toggle_above%s above=%s", args, above) 

94 self.window._above = above 

95 self.window.set_keep_above(above) 

96 from xpra.platform.gui import get_icon_size 

97 icon_size = self.menu_icon_size or get_icon_size() 

98 image = self.get_image(icon_name(), icon_size) 

99 self.above_menuitem.set_image(image) 

100 self.above_menuitem = self.menuitem("Always on top", icon_name(), None, toggle_above) 

101 return self.above_menuitem 

102 

103 

104 def make_refreshmenuitem(self): 

105 def force_refresh(*args): 

106 log("force refresh%s", args) 

107 self.client.send_refresh(self.window._id) 

108 reset_icon = getattr(self.window, "reset_icon", None) 

109 if reset_icon: 

110 reset_icon() 

111 return self.menuitem("Refresh", "retry.png", None, force_refresh) 

112 

113 def make_reinitmenuitem(self): 

114 def force_reinit(*args): 

115 log("force reinit%s", args) 

116 self.client.reinit_window(self.window._id, self.window) 

117 reset_icon = getattr(self.window, "reset_icon", None) 

118 if reset_icon: 

119 reset_icon() 

120 return self.menuitem("Re-initialize", "reinitialize.png", None, force_reinit) 

121 

122 def make_closemenuitem(self): 

123 def close(*args): 

124 log("close(%s)", args) 

125 self.window.close() 

126 return self.menuitem("Close", "close.png", None, close)