mirror of
https://github.com/Rafostar/clapper.git
synced 2025-08-30 07:42:23 +02:00
The "clapper_src" directory name was unusual. This was done to make it work as a widget for other apps. Now that this functionality got removed it can be named simply "src" as recommended by guidelines.
106 lines
2.7 KiB
JavaScript
106 lines
2.7 KiB
JavaScript
const { Gio, GLib, GObject, Gtk } = imports.gi;
|
|
const Debug = imports.src.debug;
|
|
const Menu = imports.src.menu;
|
|
const Misc = imports.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}`);
|
|
}
|
|
});
|