mirror of
https://github.com/GradienceTeam/Gradience.git
synced 2024-09-18 01:52:32 +00:00
Format code with black and autopep8 (#350)
This commit is contained in:
commit
bb433ffa69
19 changed files with 388 additions and 355 deletions
|
@ -37,7 +37,7 @@ class GradienceAppTypeDialog(Adw.MessageDialog):
|
||||||
ok_response_name,
|
ok_response_name,
|
||||||
ok_response_label,
|
ok_response_label,
|
||||||
ok_response_appearance,
|
ok_response_appearance,
|
||||||
**kwargs
|
**kwargs,
|
||||||
):
|
):
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self.set_heading(heading)
|
self.set_heading(heading)
|
||||||
|
|
|
@ -32,6 +32,5 @@ class GradienceBuiltinPresetRow(Adw.ActionRow):
|
||||||
buglog("apply")
|
buglog("apply")
|
||||||
|
|
||||||
self.app.load_preset_from_resource(
|
self.app.load_preset_from_resource(
|
||||||
f"{rootdir}/presets/"
|
f"{rootdir}/presets/" + to_slug_case(self.name) + ".json"
|
||||||
+ to_slug_case(self.name) + ".json"
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -35,14 +35,16 @@ class GradienceCustomCSSGroup(Adw.PreferencesGroup):
|
||||||
def load_custom_css(self, custom_css):
|
def load_custom_css(self, custom_css):
|
||||||
self.custom_css = custom_css
|
self.custom_css = custom_css
|
||||||
self.custom_css_text_view.get_buffer().set_text(
|
self.custom_css_text_view.get_buffer().set_text(
|
||||||
list(self.custom_css.values())[self.app_type_dropdown.get_selected()]
|
list(self.custom_css.values())[
|
||||||
|
self.app_type_dropdown.get_selected()]
|
||||||
)
|
)
|
||||||
|
|
||||||
@Gtk.Template.Callback()
|
@Gtk.Template.Callback()
|
||||||
def on_custom_css_changed(self, buffer):
|
def on_custom_css_changed(self, buffer):
|
||||||
Gtk.Application.get_default().mark_as_dirty()
|
Gtk.Application.get_default().mark_as_dirty()
|
||||||
Gtk.Application.get_default().update_custom_css_text(
|
Gtk.Application.get_default().update_custom_css_text(
|
||||||
list(self.custom_css.keys())[self.app_type_dropdown.get_selected()],
|
list(self.custom_css.keys())[
|
||||||
|
self.app_type_dropdown.get_selected()],
|
||||||
buffer.props.text,
|
buffer.props.text,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -50,5 +52,6 @@ class GradienceCustomCSSGroup(Adw.PreferencesGroup):
|
||||||
def on_dropdown_notify(self, _unused, pspec):
|
def on_dropdown_notify(self, _unused, pspec):
|
||||||
if pspec.name == "selected":
|
if pspec.name == "selected":
|
||||||
self.custom_css_text_view.get_buffer().set_text(
|
self.custom_css_text_view.get_buffer().set_text(
|
||||||
list(self.custom_css.values())[self.app_type_dropdown.get_selected()]
|
list(self.custom_css.values())[
|
||||||
|
self.app_type_dropdown.get_selected()]
|
||||||
)
|
)
|
||||||
|
|
|
@ -60,17 +60,18 @@ class GradienceExplorePresetRow(Adw.ActionRow):
|
||||||
)
|
)
|
||||||
buglog(exception)
|
buglog(exception)
|
||||||
else:
|
else:
|
||||||
self.app.load_preset_from_file(os.path.join(
|
self.app.load_preset_from_file(
|
||||||
|
os.path.join(
|
||||||
os.environ.get("XDG_CONFIG_HOME",
|
os.environ.get("XDG_CONFIG_HOME",
|
||||||
os.environ["HOME"] + "/.config"),
|
os.environ["HOME"] + "/.config"),
|
||||||
"presets",
|
"presets",
|
||||||
self.prefix,
|
self.prefix,
|
||||||
to_slug_case(self.name) + ".json",
|
to_slug_case(self.name) + ".json",
|
||||||
))
|
)
|
||||||
|
)
|
||||||
|
|
||||||
self.toast_overlay.add_toast(
|
self.toast_overlay.add_toast(
|
||||||
Adw.Toast(title=_("Preset downloaded"))
|
Adw.Toast(title=_("Preset downloaded")))
|
||||||
)
|
|
||||||
self.win.reload_pref_group()
|
self.win.reload_pref_group()
|
||||||
|
|
||||||
buglog("Apply and download compeleted")
|
buglog("Apply and download compeleted")
|
||||||
|
@ -86,7 +87,6 @@ class GradienceExplorePresetRow(Adw.ActionRow):
|
||||||
buglog(exception)
|
buglog(exception)
|
||||||
else:
|
else:
|
||||||
self.toast_overlay.add_toast(
|
self.toast_overlay.add_toast(
|
||||||
Adw.Toast(title=_("Preset downloaded"))
|
Adw.Toast(title=_("Preset downloaded")))
|
||||||
)
|
|
||||||
self.win.reload_pref_group()
|
self.win.reload_pref_group()
|
||||||
buglog("Download compeleted")
|
buglog("Download compeleted")
|
||||||
|
|
157
src/main.py
157
src/main.py
|
@ -31,7 +31,15 @@ from .palette_shades import GradiencePaletteShades
|
||||||
from .option import GradienceOption
|
from .option import GradienceOption
|
||||||
from .app_type_dialog import GradienceAppTypeDialog
|
from .app_type_dialog import GradienceAppTypeDialog
|
||||||
from .custom_css_group import GradienceCustomCSSGroup
|
from .custom_css_group import GradienceCustomCSSGroup
|
||||||
from .constants import rootdir, app_id, rel_ver, version, bugtracker_url, help_url, project_url
|
from .constants import (
|
||||||
|
rootdir,
|
||||||
|
app_id,
|
||||||
|
rel_ver,
|
||||||
|
version,
|
||||||
|
bugtracker_url,
|
||||||
|
help_url,
|
||||||
|
project_url,
|
||||||
|
)
|
||||||
from .welcome import GradienceWelcomeWindow
|
from .welcome import GradienceWelcomeWindow
|
||||||
from .preferences import GradiencePreferencesWindow
|
from .preferences import GradiencePreferencesWindow
|
||||||
from .modules.utils import to_slug_case, buglog
|
from .modules.utils import to_slug_case, buglog
|
||||||
|
@ -40,15 +48,13 @@ from .plugins_list import GradiencePluginsList
|
||||||
|
|
||||||
class GradienceApplication(Adw.Application):
|
class GradienceApplication(Adw.Application):
|
||||||
"""The main application singleton class."""
|
"""The main application singleton class."""
|
||||||
|
|
||||||
__gtype_name__ = "GradienceApplication"
|
__gtype_name__ = "GradienceApplication"
|
||||||
|
|
||||||
settings = Gio.Settings.new(app_id)
|
settings = Gio.Settings.new(app_id)
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__(
|
super().__init__(application_id=app_id, flags=Gio.ApplicationFlags.FLAGS_NONE)
|
||||||
application_id=app_id,
|
|
||||||
flags=Gio.ApplicationFlags.FLAGS_NONE
|
|
||||||
)
|
|
||||||
self.set_resource_base_path(rootdir)
|
self.set_resource_base_path(rootdir)
|
||||||
|
|
||||||
self.portal = Xdp.Portal()
|
self.portal = Xdp.Portal()
|
||||||
|
@ -95,28 +101,21 @@ class GradienceApplication(Adw.Application):
|
||||||
GLib.Variant("s", "adwaita"),
|
GLib.Variant("s", "adwaita"),
|
||||||
self.load_preset_action,
|
self.load_preset_action,
|
||||||
)
|
)
|
||||||
self.create_action(
|
self.create_action("apply_color_scheme",
|
||||||
"apply_color_scheme",
|
|
||||||
self.show_apply_color_scheme_dialog)
|
self.show_apply_color_scheme_dialog)
|
||||||
|
|
||||||
self.create_action(
|
self.create_action("show_adwaita_demo", self.show_adwaita_demo)
|
||||||
"show_adwaita_demo",
|
|
||||||
self.show_adwaita_demo)
|
|
||||||
|
|
||||||
self.create_action(
|
self.create_action("show_gtk4_widget_factory",
|
||||||
"show_gtk4_widget_factory",
|
|
||||||
self.show_gtk4_widget_factory)
|
self.show_gtk4_widget_factory)
|
||||||
|
|
||||||
self.create_action(
|
self.create_action("show_gtk4_demo", self.show_gtk4_demo)
|
||||||
"show_gtk4_demo",
|
|
||||||
self.show_gtk4_demo)
|
|
||||||
|
|
||||||
self.create_action(
|
self.create_action(
|
||||||
"restore_color_scheme",
|
"restore_color_scheme", self.show_restore_color_scheme_dialog
|
||||||
self.show_restore_color_scheme_dialog)
|
)
|
||||||
|
|
||||||
self.create_action(
|
self.create_action("reset_color_scheme",
|
||||||
"reset_color_scheme",
|
|
||||||
self.show_reset_color_scheme_dialog)
|
self.show_reset_color_scheme_dialog)
|
||||||
self.create_action("preferences", self.show_preferences)
|
self.create_action("preferences", self.show_preferences)
|
||||||
self.create_action("save_preset", self.show_save_preset_dialog)
|
self.create_action("save_preset", self.show_save_preset_dialog)
|
||||||
|
@ -124,12 +123,9 @@ class GradienceApplication(Adw.Application):
|
||||||
|
|
||||||
if self.style_manager.get_dark():
|
if self.style_manager.get_dark():
|
||||||
self.load_preset_from_resource(
|
self.load_preset_from_resource(
|
||||||
f"{rootdir}/presets/adwaita-dark.json"
|
f"{rootdir}/presets/adwaita-dark.json")
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
self.load_preset_from_resource(
|
self.load_preset_from_resource(f"{rootdir}/presets/adwaita.json")
|
||||||
f"{rootdir}/presets/adwaita.json"
|
|
||||||
)
|
|
||||||
|
|
||||||
if self.first_run:
|
if self.first_run:
|
||||||
buglog("first run")
|
buglog("first run")
|
||||||
|
@ -147,12 +143,10 @@ class GradienceApplication(Adw.Application):
|
||||||
|
|
||||||
self.portal.open_uri(
|
self.portal.open_uri(
|
||||||
parent,
|
parent,
|
||||||
"file://" +
|
"file://"
|
||||||
os.path.join(
|
+ os.path.join(
|
||||||
os.environ.get(
|
os.environ.get("XDG_CONFIG_HOME",
|
||||||
"XDG_CONFIG_HOME",
|
os.environ["HOME"] + "/.config"),
|
||||||
os.environ["HOME"] +
|
|
||||||
"/.config"),
|
|
||||||
"presets",
|
"presets",
|
||||||
),
|
),
|
||||||
Xdp.OpenUriFlags.NONE,
|
Xdp.OpenUriFlags.NONE,
|
||||||
|
@ -286,13 +280,17 @@ class GradienceApplication(Adw.Application):
|
||||||
"window_fg_color": self.rgba_from_argb(light_theme.onSurface),
|
"window_fg_color": self.rgba_from_argb(light_theme.onSurface),
|
||||||
"view_bg_color": self.rgba_from_argb(light_theme.secondaryContainer),
|
"view_bg_color": self.rgba_from_argb(light_theme.secondaryContainer),
|
||||||
"view_fg_color": self.rgba_from_argb(light_theme.onSurface),
|
"view_fg_color": self.rgba_from_argb(light_theme.onSurface),
|
||||||
"headerbar_bg_color": self.rgba_from_argb(light_theme.secondaryContainer),
|
"headerbar_bg_color": self.rgba_from_argb(
|
||||||
|
light_theme.secondaryContainer
|
||||||
|
),
|
||||||
"headerbar_fg_color": self.rgba_from_argb(light_theme.onSurface),
|
"headerbar_fg_color": self.rgba_from_argb(light_theme.onSurface),
|
||||||
"headerbar_border_color": self.rgba_from_argb(
|
"headerbar_border_color": self.rgba_from_argb(
|
||||||
light_theme.primary, "0.8"
|
light_theme.primary, "0.8"
|
||||||
),
|
),
|
||||||
"headerbar_backdrop_color": "@window_bg_color",
|
"headerbar_backdrop_color": "@window_bg_color",
|
||||||
"headerbar_shade_color": self.rgba_from_argb(light_theme.secondaryContainer),
|
"headerbar_shade_color": self.rgba_from_argb(
|
||||||
|
light_theme.secondaryContainer
|
||||||
|
),
|
||||||
"card_bg_color": self.rgba_from_argb(light_theme.primary, "0.05"),
|
"card_bg_color": self.rgba_from_argb(light_theme.primary, "0.05"),
|
||||||
"card_fg_color": self.rgba_from_argb(light_theme.onSecondaryContainer),
|
"card_fg_color": self.rgba_from_argb(light_theme.onSecondaryContainer),
|
||||||
"card_shade_color": self.rgba_from_argb(light_theme.shadow),
|
"card_shade_color": self.rgba_from_argb(light_theme.shadow),
|
||||||
|
@ -331,8 +329,9 @@ class GradienceApplication(Adw.Application):
|
||||||
)
|
)
|
||||||
self.props.active_window.save_preset_button.add_css_class("warning")
|
self.props.active_window.save_preset_button.add_css_class("warning")
|
||||||
|
|
||||||
self.props.active_window.save_preset_button.get_child(
|
self.props.active_window.save_preset_button.get_child().set_tooltip_text(
|
||||||
).set_tooltip_text(_("Unsaved changes"))
|
_("Unsaved changes")
|
||||||
|
)
|
||||||
|
|
||||||
def clear_dirty(self):
|
def clear_dirty(self):
|
||||||
self.is_dirty = False
|
self.is_dirty = False
|
||||||
|
@ -341,8 +340,9 @@ class GradienceApplication(Adw.Application):
|
||||||
)
|
)
|
||||||
self.props.active_window.save_preset_button.remove_css_class("warning")
|
self.props.active_window.save_preset_button.remove_css_class("warning")
|
||||||
self.props.active_window.save_preset_button.get_child().set_label("")
|
self.props.active_window.save_preset_button.get_child().set_label("")
|
||||||
self.props.active_window.save_preset_button.get_child(
|
self.props.active_window.save_preset_button.get_child().set_tooltip_text(
|
||||||
).set_tooltip_text(_("Save changes"))
|
_("Save changes")
|
||||||
|
)
|
||||||
|
|
||||||
def reload_variables(self):
|
def reload_variables(self):
|
||||||
parsing_errors = []
|
parsing_errors = []
|
||||||
|
@ -385,29 +385,24 @@ class GradienceApplication(Adw.Application):
|
||||||
if args[0].get_string().startswith("custom-"):
|
if args[0].get_string().startswith("custom-"):
|
||||||
self.load_preset_from_file(
|
self.load_preset_from_file(
|
||||||
os.path.join(
|
os.path.join(
|
||||||
os.environ.get(
|
os.environ.get("XDG_CONFIG_HOME",
|
||||||
"XDG_CONFIG_HOME",
|
os.environ["HOME"] + "/.config"),
|
||||||
os.environ["HOME"] +
|
|
||||||
"/.config"),
|
|
||||||
"presets",
|
"presets",
|
||||||
args[0].get_string().replace(
|
args[0].get_string().replace("custom-", "", 1) + ".json",
|
||||||
"custom-",
|
)
|
||||||
"",
|
)
|
||||||
1) +
|
|
||||||
".json",
|
|
||||||
))
|
|
||||||
else:
|
else:
|
||||||
self.load_preset_from_resource(
|
self.load_preset_from_resource(
|
||||||
f"{rootdir}/presets/"
|
f"{rootdir}/presets/" + args[0].get_string() + ".json"
|
||||||
+ args[0].get_string()
|
|
||||||
+ ".json"
|
|
||||||
)
|
)
|
||||||
Gio.SimpleAction.set_state(self.lookup_action("load_preset"), args[0])
|
Gio.SimpleAction.set_state(self.lookup_action("load_preset"), args[0])
|
||||||
|
|
||||||
def show_apply_color_scheme_dialog(self, *_args):
|
def show_apply_color_scheme_dialog(self, *_args):
|
||||||
dialog = GradienceAppTypeDialog(
|
dialog = GradienceAppTypeDialog(
|
||||||
_("Apply this color scheme?"),
|
_("Apply this color scheme?"),
|
||||||
_("Warning: any custom CSS files for those app types will be irreversibly overwritten!"),
|
_(
|
||||||
|
"Warning: any custom CSS files for those app types will be irreversibly overwritten!"
|
||||||
|
),
|
||||||
"apply",
|
"apply",
|
||||||
_("Apply"),
|
_("Apply"),
|
||||||
Adw.ResponseAppearance.SUGGESTED,
|
Adw.ResponseAppearance.SUGGESTED,
|
||||||
|
@ -513,18 +508,23 @@ class GradienceApplication(Adw.Application):
|
||||||
|
|
||||||
def save_preset(self, _unused, response, entry):
|
def save_preset(self, _unused, response, entry):
|
||||||
if response == "save":
|
if response == "save":
|
||||||
if not os.path.exists(os.path.join(
|
if not os.path.exists(
|
||||||
|
os.path.join(
|
||||||
os.environ.get("XDG_CONFIG_HOME",
|
os.environ.get("XDG_CONFIG_HOME",
|
||||||
os.environ["HOME"] + "/.config"),
|
os.environ["HOME"] + "/.config"),
|
||||||
"presets",
|
"presets",
|
||||||
"user",
|
"user",
|
||||||
)):
|
)
|
||||||
os.makedirs(os.path.join(
|
):
|
||||||
os.environ.get("XDG_CONFIG_HOME",
|
os.makedirs(
|
||||||
os.environ["HOME"] + "/.config"),
|
os.path.join(
|
||||||
|
os.environ.get(
|
||||||
|
"XDG_CONFIG_HOME", os.environ["HOME"] + "/.config"
|
||||||
|
),
|
||||||
"presets",
|
"presets",
|
||||||
"user",
|
"user",
|
||||||
))
|
)
|
||||||
|
)
|
||||||
|
|
||||||
with open(
|
with open(
|
||||||
os.path.join(
|
os.path.join(
|
||||||
|
@ -547,8 +547,7 @@ class GradienceApplication(Adw.Application):
|
||||||
file.write(json.dumps(object_to_write, indent=4))
|
file.write(json.dumps(object_to_write, indent=4))
|
||||||
self.clear_dirty()
|
self.clear_dirty()
|
||||||
self.win.toast_overlay.add_toast(
|
self.win.toast_overlay.add_toast(
|
||||||
Adw.Toast(title=_("Preset saved"))
|
Adw.Toast(title=_("Preset saved")))
|
||||||
)
|
|
||||||
|
|
||||||
def apply_color_scheme(self, widget, response):
|
def apply_color_scheme(self, widget, response):
|
||||||
if response == "apply":
|
if response == "apply":
|
||||||
|
@ -584,9 +583,8 @@ class GradienceApplication(Adw.Application):
|
||||||
# if widget.get_color_mode()["light"]:
|
# if widget.get_color_mode()["light"]:
|
||||||
if widget.get_app_types()["gtk4"]:
|
if widget.get_app_types()["gtk4"]:
|
||||||
gtk4_dir = os.path.join(
|
gtk4_dir = os.path.join(
|
||||||
os.environ.get(
|
os.environ.get("XDG_CONFIG_HOME",
|
||||||
"XDG_CONFIG_HOME", os.environ["HOME"] + "/.config"
|
os.environ["HOME"] + "/.config"),
|
||||||
),
|
|
||||||
"gtk-4.0",
|
"gtk-4.0",
|
||||||
)
|
)
|
||||||
if not os.path.exists(gtk4_dir):
|
if not os.path.exists(gtk4_dir):
|
||||||
|
@ -612,9 +610,8 @@ class GradienceApplication(Adw.Application):
|
||||||
file.write(gtk4_css)
|
file.write(gtk4_css)
|
||||||
if widget.get_app_types()["gtk3"]:
|
if widget.get_app_types()["gtk3"]:
|
||||||
gtk3_dir = os.path.join(
|
gtk3_dir = os.path.join(
|
||||||
os.environ.get(
|
os.environ.get("XDG_CONFIG_HOME",
|
||||||
"XDG_CONFIG_HOME", os.environ["HOME"] + "/.config"
|
os.environ["HOME"] + "/.config"),
|
||||||
),
|
|
||||||
"gtk-3.0",
|
"gtk-3.0",
|
||||||
)
|
)
|
||||||
if not os.path.exists(gtk3_dir):
|
if not os.path.exists(gtk3_dir):
|
||||||
|
@ -657,9 +654,9 @@ class GradienceApplication(Adw.Application):
|
||||||
backup = open(
|
backup = open(
|
||||||
os.path.join(
|
os.path.join(
|
||||||
os.environ.get(
|
os.environ.get(
|
||||||
"XDG_CONFIG_HOME",
|
"XDG_CONFIG_HOME", os.environ["HOME"] +
|
||||||
os.environ["HOME"] +
|
"/.config"
|
||||||
"/.config"),
|
),
|
||||||
"gtk-4.0/gtk.css.bak",
|
"gtk-4.0/gtk.css.bak",
|
||||||
),
|
),
|
||||||
"r",
|
"r",
|
||||||
|
@ -670,9 +667,9 @@ class GradienceApplication(Adw.Application):
|
||||||
gtk4css = open(
|
gtk4css = open(
|
||||||
os.path.join(
|
os.path.join(
|
||||||
os.environ.get(
|
os.environ.get(
|
||||||
"XDG_CONFIG_HOME",
|
"XDG_CONFIG_HOME", os.environ["HOME"] +
|
||||||
os.environ["HOME"] +
|
"/.config"
|
||||||
"/.config"),
|
),
|
||||||
"gtk-4.0/gtk.css",
|
"gtk-4.0/gtk.css",
|
||||||
),
|
),
|
||||||
"w",
|
"w",
|
||||||
|
@ -737,9 +734,8 @@ class GradienceApplication(Adw.Application):
|
||||||
"0xMRTT https://github.com/0xMRTT",
|
"0xMRTT https://github.com/0xMRTT",
|
||||||
"Verantor https://github.com/Verantor",
|
"Verantor https://github.com/Verantor",
|
||||||
],
|
],
|
||||||
artists=['David Lapshin https://github.com/daudix-UFO'],
|
artists=["David Lapshin https://github.com/daudix-UFO"],
|
||||||
designers=[
|
designers=["David Lapshin https://github.com/daudix-UFO"],
|
||||||
'David Lapshin https://github.com/daudix-UFO'],
|
|
||||||
# Translators: This is a place to put your credits (formats: "Name
|
# Translators: This is a place to put your credits (formats: "Name
|
||||||
# https://example.com" or "Name <email@example.com>", no quotes)
|
# https://example.com" or "Name <email@example.com>", no quotes)
|
||||||
# and is not meant to be translated literally.
|
# and is not meant to be translated literally.
|
||||||
|
@ -760,7 +756,8 @@ class GradienceApplication(Adw.Application):
|
||||||
license_type=Gtk.License.GPL_3_0,
|
license_type=Gtk.License.GPL_3_0,
|
||||||
version=version,
|
version=version,
|
||||||
release_notes_version=rel_ver,
|
release_notes_version=rel_ver,
|
||||||
release_notes=_("""
|
release_notes=_(
|
||||||
|
"""
|
||||||
<ul>
|
<ul>
|
||||||
<li>Add AdwViewSwitcher in the header bar.</li>
|
<li>Add AdwViewSwitcher in the header bar.</li>
|
||||||
<li>Move CSS to the "Advanced" tab</li>
|
<li>Move CSS to the "Advanced" tab</li>
|
||||||
|
@ -777,8 +774,10 @@ class GradienceApplication(Adw.Application):
|
||||||
<li>Added issue template for bug and feature request </li>
|
<li>Added issue template for bug and feature request </li>
|
||||||
<li>`Main` branch is now protected by GitHub branch protection. The development is done on `next` branch </li>
|
<li>`Main` branch is now protected by GitHub branch protection. The development is done on `next` branch </li>
|
||||||
</ul>
|
</ul>
|
||||||
"""),
|
"""
|
||||||
comments=_("""
|
),
|
||||||
|
comments=_(
|
||||||
|
"""
|
||||||
Gradience is a tool for customizing Libadwaita applications and the adw-gtk3 theme.
|
Gradience is a tool for customizing Libadwaita applications and the adw-gtk3 theme.
|
||||||
With Gradience you can:
|
With Gradience you can:
|
||||||
|
|
||||||
|
@ -789,7 +788,8 @@ With Gradience you can:
|
||||||
- Extend functionality using plugins
|
- Extend functionality using plugins
|
||||||
|
|
||||||
This app is written in Python and uses GTK 4 and libadwaita.
|
This app is written in Python and uses GTK 4 and libadwaita.
|
||||||
""")
|
"""
|
||||||
|
),
|
||||||
)
|
)
|
||||||
about.present()
|
about.present()
|
||||||
|
|
||||||
|
@ -852,7 +852,8 @@ This app is written in Python and uses GTK 4 and libadwaita.
|
||||||
|
|
||||||
def show_gtk4_widget_factory(self, *_args):
|
def show_gtk4_widget_factory(self, *_args):
|
||||||
GLib.spawn_command_line_async(
|
GLib.spawn_command_line_async(
|
||||||
'sh -c "/bin/gtk4-widget-factory > /dev/null 2>&1"')
|
'sh -c "/bin/gtk4-widget-factory > /dev/null 2>&1"'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
|
@ -29,9 +29,7 @@ poolmgr = urllib3.PoolManager()
|
||||||
|
|
||||||
def fetch_presets(repo):
|
def fetch_presets(repo):
|
||||||
try:
|
try:
|
||||||
http = poolmgr.request(
|
http = poolmgr.request("GET", repo)
|
||||||
"GET",
|
|
||||||
repo)
|
|
||||||
raw = json.loads(http.data)
|
raw = json.loads(http.data)
|
||||||
|
|
||||||
preset_dict = {}
|
preset_dict = {}
|
||||||
|
@ -62,13 +60,16 @@ def download_preset(name, repo_name, url):
|
||||||
|
|
||||||
data = json.dumps(raw)
|
data = json.dumps(raw)
|
||||||
|
|
||||||
with open(os.path.join(
|
with open(
|
||||||
|
os.path.join(
|
||||||
os.environ.get("XDG_CONFIG_HOME",
|
os.environ.get("XDG_CONFIG_HOME",
|
||||||
os.environ["HOME"] + "/.config"),
|
os.environ["HOME"] + "/.config"),
|
||||||
"presets",
|
"presets",
|
||||||
repo_name,
|
repo_name,
|
||||||
to_slug_case(name) + ".json"),
|
to_slug_case(name) + ".json",
|
||||||
"w") as f:
|
),
|
||||||
|
"w",
|
||||||
|
) as f:
|
||||||
f.write(data)
|
f.write(data)
|
||||||
f.close()
|
f.close()
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|
|
@ -23,12 +23,16 @@ from gi.repository import GLib, Gio, Adw
|
||||||
from .utils import buglog
|
from .utils import buglog
|
||||||
|
|
||||||
|
|
||||||
''' Custom exception class '''
|
""" Custom exception class """
|
||||||
|
|
||||||
|
|
||||||
class InvalidGTKVersion(Exception):
|
class InvalidGTKVersion(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
''' Internal helper functions (shouldn't be used outside this file) '''
|
""" Internal helper functions (shouldn't be used outside this file) """
|
||||||
|
|
||||||
|
|
||||||
def get_system_flatpak_path():
|
def get_system_flatpak_path():
|
||||||
systemPath = GLib.getenv("FLATPAK_SYSTEM_DIR")
|
systemPath = GLib.getenv("FLATPAK_SYSTEM_DIR")
|
||||||
buglog(f"systemPath: {systemPath}")
|
buglog(f"systemPath: {systemPath}")
|
||||||
|
@ -36,9 +40,7 @@ def get_system_flatpak_path():
|
||||||
if systemPath:
|
if systemPath:
|
||||||
return systemPath
|
return systemPath
|
||||||
|
|
||||||
systemDataDir = GLib.build_filenamev([
|
systemDataDir = GLib.build_filenamev([GLib.DIR_SEPARATOR_S, "var", "lib"])
|
||||||
GLib.DIR_SEPARATOR_S, "var", "lib"
|
|
||||||
])
|
|
||||||
|
|
||||||
return GLib.build_filenamev([systemDataDir, "flatpak"])
|
return GLib.build_filenamev([systemDataDir, "flatpak"])
|
||||||
|
|
||||||
|
@ -50,19 +52,13 @@ def get_user_flatpak_path():
|
||||||
if userPath:
|
if userPath:
|
||||||
return userPath
|
return userPath
|
||||||
|
|
||||||
userDataDir = GLib.build_filenamev([
|
userDataDir = GLib.build_filenamev(
|
||||||
GLib.get_home_dir(), ".local", "share"
|
[GLib.get_home_dir(), ".local", "share"])
|
||||||
])
|
|
||||||
|
|
||||||
return GLib.build_filenamev([userDataDir, "flatpak"])
|
return GLib.build_filenamev([userDataDir, "flatpak"])
|
||||||
|
|
||||||
|
|
||||||
def user_save_keyfile(
|
def user_save_keyfile(toast_overlay, settings, user_keyfile, filename, gtk_ver):
|
||||||
toast_overlay,
|
|
||||||
settings,
|
|
||||||
user_keyfile,
|
|
||||||
filename,
|
|
||||||
gtk_ver):
|
|
||||||
try:
|
try:
|
||||||
user_keyfile.save_to_file(filename)
|
user_keyfile.save_to_file(filename)
|
||||||
except Glib.GError as e:
|
except Glib.GError as e:
|
||||||
|
@ -72,19 +68,16 @@ def user_save_keyfile(
|
||||||
if gtk_ver == "gtk4":
|
if gtk_ver == "gtk4":
|
||||||
settings.set_boolean("user-flatpak-theming-gtk4", True)
|
settings.set_boolean("user-flatpak-theming-gtk4", True)
|
||||||
buglog(
|
buglog(
|
||||||
f"user-flatpak-theming-gtk4: {settings.get_boolean('user-flatpak-theming-gtk4')}")
|
f"user-flatpak-theming-gtk4: {settings.get_boolean('user-flatpak-theming-gtk4')}"
|
||||||
|
)
|
||||||
elif gtk_ver == "gtk3":
|
elif gtk_ver == "gtk3":
|
||||||
settings.set_boolean("user-flatpak-theming-gtk3", True)
|
settings.set_boolean("user-flatpak-theming-gtk3", True)
|
||||||
buglog(
|
buglog(
|
||||||
f"user-flatpak-theming-gtk3: {settings.get_boolean('user-flatpak-theming-gtk3')}")
|
f"user-flatpak-theming-gtk3: {settings.get_boolean('user-flatpak-theming-gtk3')}"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def global_save_keyfile(
|
def global_save_keyfile(toast_overlay, settings, global_keyfile, filename, gtk_ver):
|
||||||
toast_overlay,
|
|
||||||
settings,
|
|
||||||
global_keyfile,
|
|
||||||
filename,
|
|
||||||
gtk_ver):
|
|
||||||
try:
|
try:
|
||||||
global_keyfile.save_to_file(filename)
|
global_keyfile.save_to_file(filename)
|
||||||
except Glib.GError as e:
|
except Glib.GError as e:
|
||||||
|
@ -94,23 +87,23 @@ def global_save_keyfile(
|
||||||
if gtk_ver == "gtk4":
|
if gtk_ver == "gtk4":
|
||||||
settings.set_boolean("global-flatpak-theming-gtk4", True)
|
settings.set_boolean("global-flatpak-theming-gtk4", True)
|
||||||
buglog(
|
buglog(
|
||||||
f"global-flatpak-theming-gtk4: {settings.get_boolean('global-flatpak-theming-gtk4')}")
|
f"global-flatpak-theming-gtk4: {settings.get_boolean('global-flatpak-theming-gtk4')}"
|
||||||
|
)
|
||||||
elif gtk_ver == "gtk3":
|
elif gtk_ver == "gtk3":
|
||||||
settings.set_boolean("global-flatpak-theming-gtk3", True)
|
settings.set_boolean("global-flatpak-theming-gtk3", True)
|
||||||
buglog(
|
buglog(
|
||||||
f"global-flatpak-theming-gtk3: {settings.get_boolean('global-flatpak-theming-gtk3')}")
|
f"global-flatpak-theming-gtk3: {settings.get_boolean('global-flatpak-theming-gtk3')}"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
""" Main functions """
|
||||||
|
|
||||||
|
|
||||||
''' Main functions '''
|
|
||||||
def create_gtk_user_override(toast_overlay, settings, gtk_ver):
|
def create_gtk_user_override(toast_overlay, settings, gtk_ver):
|
||||||
override_dir = GLib.build_filenamev([
|
override_dir = GLib.build_filenamev([get_user_flatpak_path(), "overrides"])
|
||||||
get_user_flatpak_path(), "overrides"
|
|
||||||
])
|
|
||||||
print(f"override_dir: {override_dir}")
|
print(f"override_dir: {override_dir}")
|
||||||
|
|
||||||
filename = GLib.build_filenamev([
|
filename = GLib.build_filenamev([override_dir, "global"])
|
||||||
override_dir, "global"
|
|
||||||
])
|
|
||||||
|
|
||||||
user_keyfile = GLib.KeyFile.new()
|
user_keyfile = GLib.KeyFile.new()
|
||||||
|
|
||||||
|
@ -122,7 +115,8 @@ def create_gtk_user_override(toast_overlay, settings, gtk_ver):
|
||||||
gtk_path = "xdg-config/gtk-3.0"
|
gtk_path = "xdg-config/gtk-3.0"
|
||||||
else:
|
else:
|
||||||
raise InvalidGTKVersion(
|
raise InvalidGTKVersion(
|
||||||
f"Invalid GTK version chosen: {gtk_ver}. Please choose between two options: gtk4, gtk3")
|
f"Invalid GTK version chosen: {gtk_ver}. Please choose between two options: gtk4, gtk3"
|
||||||
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
user_keyfile.load_from_file(filename, GLib.KeyFileFlags.NONE)
|
user_keyfile.load_from_file(filename, GLib.KeyFileFlags.NONE)
|
||||||
|
@ -151,12 +145,12 @@ def create_gtk_user_override(toast_overlay, settings, gtk_ver):
|
||||||
user_keyfile.load_from_file(filename, GLib.KeyFileFlags.NONE)
|
user_keyfile.load_from_file(filename, GLib.KeyFileFlags.NONE)
|
||||||
user_keyfile.set_string("Context", "filesystems", gtk_path)
|
user_keyfile.set_string("Context", "filesystems", gtk_path)
|
||||||
|
|
||||||
user_save_keyfile(
|
user_save_keyfile(toast_overlay, settings,
|
||||||
toast_overlay, settings, user_keyfile, filename, gtk_ver)
|
user_keyfile, filename, gtk_ver)
|
||||||
else:
|
else:
|
||||||
toast_overlay.add_toast(
|
toast_overlay.add_toast(
|
||||||
Adw.Toast(
|
Adw.Toast(title=_("Unexpected file error occurred"))
|
||||||
title=_("Unexpected file error occurred")))
|
)
|
||||||
buglog(f"Unhandled GLib.FileError error code. Exc: {e}")
|
buglog(f"Unhandled GLib.FileError error code. Exc: {e}")
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
|
@ -164,14 +158,16 @@ def create_gtk_user_override(toast_overlay, settings, gtk_ver):
|
||||||
"Context", "filesystems")
|
"Context", "filesystems")
|
||||||
except GLib.GError:
|
except GLib.GError:
|
||||||
user_keyfile.set_string("Context", "filesystems", gtk_path)
|
user_keyfile.set_string("Context", "filesystems", gtk_path)
|
||||||
user_save_keyfile(
|
user_save_keyfile(toast_overlay, settings,
|
||||||
toast_overlay, settings, user_keyfile, filename, gtk_ver)
|
user_keyfile, filename, gtk_ver)
|
||||||
else:
|
else:
|
||||||
if gtk_path not in filesys_list:
|
if gtk_path not in filesys_list:
|
||||||
user_keyfile.set_string_list(
|
user_keyfile.set_string_list(
|
||||||
"Context", "filesystems", filesys_list + [gtk_path])
|
"Context", "filesystems", filesys_list + [gtk_path]
|
||||||
|
)
|
||||||
user_save_keyfile(
|
user_save_keyfile(
|
||||||
toast_overlay, settings, user_keyfile, filename, gtk_ver)
|
toast_overlay, settings, user_keyfile, filename, gtk_ver
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
if is_gtk4:
|
if is_gtk4:
|
||||||
settings.set_boolean("user-flatpak-theming-gtk4", True)
|
settings.set_boolean("user-flatpak-theming-gtk4", True)
|
||||||
|
@ -181,14 +177,10 @@ def create_gtk_user_override(toast_overlay, settings, gtk_ver):
|
||||||
|
|
||||||
|
|
||||||
def remove_gtk_user_override(toast_overlay, settings, gtk_ver):
|
def remove_gtk_user_override(toast_overlay, settings, gtk_ver):
|
||||||
override_dir = GLib.build_filenamev([
|
override_dir = GLib.build_filenamev([get_user_flatpak_path(), "overrides"])
|
||||||
get_user_flatpak_path(), "overrides"
|
|
||||||
])
|
|
||||||
print(f"override_dir: {override_dir}")
|
print(f"override_dir: {override_dir}")
|
||||||
|
|
||||||
filename = GLib.build_filenamev([
|
filename = GLib.build_filenamev([override_dir, "global"])
|
||||||
override_dir, "global"
|
|
||||||
])
|
|
||||||
|
|
||||||
user_keyfile = GLib.KeyFile.new()
|
user_keyfile = GLib.KeyFile.new()
|
||||||
|
|
||||||
|
@ -200,7 +192,8 @@ def remove_gtk_user_override(toast_overlay, settings, gtk_ver):
|
||||||
gtk_path = "xdg-config/gtk-3.0"
|
gtk_path = "xdg-config/gtk-3.0"
|
||||||
else:
|
else:
|
||||||
raise InvalidGTKVersion(
|
raise InvalidGTKVersion(
|
||||||
f"Invalid GTK version chosen: {gtk_ver}. Please choose between two options: gtk4, gtk3")
|
f"Invalid GTK version chosen: {gtk_ver}. Please choose between two options: gtk4, gtk3"
|
||||||
|
)
|
||||||
|
|
||||||
def set_theming():
|
def set_theming():
|
||||||
if is_gtk4:
|
if is_gtk4:
|
||||||
|
@ -216,8 +209,8 @@ def remove_gtk_user_override(toast_overlay, settings, gtk_ver):
|
||||||
buglog("remove override: File doesn't exist")
|
buglog("remove override: File doesn't exist")
|
||||||
else:
|
else:
|
||||||
toast_overlay.add_toast(
|
toast_overlay.add_toast(
|
||||||
Adw.Toast(
|
Adw.Toast(title=_("Unexpected file error occurred"))
|
||||||
title=_("Unexpected file error occurred")))
|
)
|
||||||
buglog(f"Unhandled GLib.FileError error code. Exc: {e}")
|
buglog(f"Unhandled GLib.FileError error code. Exc: {e}")
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
|
@ -235,24 +228,24 @@ def remove_gtk_user_override(toast_overlay, settings, gtk_ver):
|
||||||
user_keyfile.set_string_list(
|
user_keyfile.set_string_list(
|
||||||
"Context", "filesystems", filesys_list)
|
"Context", "filesystems", filesys_list)
|
||||||
user_save_keyfile(
|
user_save_keyfile(
|
||||||
toast_overlay, settings, user_keyfile, filename, gtk_ver)
|
toast_overlay, settings, user_keyfile, filename, gtk_ver
|
||||||
|
)
|
||||||
buglog("remove override: Value removed.")
|
buglog("remove override: Value removed.")
|
||||||
else:
|
else:
|
||||||
set_theming()
|
set_theming()
|
||||||
buglog("remove override: Value not found.")
|
buglog("remove override: Value not found.")
|
||||||
|
|
||||||
|
|
||||||
''' Do not use this functions for now, as they are lacking authentication'''
|
""" Do not use this functions for now, as they are lacking authentication"""
|
||||||
# TODO: Implement user authentication using Polkit
|
# TODO: Implement user authentication using Polkit
|
||||||
|
|
||||||
|
|
||||||
def create_gtk_global_override(toast_overlay, settings, gtk_ver):
|
def create_gtk_global_override(toast_overlay, settings, gtk_ver):
|
||||||
override_dir = GLib.build_filenamev([
|
override_dir = GLib.build_filenamev(
|
||||||
get_system_flatpak_path(), "overrides"
|
[get_system_flatpak_path(), "overrides"])
|
||||||
])
|
|
||||||
print(f"override_dir: {override_dir}")
|
print(f"override_dir: {override_dir}")
|
||||||
|
|
||||||
filename = GLib.build_filenamev([
|
filename = GLib.build_filenamev([override_dir, "global"])
|
||||||
override_dir, "global"
|
|
||||||
])
|
|
||||||
|
|
||||||
global_keyfile = GLib.KeyFile.new()
|
global_keyfile = GLib.KeyFile.new()
|
||||||
|
|
||||||
|
@ -264,7 +257,8 @@ def create_gtk_global_override(toast_overlay, settings, gtk_ver):
|
||||||
gtk_path = "xdg-config/gtk-3.0"
|
gtk_path = "xdg-config/gtk-3.0"
|
||||||
else:
|
else:
|
||||||
raise InvalidGTKVersion(
|
raise InvalidGTKVersion(
|
||||||
f"Invalid GTK version chosen: {gtk_ver}. Please choose between two options: gtk4, gtk3")
|
f"Invalid GTK version chosen: {gtk_ver}. Please choose between two options: gtk4, gtk3"
|
||||||
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
global_keyfile.load_from_file(filename, GLib.KeyFileFlags.NONE)
|
global_keyfile.load_from_file(filename, GLib.KeyFileFlags.NONE)
|
||||||
|
@ -294,11 +288,12 @@ def create_gtk_global_override(toast_overlay, settings, gtk_ver):
|
||||||
global_keyfile.set_string("Context", "filesystems", gtk_path)
|
global_keyfile.set_string("Context", "filesystems", gtk_path)
|
||||||
|
|
||||||
global_save_keyfile(
|
global_save_keyfile(
|
||||||
toast_overlay, settings, global_keyfile, filename, gtk_ver)
|
toast_overlay, settings, global_keyfile, filename, gtk_ver
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
toast_overlay.add_toast(
|
toast_overlay.add_toast(
|
||||||
Adw.Toast(
|
Adw.Toast(title=_("Unexpected file error occurred"))
|
||||||
title=_("Unexpected file error occurred")))
|
)
|
||||||
buglog(f"Unhandled GLib.FileError error code. Exc: {e}")
|
buglog(f"Unhandled GLib.FileError error code. Exc: {e}")
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
|
@ -307,13 +302,16 @@ def create_gtk_global_override(toast_overlay, settings, gtk_ver):
|
||||||
except GLib.GError:
|
except GLib.GError:
|
||||||
global_keyfile.set_string("Context", "filesystems", gtk_path)
|
global_keyfile.set_string("Context", "filesystems", gtk_path)
|
||||||
global_save_keyfile(
|
global_save_keyfile(
|
||||||
toast_overlay, settings, global_keyfile, filename, gtk_ver)
|
toast_overlay, settings, global_keyfile, filename, gtk_ver
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
if gtk_path not in filesys_list:
|
if gtk_path not in filesys_list:
|
||||||
global_keyfile.set_string_list(
|
global_keyfile.set_string_list(
|
||||||
"Context", "filesystems", filesys_list + [gtk_path])
|
"Context", "filesystems", filesys_list + [gtk_path]
|
||||||
|
)
|
||||||
global_save_keyfile(
|
global_save_keyfile(
|
||||||
toast_overlay, settings, global_keyfile, filename, gtk_ver)
|
toast_overlay, settings, global_keyfile, filename, gtk_ver
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
if is_gtk4:
|
if is_gtk4:
|
||||||
settings.set_boolean("global-flatpak-theming-gtk4", True)
|
settings.set_boolean("global-flatpak-theming-gtk4", True)
|
||||||
|
@ -323,14 +321,11 @@ def create_gtk_global_override(toast_overlay, settings, gtk_ver):
|
||||||
|
|
||||||
|
|
||||||
def remove_gtk_global_override(toast_overlay, settings, gtk_ver):
|
def remove_gtk_global_override(toast_overlay, settings, gtk_ver):
|
||||||
override_dir = GLib.build_filenamev([
|
override_dir = GLib.build_filenamev(
|
||||||
get_system_flatpak_path(), "overrides"
|
[get_system_flatpak_path(), "overrides"])
|
||||||
])
|
|
||||||
print(f"override_dir: {override_dir}")
|
print(f"override_dir: {override_dir}")
|
||||||
|
|
||||||
filename = GLib.build_filenamev([
|
filename = GLib.build_filenamev([override_dir, "global"])
|
||||||
override_dir, "global"
|
|
||||||
])
|
|
||||||
|
|
||||||
global_keyfile = GLib.KeyFile.new()
|
global_keyfile = GLib.KeyFile.new()
|
||||||
|
|
||||||
|
@ -342,7 +337,8 @@ def remove_gtk_global_override(toast_overlay, settings, gtk_ver):
|
||||||
gtk_path = "xdg-config/gtk-3.0"
|
gtk_path = "xdg-config/gtk-3.0"
|
||||||
else:
|
else:
|
||||||
raise InvalidGTKVersion(
|
raise InvalidGTKVersion(
|
||||||
f"Invalid GTK version chosen: {gtk_ver}. Please choose between two options: gtk4, gtk3")
|
f"Invalid GTK version chosen: {gtk_ver}. Please choose between two options: gtk4, gtk3"
|
||||||
|
)
|
||||||
|
|
||||||
def set_theming():
|
def set_theming():
|
||||||
if is_gtk4:
|
if is_gtk4:
|
||||||
|
@ -358,8 +354,8 @@ def remove_gtk_global_override(toast_overlay, settings, gtk_ver):
|
||||||
buglog("remove override: File doesn't exist")
|
buglog("remove override: File doesn't exist")
|
||||||
else:
|
else:
|
||||||
toast_overlay.add_toast(
|
toast_overlay.add_toast(
|
||||||
Adw.Toast(
|
Adw.Toast(title=_("Unexpected file error occurred"))
|
||||||
title=_("Unexpected file error occurred")))
|
)
|
||||||
buglog(f"Unhandled GLib.FileError error code. Exc: {e}")
|
buglog(f"Unhandled GLib.FileError error code. Exc: {e}")
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
|
@ -377,7 +373,8 @@ def remove_gtk_global_override(toast_overlay, settings, gtk_ver):
|
||||||
global_keyfile.set_string_list(
|
global_keyfile.set_string_list(
|
||||||
"Context", "filesystems", filesys_list)
|
"Context", "filesystems", filesys_list)
|
||||||
global_save_keyfile(
|
global_save_keyfile(
|
||||||
toast_overlay, settings, global_keyfile, filename, gtk_ver)
|
toast_overlay, settings, global_keyfile, filename, gtk_ver
|
||||||
|
)
|
||||||
buglog("remove override: Value removed.")
|
buglog("remove override: Value removed.")
|
||||||
else:
|
else:
|
||||||
set_theming()
|
set_theming()
|
||||||
|
|
|
@ -31,6 +31,7 @@ else:
|
||||||
def to_slug_case(non_slug):
|
def to_slug_case(non_slug):
|
||||||
return re.sub(r"[^0-9a-z]+", "-", anyascii(non_slug).lower()).strip("-")
|
return re.sub(r"[^0-9a-z]+", "-", anyascii(non_slug).lower()).strip("-")
|
||||||
|
|
||||||
|
|
||||||
# Use it instead of print(), so there isn't any output in stdout if
|
# Use it instead of print(), so there isn't any output in stdout if
|
||||||
# Gradience was build in release mode
|
# Gradience was build in release mode
|
||||||
|
|
||||||
|
|
|
@ -34,13 +34,7 @@ class GradienceOption(Adw.ActionRow):
|
||||||
explanation_button = Gtk.Template.Child("explanation-button")
|
explanation_button = Gtk.Template.Child("explanation-button")
|
||||||
explanation_label = Gtk.Template.Child("explanation-label")
|
explanation_label = Gtk.Template.Child("explanation-label")
|
||||||
|
|
||||||
def __init__(
|
def __init__(self, name, title, explanation, adw_gtk3_support="yes", **kwargs):
|
||||||
self,
|
|
||||||
name,
|
|
||||||
title,
|
|
||||||
explanation,
|
|
||||||
adw_gtk3_support="yes",
|
|
||||||
**kwargs):
|
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
self.set_name(name)
|
self.set_name(name)
|
||||||
|
@ -52,7 +46,8 @@ class GradienceOption(Adw.ActionRow):
|
||||||
elif adw_gtk3_support == "partial":
|
elif adw_gtk3_support == "partial":
|
||||||
self.warning_button.add_css_class("warning")
|
self.warning_button.add_css_class("warning")
|
||||||
self.warning_label.set_label(
|
self.warning_label.set_label(
|
||||||
_("This option is only partially supported by the adw-gtk3 theme."))
|
_("This option is only partially supported by the adw-gtk3 theme.")
|
||||||
|
)
|
||||||
elif adw_gtk3_support == "no":
|
elif adw_gtk3_support == "no":
|
||||||
self.warning_button.add_css_class("error")
|
self.warning_button.add_css_class("error")
|
||||||
self.warning_label.set_label(
|
self.warning_label.set_label(
|
||||||
|
|
|
@ -59,8 +59,9 @@ class GradiencePaletteShades(Adw.ActionRow):
|
||||||
Gtk.Application.get_default().is_ready
|
Gtk.Application.get_default().is_ready
|
||||||
and kwargs.get("update_from") == "color_value"
|
and kwargs.get("update_from") == "color_value"
|
||||||
):
|
):
|
||||||
Gtk.Application.get_default(
|
Gtk.Application.get_default().palette[self.prefix][str(i)] = shades[
|
||||||
).palette[self.prefix][str(i)] = shades[str(i)]
|
str(i)
|
||||||
|
]
|
||||||
|
|
||||||
if (
|
if (
|
||||||
Gtk.Application.get_default().is_ready
|
Gtk.Application.get_default().is_ready
|
||||||
|
|
|
@ -16,9 +16,10 @@
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#from .setting import GradienceSetting
|
# from .setting import GradienceSetting
|
||||||
|
|
||||||
class GradiencePluginCore():
|
|
||||||
|
class GradiencePluginCore:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.title = None
|
self.title = None
|
||||||
self.author = None
|
self.author = None
|
||||||
|
|
|
@ -36,11 +36,15 @@ class GradiencePluginsList:
|
||||||
self.win = win
|
self.win = win
|
||||||
|
|
||||||
self.pm = PluginManager()
|
self.pm = PluginManager()
|
||||||
self.pm.setPluginPlaces([os.path.join(
|
self.pm.setPluginPlaces(
|
||||||
|
[
|
||||||
|
os.path.join(
|
||||||
os.environ.get("XDG_CONFIG_HOME",
|
os.environ.get("XDG_CONFIG_HOME",
|
||||||
os.environ["HOME"] + "/.config"),
|
os.environ["HOME"] + "/.config"),
|
||||||
"gradience_plugins",
|
"gradience_plugins",
|
||||||
)])
|
)
|
||||||
|
]
|
||||||
|
)
|
||||||
self.pm.collectPlugins()
|
self.pm.collectPlugins()
|
||||||
self.rows = {}
|
self.rows = {}
|
||||||
|
|
||||||
|
@ -60,7 +64,10 @@ class GradiencePluginsList:
|
||||||
group = Adw.PreferencesGroup()
|
group = Adw.PreferencesGroup()
|
||||||
group.set_title(_("Plugins"))
|
group.set_title(_("Plugins"))
|
||||||
group.set_description(
|
group.set_description(
|
||||||
_("Plugins add additional features to Gradience, plugins are made by Gradience community and can make issues."))
|
_(
|
||||||
|
"Plugins add additional features to Gradience, plugins are made by Gradience community and can make issues."
|
||||||
|
)
|
||||||
|
)
|
||||||
if self.pm:
|
if self.pm:
|
||||||
for pluginInfo in self.pm.getAllPlugins():
|
for pluginInfo in self.pm.getAllPlugins():
|
||||||
row = GradiencePluginRow(pluginInfo.plugin_object)
|
row = GradiencePluginRow(pluginInfo.plugin_object)
|
||||||
|
@ -83,7 +90,5 @@ class GradiencePluginsList:
|
||||||
for pluginInfo in self.pm.getAllPlugins():
|
for pluginInfo in self.pm.getAllPlugins():
|
||||||
error, detail = pluginInfo.plugin_object.validate()
|
error, detail = pluginInfo.plugin_object.validate()
|
||||||
if error:
|
if error:
|
||||||
errors.append(
|
errors.append(detail)
|
||||||
detail
|
|
||||||
)
|
|
||||||
return errors
|
return errors
|
||||||
|
|
|
@ -21,8 +21,14 @@ import os
|
||||||
from gi.repository import GLib, Gio, Gtk, Adw
|
from gi.repository import GLib, Gio, Gtk, Adw
|
||||||
|
|
||||||
from .constants import rootdir, app_id
|
from .constants import rootdir, app_id
|
||||||
from .modules.flatpak_overrides import create_gtk_user_override, remove_gtk_user_override
|
from .modules.flatpak_overrides import (
|
||||||
from .modules.flatpak_overrides import create_gtk_global_override, remove_gtk_global_override
|
create_gtk_user_override,
|
||||||
|
remove_gtk_user_override,
|
||||||
|
)
|
||||||
|
from .modules.flatpak_overrides import (
|
||||||
|
create_gtk_global_override,
|
||||||
|
remove_gtk_global_override,
|
||||||
|
)
|
||||||
from .modules.utils import buglog
|
from .modules.utils import buglog
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,12 +57,14 @@ class GradiencePreferencesWindow(Adw.PreferencesWindow):
|
||||||
|
|
||||||
def setup_flatpak_group(self):
|
def setup_flatpak_group(self):
|
||||||
user_flatpak_theming_gtk4 = self.settings.get_boolean(
|
user_flatpak_theming_gtk4 = self.settings.get_boolean(
|
||||||
"user-flatpak-theming-gtk4")
|
"user-flatpak-theming-gtk4"
|
||||||
|
)
|
||||||
# global_flatpak_theming_gtk4 = self.settings.get_boolean(
|
# global_flatpak_theming_gtk4 = self.settings.get_boolean(
|
||||||
# "global-flatpak-theming-gtk4")
|
# "global-flatpak-theming-gtk4")
|
||||||
|
|
||||||
user_flatpak_theming_gtk3 = self.settings.get_boolean(
|
user_flatpak_theming_gtk3 = self.settings.get_boolean(
|
||||||
"user-flatpak-theming-gtk3")
|
"user-flatpak-theming-gtk3"
|
||||||
|
)
|
||||||
# global_flatpak_theming_gtk3 = self.settings.get_boolean(
|
# global_flatpak_theming_gtk3 = self.settings.get_boolean(
|
||||||
# "global-flatpak-theming-gtk3")
|
# "global-flatpak-theming-gtk3")
|
||||||
|
|
||||||
|
@ -69,12 +77,14 @@ class GradiencePreferencesWindow(Adw.PreferencesWindow):
|
||||||
# self.allow_gtk3_flatpak_theming_global.set_state(global_flatpak_theming_gtk3)
|
# self.allow_gtk3_flatpak_theming_global.set_state(global_flatpak_theming_gtk3)
|
||||||
|
|
||||||
self.allow_gtk4_flatpak_theming_user.connect(
|
self.allow_gtk4_flatpak_theming_user.connect(
|
||||||
"state-set", self.on_allow_gtk4_flatpak_theming_user_toggled)
|
"state-set", self.on_allow_gtk4_flatpak_theming_user_toggled
|
||||||
|
)
|
||||||
# self.allow_gtk4_flatpak_theming_global.connect(
|
# self.allow_gtk4_flatpak_theming_global.connect(
|
||||||
# "state-set", self.on_allow_gtk4_flatpak_theming_global_toggled)
|
# "state-set", self.on_allow_gtk4_flatpak_theming_global_toggled)
|
||||||
|
|
||||||
self.allow_gtk3_flatpak_theming_user.connect(
|
self.allow_gtk3_flatpak_theming_user.connect(
|
||||||
"state-set", self.on_allow_gtk3_flatpak_theming_user_toggled)
|
"state-set", self.on_allow_gtk3_flatpak_theming_user_toggled
|
||||||
|
)
|
||||||
# self.allow_gtk3_flatpak_theming_global.connect(
|
# self.allow_gtk3_flatpak_theming_global.connect(
|
||||||
# "state-set", self.on_allow_gtk3_flatpak_theming_global_toggled)
|
# "state-set", self.on_allow_gtk3_flatpak_theming_global_toggled)
|
||||||
|
|
||||||
|
@ -87,7 +97,8 @@ class GradiencePreferencesWindow(Adw.PreferencesWindow):
|
||||||
remove_gtk_user_override(self, self.settings, "gtk4")
|
remove_gtk_user_override(self, self.settings, "gtk4")
|
||||||
|
|
||||||
buglog(
|
buglog(
|
||||||
f"user-flatpak-theming-gtk4: {self.settings.get_boolean('user-flatpak-theming-gtk4')}")
|
f"user-flatpak-theming-gtk4: {self.settings.get_boolean('user-flatpak-theming-gtk4')}"
|
||||||
|
)
|
||||||
|
|
||||||
def on_allow_gtk3_flatpak_theming_user_toggled(self, *args):
|
def on_allow_gtk3_flatpak_theming_user_toggled(self, *args):
|
||||||
state = self.allow_gtk3_flatpak_theming_user.props.state
|
state = self.allow_gtk3_flatpak_theming_user.props.state
|
||||||
|
@ -98,7 +109,8 @@ class GradiencePreferencesWindow(Adw.PreferencesWindow):
|
||||||
remove_gtk_user_override(self, self.settings, "gtk3")
|
remove_gtk_user_override(self, self.settings, "gtk3")
|
||||||
|
|
||||||
buglog(
|
buglog(
|
||||||
f"user-flatpak-theming-gtk3: {self.settings.get_boolean('user-flatpak-theming-gtk3')}")
|
f"user-flatpak-theming-gtk3: {self.settings.get_boolean('user-flatpak-theming-gtk3')}"
|
||||||
|
)
|
||||||
|
|
||||||
def on_allow_gtk4_flatpak_theming_global_toggled(self, *args):
|
def on_allow_gtk4_flatpak_theming_global_toggled(self, *args):
|
||||||
state = self.allow_gtk4_flatpak_theming_global.props.state
|
state = self.allow_gtk4_flatpak_theming_global.props.state
|
||||||
|
@ -109,7 +121,8 @@ class GradiencePreferencesWindow(Adw.PreferencesWindow):
|
||||||
remove_gtk_global_override(self, self.settings, "gtk4")
|
remove_gtk_global_override(self, self.settings, "gtk4")
|
||||||
|
|
||||||
buglog(
|
buglog(
|
||||||
f"global-flatpak-theming-gtk4: {self.settings.get_boolean('global-flatpak-theming-gtk4')}")
|
f"global-flatpak-theming-gtk4: {self.settings.get_boolean('global-flatpak-theming-gtk4')}"
|
||||||
|
)
|
||||||
|
|
||||||
def on_allow_gtk3_flatpak_theming_global_toggled(self, *args):
|
def on_allow_gtk3_flatpak_theming_global_toggled(self, *args):
|
||||||
state = self.allow_gtk3_flatpak_theming_global.props.state
|
state = self.allow_gtk3_flatpak_theming_global.props.state
|
||||||
|
@ -120,4 +133,5 @@ class GradiencePreferencesWindow(Adw.PreferencesWindow):
|
||||||
remove_gtk_global_override(self, self.settings, "gtk3")
|
remove_gtk_global_override(self, self.settings, "gtk3")
|
||||||
|
|
||||||
buglog(
|
buglog(
|
||||||
f"global-flatpak-theming-gtk3: {self.settings.get_boolean('global-flatpak-theming-gtk3')}")
|
f"global-flatpak-theming-gtk3: {self.settings.get_boolean('global-flatpak-theming-gtk3')}"
|
||||||
|
)
|
||||||
|
|
|
@ -59,13 +59,15 @@ class GradiencePresetRow(Adw.ActionRow):
|
||||||
def on_apply_button_clicked(self, *_args):
|
def on_apply_button_clicked(self, *_args):
|
||||||
buglog("apply")
|
buglog("apply")
|
||||||
|
|
||||||
self.app.load_preset_from_file(os.path.join(
|
self.app.load_preset_from_file(
|
||||||
|
os.path.join(
|
||||||
os.environ.get("XDG_CONFIG_HOME",
|
os.environ.get("XDG_CONFIG_HOME",
|
||||||
os.environ["HOME"] + "/.config"),
|
os.environ["HOME"] + "/.config"),
|
||||||
"presets",
|
"presets",
|
||||||
self.prefix,
|
self.prefix,
|
||||||
to_slug_case(self.name) + ".json",
|
to_slug_case(self.name) + ".json",
|
||||||
))
|
)
|
||||||
|
)
|
||||||
|
|
||||||
@Gtk.Template.Callback()
|
@Gtk.Template.Callback()
|
||||||
def on_name_entry_changed(self, *_args):
|
def on_name_entry_changed(self, *_args):
|
||||||
|
@ -89,12 +91,9 @@ class GradiencePresetRow(Adw.ActionRow):
|
||||||
self.delete_toast.set_button_label(_("Undo"))
|
self.delete_toast.set_button_label(_("Undo"))
|
||||||
self.delete_toast.connect("dismissed", self.on_delete_toast_dismissed)
|
self.delete_toast.connect("dismissed", self.on_delete_toast_dismissed)
|
||||||
self.delete_toast.connect(
|
self.delete_toast.connect(
|
||||||
"button-clicked",
|
"button-clicked", self.on_undo_button_clicked)
|
||||||
self.on_undo_button_clicked)
|
|
||||||
|
|
||||||
self.toast_overlay.add_toast(
|
self.toast_overlay.add_toast(self.delete_toast)
|
||||||
self.delete_toast
|
|
||||||
)
|
|
||||||
|
|
||||||
self.win.old_name = self.name
|
self.win.old_name = self.name
|
||||||
|
|
||||||
|
@ -103,13 +102,15 @@ class GradiencePresetRow(Adw.ActionRow):
|
||||||
self.win.reload_pref_group()
|
self.win.reload_pref_group()
|
||||||
|
|
||||||
def update_value(self):
|
def update_value(self):
|
||||||
os.remove(os.path.join(
|
os.remove(
|
||||||
|
os.path.join(
|
||||||
os.environ.get("XDG_CONFIG_HOME",
|
os.environ.get("XDG_CONFIG_HOME",
|
||||||
os.environ["HOME"] + "/.config"),
|
os.environ["HOME"] + "/.config"),
|
||||||
"presets",
|
"presets",
|
||||||
self.prefix,
|
self.prefix,
|
||||||
to_slug_case(self.old_name) + ".json",
|
to_slug_case(self.old_name) + ".json",
|
||||||
))
|
)
|
||||||
|
)
|
||||||
with open(
|
with open(
|
||||||
os.path.join(
|
os.path.join(
|
||||||
os.environ.get("XDG_CONFIG_HOME",
|
os.environ.get("XDG_CONFIG_HOME",
|
||||||
|
@ -129,27 +130,30 @@ class GradiencePresetRow(Adw.ActionRow):
|
||||||
}
|
}
|
||||||
file.write(json.dumps(object_to_write, indent=4))
|
file.write(json.dumps(object_to_write, indent=4))
|
||||||
self.app.clear_dirty()
|
self.app.clear_dirty()
|
||||||
self.toast_overlay.add_toast(
|
self.toast_overlay.add_toast(Adw.Toast(title=_("Preset renamed")))
|
||||||
Adw.Toast(title=_("Preset renamed"))
|
|
||||||
)
|
|
||||||
self.old_name = self.name
|
self.old_name = self.name
|
||||||
|
|
||||||
def do_delete_preset(self):
|
def do_delete_preset(self):
|
||||||
if self.delete_preset:
|
if self.delete_preset:
|
||||||
try:
|
try:
|
||||||
os.rename(os.path.join(
|
os.rename(
|
||||||
os.environ.get("XDG_CONFIG_HOME",
|
os.path.join(
|
||||||
os.environ["HOME"] + "/.config"),
|
os.environ.get(
|
||||||
|
"XDG_CONFIG_HOME", os.environ["HOME"] + "/.config"
|
||||||
|
),
|
||||||
"presets",
|
"presets",
|
||||||
self.prefix,
|
self.prefix,
|
||||||
to_slug_case(self.old_name) + ".json",
|
to_slug_case(self.old_name) + ".json",
|
||||||
), os.path.join(
|
),
|
||||||
os.environ.get("XDG_CONFIG_HOME",
|
os.path.join(
|
||||||
os.environ["HOME"] + "/.config"),
|
os.environ.get(
|
||||||
|
"XDG_CONFIG_HOME", os.environ["HOME"] + "/.config"
|
||||||
|
),
|
||||||
"presets",
|
"presets",
|
||||||
self.prefix,
|
self.prefix,
|
||||||
to_slug_case(self.old_name) + ".json.to_delete",
|
to_slug_case(self.old_name) + ".json.to_delete",
|
||||||
))
|
),
|
||||||
|
)
|
||||||
except Exception as exception:
|
except Exception as exception:
|
||||||
print(exception.with_traceback())
|
print(exception.with_traceback())
|
||||||
finally:
|
finally:
|
||||||
|
@ -160,13 +164,16 @@ class GradiencePresetRow(Adw.ActionRow):
|
||||||
def on_delete_toast_dismissed(self, widget):
|
def on_delete_toast_dismissed(self, widget):
|
||||||
if self.delete_preset:
|
if self.delete_preset:
|
||||||
try:
|
try:
|
||||||
os.remove(os.path.join(
|
os.remove(
|
||||||
os.environ.get("XDG_CONFIG_HOME",
|
os.path.join(
|
||||||
os.environ["HOME"] + "/.config"),
|
os.environ.get(
|
||||||
|
"XDG_CONFIG_HOME", os.environ["HOME"] + "/.config"
|
||||||
|
),
|
||||||
"presets",
|
"presets",
|
||||||
self.prefix,
|
self.prefix,
|
||||||
to_slug_case(self.old_name) + ".json.to_delete",
|
to_slug_case(self.old_name) + ".json.to_delete",
|
||||||
))
|
)
|
||||||
|
)
|
||||||
except Exception as exception:
|
except Exception as exception:
|
||||||
print(exception.with_traceback())
|
print(exception.with_traceback())
|
||||||
self.toast_overlay.add_toast(
|
self.toast_overlay.add_toast(
|
||||||
|
@ -174,25 +181,29 @@ class GradiencePresetRow(Adw.ActionRow):
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
self.toast_overlay.add_toast(
|
self.toast_overlay.add_toast(
|
||||||
Adw.Toast(title=_("Preset removed"))
|
Adw.Toast(title=_("Preset removed")))
|
||||||
)
|
|
||||||
finally:
|
finally:
|
||||||
self.win.reload_pref_group()
|
self.win.reload_pref_group()
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
os.rename(os.path.join(
|
os.rename(
|
||||||
os.environ.get("XDG_CONFIG_HOME",
|
os.path.join(
|
||||||
os.environ["HOME"] + "/.config"),
|
os.environ.get(
|
||||||
|
"XDG_CONFIG_HOME", os.environ["HOME"] + "/.config"
|
||||||
|
),
|
||||||
"presets",
|
"presets",
|
||||||
self.prefix,
|
self.prefix,
|
||||||
to_slug_case(self.old_name) + ".json.to_delete",
|
to_slug_case(self.old_name) + ".json.to_delete",
|
||||||
), os.path.join(
|
),
|
||||||
os.environ.get("XDG_CONFIG_HOME",
|
os.path.join(
|
||||||
os.environ["HOME"] + "/.config"),
|
os.environ.get(
|
||||||
|
"XDG_CONFIG_HOME", os.environ["HOME"] + "/.config"
|
||||||
|
),
|
||||||
"presets",
|
"presets",
|
||||||
self.prefix,
|
self.prefix,
|
||||||
to_slug_case(self.old_name) + ".json",
|
to_slug_case(self.old_name) + ".json",
|
||||||
))
|
),
|
||||||
|
)
|
||||||
except Exception as exception:
|
except Exception as exception:
|
||||||
print(exception.with_traceback())
|
print(exception.with_traceback())
|
||||||
finally:
|
finally:
|
||||||
|
|
|
@ -31,6 +31,7 @@ from .modules.custom_presets import fetch_presets
|
||||||
from .constants import rootdir, build_type
|
from .constants import rootdir, build_type
|
||||||
from .modules.utils import to_slug_case
|
from .modules.utils import to_slug_case
|
||||||
from .repo_row import GradienceRepoRow
|
from .repo_row import GradienceRepoRow
|
||||||
|
|
||||||
PRESETS_LIST_URL = "https://github.com/GradienceTeam/Community/raw/main/presets.json"
|
PRESETS_LIST_URL = "https://github.com/GradienceTeam/Community/raw/main/presets.json"
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,7 +56,8 @@ class GradiencePresetWindow(Adw.Window):
|
||||||
custom_presets = {}
|
custom_presets = {}
|
||||||
|
|
||||||
official_repositories = {
|
official_repositories = {
|
||||||
"Official": "https://github.com/GradienceTeam/Community/raw/main/presets.json"}
|
"Official": "https://github.com/GradienceTeam/Community/raw/main/presets.json"
|
||||||
|
}
|
||||||
|
|
||||||
search_results_list = []
|
search_results_list = []
|
||||||
|
|
||||||
|
@ -90,8 +92,7 @@ class GradiencePresetWindow(Adw.Window):
|
||||||
self.save_repos()
|
self.save_repos()
|
||||||
|
|
||||||
def save_repos(self):
|
def save_repos(self):
|
||||||
self.settings.set_value(
|
self.settings.set_value("repos", GLib.Variant(
|
||||||
"repos", GLib.Variant(
|
|
||||||
"a{sv}", self.user_repositories))
|
"a{sv}", self.user_repositories))
|
||||||
self.reload_repos_group()
|
self.reload_repos_group()
|
||||||
self.setup_explore()
|
self.setup_explore()
|
||||||
|
@ -131,16 +132,13 @@ class GradiencePresetWindow(Adw.Window):
|
||||||
dialog = Adw.MessageDialog(
|
dialog = Adw.MessageDialog(
|
||||||
transient_for=self,
|
transient_for=self,
|
||||||
heading=_("Add new repository"),
|
heading=_("Add new repository"),
|
||||||
body=_(
|
body=_("Add a repository to install additional presets"),
|
||||||
"Add a repository to install additional presets"
|
|
||||||
),
|
|
||||||
body_use_markup=True,
|
body_use_markup=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
dialog.add_response("cancel", _("Cancel"))
|
dialog.add_response("cancel", _("Cancel"))
|
||||||
dialog.add_response("add", _("Add"))
|
dialog.add_response("add", _("Add"))
|
||||||
dialog.set_response_appearance(
|
dialog.set_response_appearance("add", Adw.ResponseAppearance.SUGGESTED)
|
||||||
"add", Adw.ResponseAppearance.SUGGESTED)
|
|
||||||
dialog.set_default_response("cancel")
|
dialog.set_default_response("cancel")
|
||||||
dialog.set_close_response("cancel")
|
dialog.set_close_response("cancel")
|
||||||
|
|
||||||
|
@ -191,9 +189,11 @@ class GradiencePresetWindow(Adw.Window):
|
||||||
self.search_spinner.props.visible = False
|
self.search_spinner.props.visible = False
|
||||||
|
|
||||||
for (preset, preset_name), preset_url in zip(
|
for (preset, preset_name), preset_url in zip(
|
||||||
self.explore_presets.items(), urls):
|
self.explore_presets.items(), urls
|
||||||
|
):
|
||||||
row = GradienceExplorePresetRow(
|
row = GradienceExplorePresetRow(
|
||||||
preset_name, preset_url, self, repo_name)
|
preset_name, preset_url, self, repo_name
|
||||||
|
)
|
||||||
self.search_results.append(row)
|
self.search_results.append(row)
|
||||||
self.search_results_list.append(row)
|
self.search_results_list.append(row)
|
||||||
if not_offline:
|
if not_offline:
|
||||||
|
@ -205,8 +205,7 @@ class GradiencePresetWindow(Adw.Window):
|
||||||
self.file_chooser_dialog.set_transient_for(self)
|
self.file_chooser_dialog.set_transient_for(self)
|
||||||
|
|
||||||
self.file_chooser_dialog.connect(
|
self.file_chooser_dialog.connect(
|
||||||
"response", self.on_file_chooser_response
|
"response", self.on_file_chooser_response)
|
||||||
)
|
|
||||||
|
|
||||||
def connect_signals(self):
|
def connect_signals(self):
|
||||||
self.search_entry.connect("search-changed", self.on_search_changed)
|
self.search_entry.connect("search-changed", self.on_search_changed)
|
||||||
|
@ -240,18 +239,23 @@ class GradiencePresetWindow(Adw.Window):
|
||||||
Adw.Toast(title=_("Preset already exists"))
|
Adw.Toast(title=_("Preset already exists"))
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
shutil.copy(self.preset_path.get_path(), os.path.join(
|
shutil.copy(
|
||||||
os.environ.get("XDG_CONFIG_HOME",
|
self.preset_path.get_path(),
|
||||||
os.environ["HOME"] + "/.config"),
|
os.path.join(
|
||||||
|
os.environ.get(
|
||||||
|
"XDG_CONFIG_HOME", os.environ["HOME"] +
|
||||||
|
"/.config"
|
||||||
|
),
|
||||||
"presets",
|
"presets",
|
||||||
preset_file
|
preset_file,
|
||||||
))
|
),
|
||||||
self.toast_overlay.add_toast(
|
|
||||||
Adw.Toast(title=_("Preset imported"))
|
|
||||||
)
|
)
|
||||||
|
self.toast_overlay.add_toast(
|
||||||
|
Adw.Toast(title=_("Preset imported")))
|
||||||
else:
|
else:
|
||||||
self.toast_overlay.add_toast(Adw.Toast(
|
self.toast_overlay.add_toast(
|
||||||
title=_("Unsupported file format, must be .json")))
|
Adw.Toast(title=_("Unsupported file format, must be .json"))
|
||||||
|
)
|
||||||
|
|
||||||
self.reload_pref_group()
|
self.reload_pref_group()
|
||||||
|
|
||||||
|
@ -277,7 +281,9 @@ class GradiencePresetWindow(Adw.Window):
|
||||||
if file_name.endswith(".json"):
|
if file_name.endswith(".json"):
|
||||||
try:
|
try:
|
||||||
with open(
|
with open(
|
||||||
os.path.join(preset_directory, file_name), "r", encoding="utf-8"
|
os.path.join(preset_directory, file_name),
|
||||||
|
"r",
|
||||||
|
encoding="utf-8",
|
||||||
) as file:
|
) as file:
|
||||||
preset_text = file.read()
|
preset_text = file.read()
|
||||||
preset = json.loads(preset_text)
|
preset = json.loads(preset_text)
|
||||||
|
@ -285,8 +291,9 @@ class GradiencePresetWindow(Adw.Window):
|
||||||
raise KeyError("variables")
|
raise KeyError("variables")
|
||||||
if preset.get("palette") is None:
|
if preset.get("palette") is None:
|
||||||
raise KeyError("palette")
|
raise KeyError("palette")
|
||||||
presets_list[file_name.replace(
|
presets_list[file_name.replace(".json", "")] = preset[
|
||||||
".json", "")] = preset["name"]
|
"name"
|
||||||
|
]
|
||||||
except Exception:
|
except Exception:
|
||||||
self.toast_overlay.add_toast(
|
self.toast_overlay.add_toast(
|
||||||
Adw.Toast(title=_("Failed to load preset"))
|
Adw.Toast(title=_("Failed to load preset"))
|
||||||
|
@ -301,7 +308,9 @@ class GradiencePresetWindow(Adw.Window):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open(
|
with open(
|
||||||
os.path.join(preset_directory, "user", repo), "r", encoding="utf-8"
|
os.path.join(preset_directory, "user", repo),
|
||||||
|
"r",
|
||||||
|
encoding="utf-8",
|
||||||
) as file:
|
) as file:
|
||||||
preset_text = file.read()
|
preset_text = file.read()
|
||||||
preset = json.loads(preset_text)
|
preset = json.loads(preset_text)
|
||||||
|
@ -309,8 +318,9 @@ class GradiencePresetWindow(Adw.Window):
|
||||||
raise KeyError("variables")
|
raise KeyError("variables")
|
||||||
if preset.get("palette") is None:
|
if preset.get("palette") is None:
|
||||||
raise KeyError("palette")
|
raise KeyError("palette")
|
||||||
presets_list["user"][file_name.replace(
|
presets_list["user"][file_name.replace(".json", "")] = preset[
|
||||||
".json", "")] = preset["name"]
|
"name"
|
||||||
|
]
|
||||||
except Exception:
|
except Exception:
|
||||||
self.toast_overlay.add_toast(
|
self.toast_overlay.add_toast(
|
||||||
Adw.Toast(title=_("Failed to load preset"))
|
Adw.Toast(title=_("Failed to load preset"))
|
||||||
|
@ -329,7 +339,10 @@ class GradiencePresetWindow(Adw.Window):
|
||||||
self.preset_list = Adw.PreferencesGroup()
|
self.preset_list = Adw.PreferencesGroup()
|
||||||
self.preset_list.set_title(_("User Presets"))
|
self.preset_list.set_title(_("User Presets"))
|
||||||
self.preset_list.set_description(
|
self.preset_list.set_description(
|
||||||
_("See <a href=\"https://github.com/GradienceTeam/Community\">GradienceTeam/Community</a> on Github for more presets"))
|
_(
|
||||||
|
'See <a href="https://github.com/GradienceTeam/Community">GradienceTeam/Community</a> on Github for more presets'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
if self.custom_presets:
|
if self.custom_presets:
|
||||||
for repo, presets in self.custom_presets.items():
|
for repo, presets in self.custom_presets.items():
|
||||||
|
@ -340,6 +353,9 @@ class GradiencePresetWindow(Adw.Window):
|
||||||
else:
|
else:
|
||||||
self.preset_empty = Adw.ActionRow()
|
self.preset_empty = Adw.ActionRow()
|
||||||
self.preset_empty.set_title(
|
self.preset_empty.set_title(
|
||||||
_("No preset found! Use the import button to import one or search one on the Explore tab"))
|
_(
|
||||||
|
"No preset found! Use the import button to import one or search one on the Explore tab"
|
||||||
|
)
|
||||||
|
)
|
||||||
self.preset_list.add(self.preset_empty)
|
self.preset_list.add(self.preset_empty)
|
||||||
self.installed.add(self.preset_list)
|
self.installed.add(self.preset_list)
|
||||||
|
|
|
@ -48,10 +48,9 @@ class GradienceRepoRow(Adw.ActionRow):
|
||||||
self.remove_button.set_visible(False)
|
self.remove_button.set_visible(False)
|
||||||
|
|
||||||
self.path = os.path.join(
|
self.path = os.path.join(
|
||||||
os.environ.get("XDG_CONFIG_HOME",
|
os.environ.get("XDG_CONFIG_HOME", os.environ["HOME"] + "/.config"),
|
||||||
os.environ["HOME"] + "/.config"),
|
|
||||||
"presets",
|
"presets",
|
||||||
to_slug_case(repo_name)
|
to_slug_case(repo_name),
|
||||||
)
|
)
|
||||||
|
|
||||||
if not os.path.exists(self.path):
|
if not os.path.exists(self.path):
|
||||||
|
@ -59,9 +58,7 @@ class GradienceRepoRow(Adw.ActionRow):
|
||||||
|
|
||||||
@Gtk.Template.Callback()
|
@Gtk.Template.Callback()
|
||||||
def on_remove_button_clicked(self, *_args):
|
def on_remove_button_clicked(self, *_args):
|
||||||
self.toast_overlay.add_toast(
|
self.toast_overlay.add_toast(Adw.Toast(title=_("Repository removed")))
|
||||||
Adw.Toast(title=_("Repository removed"))
|
|
||||||
)
|
|
||||||
|
|
||||||
self.win.remove_repo(self.name)
|
self.win.remove_repo(self.name)
|
||||||
|
|
||||||
|
|
|
@ -51,13 +51,15 @@ class RunAsync(threading.Thread):
|
||||||
try:
|
try:
|
||||||
result = self.task_func(*args, **kwargs)
|
result = self.task_func(*args, **kwargs)
|
||||||
except Exception as exception:
|
except Exception as exception:
|
||||||
buglog("Error while running async job: "
|
buglog(
|
||||||
f"{self.task_func}\nException: {exception}")
|
"Error while running async job: "
|
||||||
|
f"{self.task_func}\nException: {exception}"
|
||||||
|
)
|
||||||
|
|
||||||
error = exception
|
error = exception
|
||||||
_ex_type, _ex_value, trace = sys.exc_info()
|
_ex_type, _ex_value, trace = sys.exc_info()
|
||||||
traceback.print_tb(trace)
|
traceback.print_tb(trace)
|
||||||
traceback_info = '\n'.join(traceback.format_tb(trace))
|
traceback_info = "\n".join(traceback.format_tb(trace))
|
||||||
|
|
||||||
buglog([str(exception), traceback_info])
|
buglog([str(exception), traceback_info])
|
||||||
self.source_id = GLib.idle_add(self.callback, result, error)
|
self.source_id = GLib.idle_add(self.callback, result, error)
|
||||||
|
|
|
@ -18,13 +18,7 @@
|
||||||
|
|
||||||
|
|
||||||
class GradienceSetting:
|
class GradienceSetting:
|
||||||
def __init__(
|
def __init__(self, name, title, value_type, explanation=None, default_value=None):
|
||||||
self,
|
|
||||||
name,
|
|
||||||
title,
|
|
||||||
value_type,
|
|
||||||
explanation=None,
|
|
||||||
default_value=None):
|
|
||||||
# TODO supported types:
|
# TODO supported types:
|
||||||
# text
|
# text
|
||||||
# integer
|
# integer
|
||||||
|
|
|
@ -64,27 +64,19 @@ class GradienceMainWindow(Adw.ApplicationWindow):
|
||||||
self.settings = Gio.Settings(app_id)
|
self.settings = Gio.Settings(app_id)
|
||||||
|
|
||||||
self.settings.bind(
|
self.settings.bind(
|
||||||
"window-width",
|
"window-width", self, "default-width", Gio.SettingsBindFlags.DEFAULT
|
||||||
self,
|
)
|
||||||
"default-width",
|
|
||||||
Gio.SettingsBindFlags.DEFAULT)
|
|
||||||
|
|
||||||
self.settings.bind(
|
self.settings.bind(
|
||||||
"window-height",
|
"window-height", self, "default-height", Gio.SettingsBindFlags.DEFAULT
|
||||||
self,
|
)
|
||||||
"default-height",
|
|
||||||
Gio.SettingsBindFlags.DEFAULT)
|
|
||||||
self.settings.bind(
|
self.settings.bind(
|
||||||
"window-maximized",
|
"window-maximized", self, "maximized", Gio.SettingsBindFlags.DEFAULT
|
||||||
self,
|
)
|
||||||
"maximized",
|
|
||||||
Gio.SettingsBindFlags.DEFAULT)
|
|
||||||
|
|
||||||
self.settings.bind(
|
self.settings.bind(
|
||||||
"window-fullscreen",
|
"window-fullscreen", self, "fullscreened", Gio.SettingsBindFlags.DEFAULT
|
||||||
self,
|
)
|
||||||
"fullscreened",
|
|
||||||
Gio.SettingsBindFlags.DEFAULT)
|
|
||||||
|
|
||||||
self.connect("close-request", self.__close_window)
|
self.connect("close-request", self.__close_window)
|
||||||
self.style_manager = self.get_application().style_manager
|
self.style_manager = self.get_application().style_manager
|
||||||
|
@ -97,11 +89,9 @@ class GradienceMainWindow(Adw.ApplicationWindow):
|
||||||
def get_default_wallpaper(self):
|
def get_default_wallpaper(self):
|
||||||
background_settings = Gio.Settings("org.gnome.desktop.background")
|
background_settings = Gio.Settings("org.gnome.desktop.background")
|
||||||
if self.style_manager.get_dark():
|
if self.style_manager.get_dark():
|
||||||
picture_uri = background_settings.get_string(
|
picture_uri = background_settings.get_string("picture-uri-dark")
|
||||||
"picture-uri-dark")
|
|
||||||
else:
|
else:
|
||||||
picture_uri = background_settings.get_string(
|
picture_uri = background_settings.get_string("picture-uri")
|
||||||
"picture-uri")
|
|
||||||
buglog(picture_uri)
|
buglog(picture_uri)
|
||||||
if picture_uri.startswith("file://"):
|
if picture_uri.startswith("file://"):
|
||||||
self.monet_image_file = Gio.File.new_for_uri(picture_uri)
|
self.monet_image_file = Gio.File.new_for_uri(picture_uri)
|
||||||
|
@ -128,8 +118,7 @@ class GradienceMainWindow(Adw.ApplicationWindow):
|
||||||
self.monet_image_file = self.monet_file_chooser_dialog.get_file()
|
self.monet_image_file = self.monet_file_chooser_dialog.get_file()
|
||||||
image_basename = self.monet_image_file.get_basename()
|
image_basename = self.monet_image_file.get_basename()
|
||||||
self.monet_file_chooser_button.set_label(image_basename)
|
self.monet_file_chooser_button.set_label(image_basename)
|
||||||
self.monet_file_chooser_button.set_tooltip_text(
|
self.monet_file_chooser_button.set_tooltip_text(image_basename)
|
||||||
image_basename)
|
|
||||||
self.monet_file_chooser_dialog.hide()
|
self.monet_file_chooser_dialog.hide()
|
||||||
|
|
||||||
if response == Gtk.ResponseType.ACCEPT:
|
if response == Gtk.ResponseType.ACCEPT:
|
||||||
|
@ -142,7 +131,10 @@ class GradienceMainWindow(Adw.ApplicationWindow):
|
||||||
self.monet_pref_group.set_name("monet")
|
self.monet_pref_group.set_name("monet")
|
||||||
self.monet_pref_group.set_title(_("Monet Engine"))
|
self.monet_pref_group.set_title(_("Monet Engine"))
|
||||||
self.monet_pref_group.set_description(
|
self.monet_pref_group.set_description(
|
||||||
_("Monet is an engine that generates a Material Design 3 palette from an image's color."))
|
_(
|
||||||
|
"Monet is an engine that generates a Material Design 3 palette from an image's color."
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
self.apply_button = Gtk.Button()
|
self.apply_button = Gtk.Button()
|
||||||
self.apply_button.set_label(_("Apply"))
|
self.apply_button.set_label(_("Apply"))
|
||||||
|
@ -158,7 +150,7 @@ class GradienceMainWindow(Adw.ApplicationWindow):
|
||||||
|
|
||||||
self.monet_file_chooser_button = Gtk.Button()
|
self.monet_file_chooser_button = Gtk.Button()
|
||||||
self.monet_file_chooser_button.set_valign(Gtk.Align.CENTER)
|
self.monet_file_chooser_button.set_valign(Gtk.Align.CENTER)
|
||||||
#self.monet_file_chooser_button.set_label(_("Choose a file"))
|
# self.monet_file_chooser_button.set_label(_("Choose a file"))
|
||||||
# self.monet_file_chooser_button.set_icon_name("folder-pictures-symbolic")
|
# self.monet_file_chooser_button.set_icon_name("folder-pictures-symbolic")
|
||||||
|
|
||||||
child_button = Gtk.Box()
|
child_button = Gtk.Box()
|
||||||
|
@ -221,8 +213,9 @@ class GradienceMainWindow(Adw.ApplicationWindow):
|
||||||
if self.monet_image_file.endswith(".svg"):
|
if self.monet_image_file.endswith(".svg"):
|
||||||
drawing = svg2rlg(self.monet_image_file)
|
drawing = svg2rlg(self.monet_image_file)
|
||||||
self.monet_image_file = os.path.join(
|
self.monet_image_file = os.path.join(
|
||||||
os.environ.get("XDG_RUNTIME_DIR"), "gradience_bg.png")
|
os.environ.get("XDG_RUNTIME_DIR"), "gradience_bg.png"
|
||||||
renderPM.drawToFile(drawing, self.monet_image_file, fmt='PNG')
|
)
|
||||||
|
renderPM.drawToFile(drawing, self.monet_image_file, fmt="PNG")
|
||||||
|
|
||||||
if self.monet_image_file.endswith(".xml"):
|
if self.monet_image_file.endswith(".xml"):
|
||||||
buglog("XML WIP")
|
buglog("XML WIP")
|
||||||
|
@ -235,10 +228,11 @@ class GradienceMainWindow(Adw.ApplicationWindow):
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
basewidth = 64
|
basewidth = 64
|
||||||
wpercent = (basewidth / float(self.monet_img.size[0]))
|
wpercent = basewidth / float(self.monet_img.size[0])
|
||||||
hsize = int((float(self.monet_img.size[1]) * float(wpercent)))
|
hsize = int((float(self.monet_img.size[1]) * float(wpercent)))
|
||||||
self.monet_img = self.monet_img.resize(
|
self.monet_img = self.monet_img.resize(
|
||||||
(basewidth, hsize), Image.Resampling.LANCZOS)
|
(basewidth, hsize), Image.Resampling.LANCZOS
|
||||||
|
)
|
||||||
self.theme = themeFromImage(self.monet_img)
|
self.theme = themeFromImage(self.monet_img)
|
||||||
self.tone = self.tone_row.get_selected_item()
|
self.tone = self.tone_row.get_selected_item()
|
||||||
self.monet_theme = self.monet_theme_row.get_selected_item()
|
self.monet_theme = self.monet_theme_row.get_selected_item()
|
||||||
|
@ -278,7 +272,10 @@ class GradienceMainWindow(Adw.ApplicationWindow):
|
||||||
palette_pref_group.set_name("palette_colors")
|
palette_pref_group.set_name("palette_colors")
|
||||||
palette_pref_group.set_title(_("Palette Colors"))
|
palette_pref_group.set_title(_("Palette Colors"))
|
||||||
palette_pref_group.set_description(
|
palette_pref_group.set_description(
|
||||||
_('Named palette colors used by some applications. Default colors follow the <a href="https://developer.gnome.org/hig/reference/palette.html">GNOME Human Interface Guidelines</a>.'))
|
_(
|
||||||
|
'Named palette colors used by some applications. Default colors follow the <a href="https://developer.gnome.org/hig/reference/palette.html">GNOME Human Interface Guidelines</a>.'
|
||||||
|
)
|
||||||
|
)
|
||||||
for color in settings_schema["palette"]:
|
for color in settings_schema["palette"]:
|
||||||
palette_shades = GradiencePaletteShades(
|
palette_shades = GradiencePaletteShades(
|
||||||
color["prefix"], color["title"], color["n_shades"]
|
color["prefix"], color["title"], color["n_shades"]
|
||||||
|
@ -296,10 +293,8 @@ class GradienceMainWindow(Adw.ApplicationWindow):
|
||||||
self.errors_button.set_visible(len(errors) > 0)
|
self.errors_button.set_visible(len(errors) > 0)
|
||||||
for error in errors:
|
for error in errors:
|
||||||
self.errors_list.append(
|
self.errors_list.append(
|
||||||
GradienceError(
|
GradienceError(error["error"], error["element"], error["line"])
|
||||||
error["error"],
|
)
|
||||||
error["element"],
|
|
||||||
error["line"]))
|
|
||||||
|
|
||||||
@Gtk.Template.Callback()
|
@Gtk.Template.Callback()
|
||||||
def on_presets_button_clicked(self, *args):
|
def on_presets_button_clicked(self, *args):
|
||||||
|
|
Loading…
Reference in a new issue