- Fix hide overlay option

- Added settings keypress handler
- - Override arrow key behaviour to always be navigation
- - Add space/escape keys to focus on specific widgets
- - when focused allow alerting of number
- - Highlight focused widget
- - F1/F2 to switch tabs
- Moved advanced voice options to another tab
- Changed float/edge option to a pull-down box
-Fixed bug where mouse-over options reset to default in settings
- Fixed show/hide on float/edge options
This commit is contained in:
trigg 2024-03-26 21:20:40 +00:00
parent 29f8c7476c
commit 2243681f63
3 changed files with 1497 additions and 1404 deletions

File diff suppressed because it is too large Load diff

View file

@ -424,17 +424,16 @@ class OverlayWindow(Gtk.Window):
""" """
Set if this overlay should be visible Set if this overlay should be visible
""" """
if self.enabled != enabled: self.enabled = enabled
self.enabled = enabled if enabled and not self.hidden and not self.piggyback_parent:
if enabled and not self.hidden and not self.piggyback_parent: self.show_all()
self.show_all() self.set_untouchable()
self.set_untouchable() if self.discover.steamos:
if self.discover.steamos: self.set_gamescope_xatom(1)
self.set_gamescope_xatom(1) else:
else: if self.discover.steamos:
if self.discover.steamos: self.set_gamescope_xatom(0)
self.set_gamescope_xatom(0) self.hide()
self.hide()
def set_task(self, visible): def set_task(self, visible):
self.set_skip_pager_hint(not visible) self.set_skip_pager_hint(not visible)

View file

