From e0af5fe87f4d8b47278743f9c26c0ea3ea803dbf Mon Sep 17 00:00:00 2001 From: trigg Date: Thu, 14 Jul 2022 18:24:46 +0100 Subject: [PATCH] - Detect monitor changes --- discover_overlay/discover_overlay.py | 3 - discover_overlay/overlay.py | 14 ++--- discover_overlay/settings_window.py | 86 ++++++++++++++++++++++++++-- 3 files changed, 87 insertions(+), 16 deletions(-) diff --git a/discover_overlay/discover_overlay.py b/discover_overlay/discover_overlay.py index 2da55d2..4eb45dc 100755 --- a/discover_overlay/discover_overlay.py +++ b/discover_overlay/discover_overlay.py @@ -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() diff --git a/discover_overlay/overlay.py b/discover_overlay/overlay.py index 2e421c1..e59e493 100644 --- a/discover_overlay/overlay.py +++ b/discover_overlay/overlay.py @@ -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() diff --git a/discover_overlay/settings_window.py b/discover_overlay/settings_window.py index b71c223..663ca2e 100644 --- a/discover_overlay/settings_window.py +++ b/discover_overlay/settings_window.py @@ -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])