- Detect monitor changes

This commit is contained in:
trigg 2022-07-14 18:24:46 +01:00
parent aba339a3ab
commit e0af5fe87f
3 changed files with 87 additions and 16 deletions

View file

@ -94,18 +94,15 @@ class Discover:
Gtk.main()
def periodic_run(self, data=None):
self.voice_overlay.check_composite()
if self.voice_overlay.needsredraw:
self.voice_overlay.redraw()
if self.text_overlay:
self.text_overlay.check_composite()
self.text_overlay.tick()
if self.text_overlay.needsredraw:
self.text_overlay.redraw()
if self.notification_overlay:
self.notification_overlay.check_composite()
self.notification_overlay.tick()
if self.notification_overlay.enabled and self.notification_overlay.needsredraw:
self.notification_overlay.redraw()

View file

@ -56,7 +56,6 @@ class OverlayWindow(Gtk.Window):
Gtk.Window.__init__(self, type=self.detect_type())
self.discover = discover
screen = self.get_screen()
self.compositing = False
self.text_font = None
self.text_size = None
self.pos_x = None
@ -78,8 +77,6 @@ class OverlayWindow(Gtk.Window):
if visual:
# Set the visual even if we can't use it right now
self.set_visual(visual)
if screen.is_composited():
self.compositing = True
self.set_app_paintable(True)
self.set_untouchable()
@ -105,6 +102,8 @@ class OverlayWindow(Gtk.Window):
if piggyback:
self.set_piggyback(piggyback)
self.get_screen().connect("composited-changed", self.check_composite)
def set_gamescope_xatom(self, enabled):
display = Display()
atom = display.intern_atom("GAMESCOPE_EXTERNAL_OVERLAY")
@ -250,7 +249,8 @@ class OverlayWindow(Gtk.Window):
self.width = width
self.height = height
if gdkwin:
if not self.compositing or self.force_xshape:
compositing = self.get_screen().is_composited()
if not compositing or self.force_xshape:
(width, height) = self.get_size()
surface = cairo.ImageSurface(
cairo.FORMAT_ARGB32, width, height)
@ -337,7 +337,5 @@ class OverlayWindow(Gtk.Window):
self.set_skip_pager_hint(not visible)
self.set_skip_taskbar_hint(not visible)
def check_composite(self):
screen = self.get_screen()
if not self.compositing == screen.is_composited():
self.needsredraw = True
def check_composite(self, _a=None, _b=None):
self.redraw()

View file

@ -18,6 +18,7 @@ import pkg_resources
import sys
import os
import json
from .autostart import Autostart
from configparser import ConfigParser
gi.require_version("Gtk", "3.0")
@ -35,6 +36,12 @@ class MainSettingsWindow():
def __init__(self, config_file):
self.autostart_helper = Autostart("discover_overlay")
self.ind = None
self.menu = self.make_menu()
self.make_sys_tray_icon(self.menu)
self.config_file = config_file
builder = Gtk.Builder.new_from_file(pkg_resources.resource_filename(
@ -85,13 +92,29 @@ class MainSettingsWindow():
css, Gtk.STYLE_PROVIDER_PRIORITY_USER)
self.window = window
# Fill monitor menus
self.populate_monitor_menus()
window.get_screen().connect("monitors-changed", self.populate_monitor_menus)
self.read_config()
builder.connect_signals(self)
window.show()
self.menu = self.make_menu()
self.make_sys_tray_icon(self.menu)
# builder.connect_signals(self)
def populate_monitor_menus(self, _a = None, _b = None):
v= self.widget['voice_monitor']
t= self.widget['text_monitor']
m= self.widget['notification_monitor']
v.remove_all()
t.remove_all()
m.remove_all()
display = Gdk.Display.get_default()
if "get_n_monitors" in dir(display):
for i in range(0, display.get_n_monitors()):
v.append_text(display.get_monitor(i).get_model())
t.append_text(display.get_monitor(i).get_model())
m.append_text(display.get_monitor(i).get_model())
def close_window(self, widget=None, event=None):
"""
@ -100,7 +123,7 @@ class MainSettingsWindow():
self.window.hide()
return True
def present_settings(self):
def present_settings(self, _a = None):
"""
Show the settings window
"""
@ -266,9 +289,62 @@ class MainSettingsWindow():
config.getint("text", "line_limit", fallback=20))
# Read Notification section
self.widget['notification_enable'].set_active(config.getboolean("notification", "enabled", fallback=False))
self.widget['notification_reverse_order'].set_active(config.getboolean("notification", "rev", fallback=False))
self.widget['notification_popup_timer'].set_value(config.getint("notification", "text_time", fallback=10))
self.widget['notification_limit_popup_width'].set_value(config.getint("notification", "limit_width", fallback=400))
font = config.get("notification", "font", fallback=None)
if font:
self.widget['notification_font'].set_font(font)
self.widget['notification_text_colour'].set_rgba(self.make_colour(config.get(
"notification", "fg_col", fallback="[1.0,1.0,1.0,1.0]")))
self.widget['notification_background_colour'].set_rgba(self.make_colour(config.get(
"notification", "bg_col", fallback="[0.0,0.0,0.0,0.5]")))
self.widget['notification_monitor'].set_active(self.get_monitor_index(
config.get("notification", "monitor", fallback="None")))
self.widget['notification_align_1'].set_active(config.getboolean(
"notification", "rightalign", fallback=True))
self.widget['notification_align_2'].set_active(config.getint("notification", "topalign", fallback=2))
self.widget['notification_show_icon'].set_active(config.getboolean("notification", "show_icon", fallback=True))
self.widget['notification_icon_position'].set_active(config.getboolean(
"notification", "icon_left", fallback=True))
self.widget['notification_icon_padding'].set_value(config.getint(
"notification", "icon_padding", fallback=8))
self.widget['notification_icon_size'].set_value(config.getint(
"notification", "icon_size", fallback=32))
self.widget['notification_padding_between'].set_value(config.getint(
"notification", "padding", fallback=8))
self.widget['notification_border_radius'].set_value(config.getint(
"notification", "border_radius", fallback=8))
self.widget['notification_show_test_content'].set_active(config.getboolean(
"notification", "show_dummy", fallback=False))
# Read Core section
self.widget['core_run_on_startup'].set_active(self.autostart_helper.is_auto())
self.widget['core_force_xshape'].set_active(config.getboolean("general", "xshape", fallback=False))
self.show_sys_tray_icon = config.getboolean(
"general", "showsystray", fallback=True)
self.set_sys_tray_icon_visible(self.show_sys_tray_icon)
self.widget['core_show_tray_icon'].set_active(self.show_sys_tray_icon)
def make_colour(self, col):
col = json.loads(col)
return Gdk.RGBA(col[0], col[1], col[2], col[3])