mirror of
https://github.com/Rafostar/clapper.git
synced 2025-08-30 16:02:00 +02:00
106 lines
2.7 KiB
JavaScript
106 lines
2.7 KiB
JavaScript
const { Gio, GLib, GObject, Gtk } = imports.gi;
|
|
const Debug = imports.clapper_src.debug;
|
|
const Menu = imports.clapper_src.menu;
|
|
const Misc = imports.clapper_src.misc;
|
|
|
|
const { debug } = Debug;
|
|
const { settings } = Misc;
|
|
|
|
var AppBase = GObject.registerClass(
|
|
class ClapperAppBase extends Gtk.Application
|
|
{
|
|
_init()
|
|
{
|
|
super._init({
|
|
application_id: Misc.appId,
|
|
});
|
|
|
|
this.doneFirstActivate = false;
|
|
}
|
|
|
|
vfunc_startup()
|
|
{
|
|
super.vfunc_startup();
|
|
|
|
const window = new Gtk.ApplicationWindow({
|
|
application: this,
|
|
title: Misc.appName,
|
|
});
|
|
|
|
if(!settings.get_boolean('render-shadows'))
|
|
window.add_css_class('gpufriendly');
|
|
|
|
if(
|
|
settings.get_boolean('dark-theme')
|
|
&& settings.get_boolean('brighter-sliders')
|
|
)
|
|
window.add_css_class('brightscale');
|
|
|
|
for(let action in Menu.actions) {
|
|
const simpleAction = new Gio.SimpleAction({
|
|
name: action
|
|
});
|
|
simpleAction.connect(
|
|
'activate', () => Menu.actions[action](this.active_window)
|
|
);
|
|
this.add_action(simpleAction);
|
|
}
|
|
}
|
|
|
|
vfunc_activate()
|
|
{
|
|
super.vfunc_activate();
|
|
|
|
if(!this.doneFirstActivate)
|
|
this._onFirstActivate();
|
|
|
|
this.active_window.present_with_time(
|
|
Math.floor(GLib.get_monotonic_time() / 1000)
|
|
);
|
|
}
|
|
|
|
run(arr)
|
|
{
|
|
super.run(arr || []);
|
|
}
|
|
|
|
_onFirstActivate()
|
|
{
|
|
const gtkSettings = Gtk.Settings.get_default();
|
|
settings.bind(
|
|
'dark-theme', gtkSettings,
|
|
'gtk-application-prefer-dark-theme',
|
|
Gio.SettingsBindFlags.GET
|
|
);
|
|
this._onThemeChanged(gtkSettings);
|
|
gtkSettings.connect('notify::gtk-theme-name', this._onThemeChanged.bind(this));
|
|
|
|
this.windowShowSignal = this.active_window.connect(
|
|
'show', this._onWindowShow.bind(this)
|
|
);
|
|
this.doneFirstActivate = true;
|
|
}
|
|
|
|
_onWindowShow(window)
|
|
{
|
|
window.disconnect(this.windowShowSignal);
|
|
this.windowShowSignal = null;
|
|
}
|
|
|
|
_onThemeChanged(gtkSettings)
|
|
{
|
|
const theme = gtkSettings.gtk_theme_name;
|
|
debug(`user selected theme: ${theme}`);
|
|
|
|
if(!theme.endsWith('-dark'))
|
|
return;
|
|
|
|
/* We need to request a default theme with optional dark variant
|
|
to make the "gtk_application_prefer_dark_theme" setting work */
|
|
const parsedTheme = theme.substring(0, theme.lastIndexOf('-'));
|
|
|
|
gtkSettings.gtk_theme_name = parsedTheme;
|
|
debug(`set theme: ${parsedTheme}`);
|
|
}
|
|
});
|