Coverage for /home/antoine/projects/xpra-git/dist/python3/lib64/python/xpra/client/gtk3/window_menu.py : 16%
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.
6from gi.repository import Gtk, Gdk
8from xpra.client.gtk_base.menu_helper import MenuHelper
9from xpra.log import Logger
11log = Logger("gtk", "window")
14class WindowMenuHelper(MenuHelper):
16 def __init__(self, client, window):
17 super().__init__(client)
18 self.window = window
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
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
47 def make_openglmenuitem(self):
48 gl = self.checkitem("OpenGL")
49 gl.set_tooltip_text("hardware accelerated rendering using OpenGL")
50 return gl
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)
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
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)
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
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)
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)
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)