- Detect monitor changes
This commit is contained in:
parent
aba339a3ab
commit
e0af5fe87f
3 changed files with 87 additions and 16 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue