roundabout,
created on Saturday, 23 August 2025, 15:04:32 (1755961472),
received on Saturday, 23 August 2025, 19:06:24 (1755975984)
Author identity: Scott Moreau <oreaus@gmail.com>
8e2182d63d80af5f8c394e31191280ee45116ef6
applets/wf-window-list/__init__.py
@@ -334,74 +334,23 @@ class WindowButton(Gtk.ToggleButton):
# Due to a bug, the constructor may sometimes return C NULL pass class TooltipMedia(Gtk.GLArea):class TooltipMedia(Gtk.Picture):def __init__(self, window_list): super().__init__() self.frame: ZwlrScreencopyFrameV1 = None self.screencopy_manager = window_list.screencopy_manager self.wl_shm = window_list.wl_shm self.window_list = window_list self.set_auto_render(False)self.connect("render", self.on_render)self.buffer_width = 200 self.buffer_height = 200 self.buffer_stride = 200 * 4self.screencopy_data = None self.wl_buffer = None self.size = 0 self.add_tick_callback(self.on_tick) self.vertices = [1.0, 1.0,-1.0, 1.0,-1.0, -1.0,1.0, -1.0,]self.uv_coords = [1.0, 0.0,0.0, 0.0,0.0, 1.0,1.0, 1.0,]vertex_shader_source = """precision highp float;attribute vec2 in_position;attribute vec2 uvpos;varying vec2 uv;void main() {uv = uvpos;gl_Position = vec4(in_position, 0.0, 1.0);}"""fragment_shader_source = """precision highp float;uniform sampler2D texture;varying vec2 uv;void main() {gl_FragColor = texture2D(texture, uv);}"""vertex_shader = GL.glCreateShader(GL.GL_VERTEX_SHADER)fragment_shader = GL.glCreateShader(GL.GL_FRAGMENT_SHADER)GL.glShaderSource(vertex_shader, vertex_shader_source)GL.glShaderSource(fragment_shader, fragment_shader_source)GL.glCompileShader(vertex_shader)GL.glCompileShader(fragment_shader)self.shader_program = GL.glCreateProgram()GL.glAttachShader(self.shader_program, vertex_shader)GL.glAttachShader(self.shader_program, fragment_shader)GL.glLinkProgram(self.shader_program)self.texture_id = GL.glGenTextures(1)GL.glBindTexture(GL.GL_TEXTURE_2D, self.texture_id)GL.glTexParameterf(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR)GL.glTexParameterf(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR)self.request_next_frame()
@@ -420,20 +369,24 @@ class TooltipMedia(Gtk.GLArea):
anon_file.close() self.buffer_width = width self.buffer_height = height self.buffer_stride = strideself.frame.copy(self.wl_buffer) def frame_ready(self, frame, tv_sec_hi, tv_sec_low, tv_nsec): self.screencopy_data.seek(0) GL.glBindTexture(GL.GL_TEXTURE_2D, self.texture_id)GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA, self.buffer_width, self.buffer_height, 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, self.screencopy_data.read(self.size))self.request_next_frame()texture = Gdk.MemoryTexture.new( width=self.buffer_width, height=self.buffer_height, format=Gdk.MemoryFormat.R8G8B8A8, bytes=GLib.Bytes(self.screencopy_data.read(self.size)), stride=self.buffer_stride ) self.set_paintable(texture)def request_next_frame(self): if self.frame: self.frame.destroy() self.queue_render()wl_output = self.window_list.get_live_preview_output() if not wl_output:
@@ -443,22 +396,7 @@ class TooltipMedia(Gtk.GLArea):
self.frame.dispatcher["buffer"] = self.frame_handle_buffer self.frame.dispatcher["ready"] = self.frame_ready def on_render(self, gl_area, gl_context):Gdk.GLContext.make_current(gl_context)GL.glClear(GL.GL_COLOR_BUFFER_BIT)GL.glUseProgram(self.shader_program)GL.glBindTexture(GL.GL_TEXTURE_2D, self.texture_id)GL.glEnableVertexAttribArray(0);GL.glVertexAttribPointer(0, 2, GL.GL_FLOAT, GL.GL_FALSE, 0, self.vertices);GL.glEnableVertexAttribArray(1);GL.glVertexAttribPointer(1, 2, GL.GL_FLOAT, GL.GL_FALSE, 0, self.uv_coords);GL.glDrawArrays(GL.GL_TRIANGLE_FAN, 0, 4);GL.glDisableVertexAttribArray(0);GL.glDisableVertexAttribArray(1);GL.glBindTexture(GL.GL_TEXTURE_2D, 0)gl_area.queue_draw()def on_tick(self, widget, frame_clock):def on_tick(self, widget, clock):self.request_next_frame() return GLib.SOURCE_CONTINUE
@@ -525,6 +463,10 @@ class WFWindowList(panorama_panel.Applet):
self.get_msg_template = get_msg_template if "live_previews/request_stream" in self.wf_socket.list_methods(): self.live_preview_tooltips = True print("WFWindowList: Live Preview Tooltips: enabled") else: print("WFWindowList: Live Preview Tooltips: disabled") print("- Live preview tooltips requires wayfire wf-live-previews plugin. Is it enabled?")self.wf_socket.watch(["view-workspace-changed", "wset-workspace-changed"]) fd = self.wf_socket.client.fileno() GLib.io_add_watch(GLib.IOChannel.unix_new(fd), GLib.IO_IN, self.on_wf_event, priority=GLib.PRIORITY_HIGH)