@ -46,6 +46,9 @@ class MainSettingsWindow():
self.icon_name = "discover-overlay" self.icon_name = "discover-overlay"
self.tray_icon_name = "discover-overlay-tray" self.tray_icon_name = "discover-overlay-tray"
self.spinning_focus = None
self.scale_focus = None
icon_theme = Gtk.IconTheme.get_default() icon_theme = Gtk.IconTheme.get_default()
icon_theme.add_resource_path(os.path.expanduser( icon_theme.add_resource_path(os.path.expanduser(
'~/.local/share/pipx/venvs/discover-overlay/share/icons')) '~/.local/share/pipx/venvs/discover-overlay/share/icons'))
@ -58,7 +61,6 @@ class MainSettingsWindow():
self.steamos = False self.steamos = False
self.voice_placement_window = None self.voice_placement_window = None
self.text_placement_window = None self.text_placement_window = None
self.voice_advanced = False
self.tray = None # Systemtray as fallback self.tray = None # Systemtray as fallback
self.ind = None # AppIndicator self.ind = None # AppIndicator
if self.alternative_autostart: if self.alternative_autostart:
@ -126,7 +128,6 @@ class MainSettingsWindow():
if settings: if settings:
settings.set_property( settings.set_property(
"gtk-application-prefer-dark-theme", Gtk.true) "gtk-application-prefer-dark-theme", Gtk.true)
self.widget['notebook'].set_tab_pos(Gtk.PositionType.LEFT)
# TODO Not assume the display size. Probably poll it from GDK Display? # TODO Not assume the display size. Probably poll it from GDK Display?
window.set_default_size(1280, 800) window.set_default_size(1280, 800)
@ -135,12 +136,16 @@ class MainSettingsWindow():
css.load_from_data(bytes("* { font-size:18px; }", "utf-8")) css.load_from_data(bytes("* { font-size:18px; }", "utf-8"))
window.get_style_context().add_provider( window.get_style_context().add_provider(
css, Gtk.STYLE_PROVIDER_PRIORITY_USER) css, Gtk.STYLE_PROVIDER_PRIORITY_USER)
# Space is premium. Sorry Craig
self.widget['voice_advanced_grid'].set_column_homogeneous(False)
else: else:
self.widget['overview_close_button'].hide() self.widget['overview_close_button'].hide()
self.super_focus = Gtk.CssProvider.new()
self.super_focus.load_from_data(
bytes(
"""scale { background-color: rgba(100%, 0%, 0%, 0.3); background-image:unset; }
spinbutton { background-color: rgba(100%, 0%, 0%, 0.3); background-image:unset;}
""", "utf-8"))
screen = window.get_screen() screen = window.get_screen()
screen_type = "%s" % (screen) screen_type = "%s" % (screen)
self.is_wayland = False self.is_wayland = False
@ -168,6 +173,7 @@ class MainSettingsWindow():
self.populate_guild_menu() self.populate_guild_menu()
builder.connect_signals(self) builder.connect_signals(self)
window.connect('key-press-event', self.keypress_in_settings)
if '--minimized' in self.args: if '--minimized' in self.args:
self.start_minimized = True self.start_minimized = True
@ -179,6 +185,93 @@ class MainSettingsWindow():
self.icon_name, Gtk.IconSize.DIALOG) self.icon_name, Gtk.IconSize.DIALOG)
self.widget['window'].set_default_icon_name(self.icon_name) self.widget['window'].set_default_icon_name(self.icon_name)
def keypress_in_settings(self, window, event):
if self.spinning_focus:
match event.keyval:
case Gdk.KEY_Right:
step = self.spinning_focus.get_increments().step
value = self.spinning_focus.get_value()
self.spinning_focus.set_value(value + step)
pass
case Gdk.KEY_Left:
step = self.spinning_focus.get_increments().step
value = self.spinning_focus.get_value()
self.spinning_focus.set_value(value - step)
pass
case Gdk.KEY_Up:
step = self.spinning_focus.get_increments().step
value = self.spinning_focus.get_value()
self.spinning_focus.set_value(value + step)
case Gdk.KEY_Down:
step = self.spinning_focus.get_increments().step
value = self.spinning_focus.get_value()
self.spinning_focus.set_value(value - step)
case Gdk.KEY_space:
self.spinning_focus.get_style_context().remove_provider(self.super_focus)
self.spinning_focus = None
case Gdk.KEY_Escape:
self.spinning_focus.get_style_context().remove_provider(self.super_focus)
self.spinning_focus = None
elif self.scale_focus:
match event.keyval:
case Gdk.KEY_Right:
value = self.scale_focus.get_value()
self.scale_focus.set_value(value + 0.1)
pass
case Gdk.KEY_Left:
value = self.scale_focus.get_value()
self.scale_focus.set_value(value - 0.1)
pass
case Gdk.KEY_Up:
value = self.scale_focus.get_value()
self.scale_focus.set_value(value + 0.1)
case Gdk.KEY_Down:
value = self.scale_focus.get_value()
self.scale_focus.set_value(value - 0.1)
case Gdk.KEY_space:
self.scale_focus.get_style_context().remove_provider(self.super_focus)
self.scale_focus = None
case Gdk.KEY_Escape:
self.scale_focus.get_style_context().remove_provider(self.super_focus)
self.scale_focus = None
else:
match event.keyval:
case Gdk.KEY_Left:
window.do_move_focus(window, Gtk.DirectionType.LEFT)
case Gdk.KEY_Right:
window.do_move_focus(window, Gtk.DirectionType.RIGHT)
case Gdk.KEY_Up:
window.do_move_focus(window, Gtk.DirectionType.UP)
case Gdk.KEY_Down:
window.do_move_focus(window, Gtk.DirectionType.DOWN)
case Gdk.KEY_F1:
self.widget['notebook'].prev_page()
case Gdk.KEY_F2:
self.widget['notebook'].next_page()
case Gdk.KEY_Escape:
return True
case Gdk.KEY_space:
widget = self.window.get_focus()
if widget:
# I really want there to be a better way...
widget_type = "%s" % (widget)
if 'Gtk.SpinButton' in widget_type:
self.spinning_focus = widget
widget.get_style_context().add_provider(
self.super_focus, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
return True
elif 'Gtk.Scale' in widget_type:
self.scale_focus = widget
widget.get_style_context().add_provider(
self.super_focus, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
return True
return False
case _:
return False
return True
def request_channels_from_guild(self, guild_id): def request_channels_from_guild(self, guild_id):
with open(self.rpc_file, 'w') as f: with open(self.rpc_file, 'w') as f:
f.write('--rpc --guild-request=%s' % (guild_id)) f.write('--rpc --guild-request=%s' % (guild_id))
@ -284,7 +377,6 @@ class MainSettingsWindow():
def read_config(self): def read_config(self):
self.loading_config = True self.loading_config = True
self.widget['voice_advanced_grid'].hide()
# Read config and put into gui # Read config and put into gui
config = ConfigParser(interpolation=None) config = ConfigParser(interpolation=None)
@ -299,10 +391,10 @@ class MainSettingsWindow():
self.voice_floating_h = config.getint( self.voice_floating_h = config.getint(
"main", "floating_h", fallback=400) "main", "floating_h", fallback=400)
if config.getboolean("main", "floating", fallback=False): self.widget['voice_anchor_float'].set_active(
self.widget['voice_floating_button'].set_active(True) 0 if config.getboolean("main", "floating", fallback=False) else 1)
else: self.update_floating_ahchor()
self.widget['voice_anchor_to_edge_button'].set_active(True)
self.widget['voice_align_1'].set_active( self.widget['voice_align_1'].set_active(
config.getboolean("main", "rightalign", fallback=False)) config.getboolean("main", "rightalign", fallback=False))
self.widget['voice_align_2'].set_active( self.widget['voice_align_2'].set_active(
@ -438,6 +530,12 @@ class MainSettingsWindow():
self.widget['voice_inactive_fade_time'].set_value( self.widget['voice_inactive_fade_time'].set_value(
config.getint("main", "inactive_fade_time", fallback=30) config.getint("main", "inactive_fade_time", fallback=30)
) )
self.widget['voice_hide_mouseover'].set_active(
config.getboolean("main", "autohide", fallback=False)
)
self.widget['voice_show_mouseover'].set_value(
config.getint("main", "autohide_timer", fallback=5)
)
# Read Text section # Read Text section
@ -486,6 +584,13 @@ class MainSettingsWindow():
self.widget['text_line_limit'].set_value( self.widget['text_line_limit'].set_value(
config.getint("text", "line_limit", fallback=20)) config.getint("text", "line_limit", fallback=20))
self.widget['text_hide_mouseover'].set_active(
config.getboolean("text", "autohide", fallback=False)
)
self.widget['text_show_mouseover'].set_value(
config.getint("text", "autohide_timer", fallback=5)
)
# Read Notification section # Read Notification section
self.widget['notification_enable'].set_active( self.widget['notification_enable'].set_active(
config.getboolean("notification", "enabled", fallback=False)) config.getboolean("notification", "enabled", fallback=False))
@ -829,11 +934,20 @@ class MainSettingsWindow():
with open(self.config_file, 'w') as file: with open(self.config_file, 'w') as file:
config.write(file) config.write(file)
def voice_anchor_to_edge_changed(self, button): def voice_anchor_float_changed(self, button):
self.config_set("main", "floating", "False") self.config_set("main", "floating", "%s" % (button.get_active() == 0))
self.update_floating_ahchor()
def voice_floating_changed(self, button): def update_floating_ahchor(self):
self.config_set("main", "floating", "True") floating = self.widget['voice_anchor_float'].get_active() == 0
if floating:
self.widget['voice_align_1'].hide()
self.widget['voice_align_2'].hide()
self.widget['voice_place_window_button'].show()
else:
self.widget['voice_align_1'].show()
self.widget['voice_align_2'].show()
self.widget['voice_place_window_button'].hide()
def voice_monitor_changed(self, button): def voice_monitor_changed(self, button):
self.config_set("main", "monitor", "%s" % (button.get_active())) self.config_set("main", "monitor", "%s" % (button.get_active()))
@ -844,13 +958,6 @@ class MainSettingsWindow():
def voice_align_2_changed(self, button): def voice_align_2_changed(self, button):
self.config_set("main", "topalign", "%s" % (button.get_active())) self.config_set("main", "topalign", "%s" % (button.get_active()))
def voice_show_advanced_options_button_changed(self, button):
self.voice_advanced = not self.voice_advanced
if self.voice_advanced:
self.widget['voice_advanced_grid'].show()
else:
self.widget['voice_advanced_grid'].hide()
def voice_font_changed(self, button): def voice_font_changed(self, button):
self.config_set("main", "font", button.get_font()) self.config_set("main", "font", button.get_font())