mirror of
https://gitlab.com/thebiblelover7/dotfiles.git
synced 2025-12-14 04:03:50 +00:00
initial commit
This commit is contained in:
@@ -0,0 +1,571 @@
|
||||
/* exported init, enable, disable */
|
||||
|
||||
const Mainloop = imports.mainloop;
|
||||
|
||||
const GLib = imports.gi.GLib;
|
||||
const Gio = imports.gi.Gio;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const ExtensionSystem = imports.ui.extensionSystem;
|
||||
const Main = imports.ui.main;
|
||||
|
||||
const Me = imports.misc.extensionUtils.getCurrentExtension();
|
||||
|
||||
const Convenience = Me.imports.convenience;
|
||||
const Events = Me.imports.events;
|
||||
const Intellifade = Me.imports.intellifade;
|
||||
const Settings = Me.imports.settings;
|
||||
const Util = Me.imports.util;
|
||||
|
||||
const Theming = Me.imports.theming;
|
||||
const Transitions = Me.imports.transitions;
|
||||
|
||||
const SETTINGS_DELAY = 3000;
|
||||
|
||||
/* Only way to prevent multiple runs apparently. Hacky-ness. */
|
||||
let modified = false;
|
||||
|
||||
/* Initialize */
|
||||
function init() { }
|
||||
|
||||
function enable() {
|
||||
/* Initialize Settings */
|
||||
initialize_settings();
|
||||
|
||||
/* Initialize Utilities */
|
||||
Transitions.init();
|
||||
Theming.init();
|
||||
Intellifade.init();
|
||||
|
||||
/* Modify the panel. */
|
||||
modify_panel();
|
||||
|
||||
/* Start the event loop. */
|
||||
Events.init();
|
||||
|
||||
/* Simulate window changes. */
|
||||
Intellifade.forceSyncCheck();
|
||||
|
||||
}
|
||||
|
||||
function disable() {
|
||||
/* Do this first in case any of the upcoming methods fail. */
|
||||
unmodify_panel();
|
||||
|
||||
try {
|
||||
/* Disconnect & Null Signals */
|
||||
Events.cleanup();
|
||||
|
||||
/* Cleanup Settings */
|
||||
Settings.unbind();
|
||||
Settings.cleanup();
|
||||
|
||||
/* Cleanup Transitions */
|
||||
Transitions.cleanup();
|
||||
|
||||
/* Cleanup Theming */
|
||||
Theming.cleanup();
|
||||
|
||||
/* Cleanup Intellifade */
|
||||
Intellifade.cleanup();
|
||||
} catch (error) {
|
||||
log('[DPT] Encountered an error cleaning up extension: ' + error);
|
||||
}
|
||||
|
||||
/* Shouldn't be an issue, but let's make sure it isn't. */
|
||||
modified = false;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function modify_panel() {
|
||||
/* Get Rid of the Panel's CSS Background */
|
||||
Theming.initialize_background_styles();
|
||||
|
||||
let text_shadow = Theming.register_text_shadow(Settings.get_text_shadow_color(), Settings.get_text_shadow_position());
|
||||
let icon_shadow = Theming.register_icon_shadow(Settings.get_icon_shadow_color(), Settings.get_icon_shadow_position());
|
||||
|
||||
/* Add Text Shadowing */
|
||||
if (Settings.add_text_shadow()) {
|
||||
if (text_shadow !== null) {
|
||||
Theming.add_text_shadow();
|
||||
} else {
|
||||
log('[Dynamic Panel Transparency] Failed to enabled text shadowing.');
|
||||
}
|
||||
}
|
||||
|
||||
/* Add Icon Shadowing */
|
||||
if (Settings.add_icon_shadow()) {
|
||||
if (icon_shadow !== null) {
|
||||
Theming.add_icon_shadow();
|
||||
} else {
|
||||
log('[Dynamic Panel Transparency] Failed to enabled icon shadowing.');
|
||||
}
|
||||
}
|
||||
|
||||
/* Register text color styling. */
|
||||
let [text, icon, arrow] = Theming.register_text_color(Settings.get_text_color()); // eslint-disable-line no-unused-vars
|
||||
let [maximized_text, maximized_icon, maximized_arrow] = Theming.register_text_color(Settings.get_maximized_text_color(), 'maximized'); // eslint-disable-line no-unused-vars
|
||||
|
||||
if (Settings.get_enable_text_color()) {
|
||||
if (text !== null) {
|
||||
Theming.set_text_color();
|
||||
} else {
|
||||
log('[Dynamic Panel Transparency] Failed to enabled text coloring.');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function unmodify_panel() {
|
||||
|
||||
/* Remove corner styling */
|
||||
Theming.clear_corner_color();
|
||||
|
||||
/* Remove Our Styling */
|
||||
Theming.reapply_panel_styling();
|
||||
Theming.reapply_panel_background_image();
|
||||
|
||||
Theming.remove_panel_transparency();
|
||||
|
||||
/* Remove shadowing */
|
||||
if (Theming.has_text_shadow()) {
|
||||
Theming.remove_text_shadow();
|
||||
}
|
||||
|
||||
if (Theming.has_icon_shadow()) {
|
||||
Theming.remove_icon_shadow();
|
||||
}
|
||||
|
||||
/* Remove text coloring */
|
||||
Theming.remove_text_color();
|
||||
|
||||
/* Remove maximized text coloring */
|
||||
Theming.remove_text_color('maximized');
|
||||
}
|
||||
|
||||
// TODO: Merge handler code or hide it behind the backend.
|
||||
function initialize_settings() {
|
||||
/* Setup settings... */
|
||||
Settings.init();
|
||||
|
||||
/* Register settings... */
|
||||
Settings.add({
|
||||
key: 'hide-corners',
|
||||
name: 'hide_corners',
|
||||
type: 'b',
|
||||
handler: (function() {
|
||||
Transitions.update_corner_alpha();
|
||||
}.bind(this))
|
||||
});
|
||||
Settings.add({
|
||||
key: 'transition-speed',
|
||||
name: 'transition_speed',
|
||||
type: 'i',
|
||||
handler: (
|
||||
/* Update the backend24 transition CSS. */
|
||||
function() {
|
||||
Main.panel.remove_style_class_name('dpt-panel-transition-duration');
|
||||
|
||||
let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
|
||||
|
||||
for (let i = Theming.stylesheets.length - 1; i >= 0; i--) {
|
||||
let stylesheet = Theming.stylesheets[i];
|
||||
if (stylesheet.indexOf('transitions') !== -1 && stylesheet.endsWith('panel-transition-duration.dpt.css')) {
|
||||
theme.unload_stylesheet(Util.get_file(stylesheet));
|
||||
Util.remove_file(stylesheet);
|
||||
Theming.stylesheets.splice(i, 1);
|
||||
}
|
||||
}
|
||||
|
||||
const id = this.panel_transition_update_id = Mainloop.timeout_add(SETTINGS_DELAY, (function() { // eslint-disable-line no-magic-numbers
|
||||
if (id !== this.panel_transition_update_id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Get Rid of the Panel's CSS */
|
||||
Theming.update_transition_css();
|
||||
|
||||
Intellifade.forceSyncCheck();
|
||||
|
||||
return false;
|
||||
}).bind(this));
|
||||
}).bind(this)
|
||||
});
|
||||
Settings.add({
|
||||
key: 'unmaximized-opacity',
|
||||
name: 'unmaximized_opacity',
|
||||
type: 'i',
|
||||
getter: 'get_unmaximized_opacity',
|
||||
handler: (function() {
|
||||
const super_id = this.opacity_update_id = Mainloop.timeout_add(SETTINGS_DELAY, (function() {
|
||||
if (super_id !== this.opacity_update_id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
|
||||
|
||||
for (let i = Theming.stylesheets.length - 1; i >= 0; i--) {
|
||||
let stylesheet = Theming.stylesheets[i];
|
||||
if (stylesheet.indexOf('background') !== -1 && stylesheet.indexOf('panel-') !== -1) {
|
||||
theme.unload_stylesheet(Util.get_file(stylesheet));
|
||||
Util.remove_file(stylesheet);
|
||||
Theming.stylesheets.splice(i, 1);
|
||||
}
|
||||
}
|
||||
|
||||
Theming.initialize_background_styles();
|
||||
|
||||
const id = this.panel_color_update_id = Mainloop.timeout_add(SETTINGS_DELAY, (function() { // eslint-disable-line no-magic-numbers
|
||||
if (id !== this.panel_color_update_id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Get Rid of the Panel's CSS Background */
|
||||
Theming.remove_background_color();
|
||||
|
||||
Intellifade.forceSyncCheck();
|
||||
|
||||
return false;
|
||||
}).bind(this));
|
||||
|
||||
return false;
|
||||
}).bind(this));
|
||||
}).bind(this)
|
||||
});
|
||||
Settings.add({
|
||||
key: 'maximized-opacity',
|
||||
name: 'maximized_opacity',
|
||||
type: 'i',
|
||||
getter: 'get_maximized_opacity',
|
||||
handler: (function() {
|
||||
const super_id = this.opacity_update_id = Mainloop.timeout_add(SETTINGS_DELAY, (function() {
|
||||
if (super_id !== this.opacity_update_id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
|
||||
|
||||
for (let i = Theming.stylesheets.length - 1; i >= 0; i--) {
|
||||
let stylesheet = Theming.stylesheets[i];
|
||||
if (stylesheet.indexOf('background') !== -1 && stylesheet.indexOf('panel-') !== -1) {
|
||||
theme.unload_stylesheet(Util.get_file(stylesheet));
|
||||
Util.remove_file(stylesheet);
|
||||
Theming.stylesheets.splice(i, 1);
|
||||
}
|
||||
}
|
||||
|
||||
Theming.initialize_background_styles();
|
||||
|
||||
const id = this.panel_color_update_id = Mainloop.timeout_add(SETTINGS_DELAY, (function() { // eslint-disable-line no-magic-numbers
|
||||
if (id !== this.panel_color_update_id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Get Rid of the Panel's CSS Background */
|
||||
Intellifade.forceSyncCheck();
|
||||
|
||||
return false;
|
||||
}).bind(this));
|
||||
|
||||
return false;
|
||||
}).bind(this));
|
||||
}).bind(this)
|
||||
});
|
||||
Settings.add({
|
||||
key: 'panel-color',
|
||||
name: 'panel_color',
|
||||
type: 'ai',
|
||||
parser: Util.tuple_to_native_color,
|
||||
handler: (
|
||||
/* Handler for 3.24+ */
|
||||
function() {
|
||||
Theming.remove_background_color();
|
||||
|
||||
let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
|
||||
|
||||
for (let i = Theming.stylesheets.length - 1; i >= 0; i--) {
|
||||
let stylesheet = Theming.stylesheets[i];
|
||||
if (stylesheet.indexOf('background') !== -1 && stylesheet.indexOf('panel.dpt.css') !== -1) {
|
||||
theme.unload_stylesheet(Util.get_file(stylesheet));
|
||||
Util.remove_file(stylesheet);
|
||||
Theming.stylesheets.splice(i, 1);
|
||||
}
|
||||
}
|
||||
Theming.register_background_color(Settings.get_panel_color(), 'custom');
|
||||
const id = this.panel_color_update_id = Mainloop.timeout_add(SETTINGS_DELAY, (function() { // eslint-disable-line no-magic-numbers
|
||||
if (id !== this.panel_color_update_id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Get Rid of the Panel's CSS Background */
|
||||
Theming.remove_background_color();
|
||||
|
||||
Intellifade.forceSyncCheck();
|
||||
|
||||
return false;
|
||||
}).bind(this));
|
||||
/* Legacy Handler */
|
||||
}).bind(this)
|
||||
});
|
||||
Settings.add({
|
||||
key: 'trigger-apps',
|
||||
name: 'trigger_apps',
|
||||
type: 'as'
|
||||
});
|
||||
Settings.add({
|
||||
key: 'trigger-windows',
|
||||
name: 'trigger_windows',
|
||||
type: 'as'
|
||||
});
|
||||
Settings.add({
|
||||
key: 'text-shadow',
|
||||
name: 'text_shadow',
|
||||
type: 'b',
|
||||
getter: 'add_text_shadow',
|
||||
handler: (function() {
|
||||
if (Settings.add_text_shadow()) {
|
||||
Theming.add_text_shadow();
|
||||
} else {
|
||||
Theming.remove_text_shadow();
|
||||
}
|
||||
}).bind(this)
|
||||
});
|
||||
Settings.add({
|
||||
key: 'icon-shadow',
|
||||
name: 'icon_shadow',
|
||||
type: 'b',
|
||||
getter: 'add_icon_shadow',
|
||||
handler: (function() {
|
||||
if (Settings.add_icon_shadow()) {
|
||||
Theming.add_icon_shadow();
|
||||
} else {
|
||||
Theming.remove_icon_shadow();
|
||||
}
|
||||
}).bind(this)
|
||||
});
|
||||
Settings.add({
|
||||
key: 'text-shadow-position',
|
||||
name: 'text_shadow_position',
|
||||
type: '(iii)',
|
||||
handler: (function() {
|
||||
Theming.remove_text_shadow();
|
||||
|
||||
let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
|
||||
|
||||
for (let i = Theming.stylesheets.length - 1; i >= 0; i--) {
|
||||
let stylesheet = Theming.stylesheets[i];
|
||||
if (stylesheet.indexOf('shadow') !== -1 && stylesheet.indexOf('text') !== -1) {
|
||||
theme.unload_stylesheet(Util.get_file(stylesheet));
|
||||
Util.remove_file(stylesheet);
|
||||
Theming.stylesheets.splice(i, 1);
|
||||
}
|
||||
}
|
||||
let text_shadow = Theming.register_text_shadow(Settings.get_text_shadow_color(), Settings.get_text_shadow_position());
|
||||
const id = this.text_shadow_update_id = Mainloop.timeout_add(SETTINGS_DELAY, (function() { // eslint-disable-line no-magic-numbers
|
||||
if (id !== this.text_shadow_update_id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Add Text Shadowing */
|
||||
if (Settings.add_text_shadow()) {
|
||||
if (text_shadow !== null) {
|
||||
Theming.add_text_shadow();
|
||||
} else {
|
||||
log('[Dynamic Panel Transparency] Failed to enabled text shadowing.');
|
||||
}
|
||||
}
|
||||
|
||||
Intellifade.forceSyncCheck();
|
||||
|
||||
return false;
|
||||
}).bind(this));
|
||||
}).bind(this)
|
||||
});
|
||||
Settings.add({
|
||||
key: 'icon-shadow-position',
|
||||
name: 'icon_shadow_position',
|
||||
type: '(iii)',
|
||||
handler: (function() {
|
||||
Theming.remove_icon_shadow();
|
||||
|
||||
let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
|
||||
|
||||
for (let i = Theming.stylesheets.length - 1; i >= 0; i--) {
|
||||
let stylesheet = Theming.stylesheets[i];
|
||||
if (stylesheet.indexOf('shadow') !== -1 && stylesheet.indexOf('icon') !== -1) {
|
||||
theme.unload_stylesheet(Util.get_file(stylesheet));
|
||||
Util.remove_file(stylesheet);
|
||||
Theming.stylesheets.splice(i, 1);
|
||||
}
|
||||
}
|
||||
let icon_shadow = Theming.register_icon_shadow(Settings.get_icon_shadow_color(), Settings.get_icon_shadow_position());
|
||||
const id = this.icon_shadow_update_id = Mainloop.timeout_add(SETTINGS_DELAY, (function() { // eslint-disable-line no-magic-numbers
|
||||
if (id !== this.icon_shadow_update_id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Add Icon Shadowing */
|
||||
if (Settings.add_icon_shadow()) {
|
||||
if (icon_shadow !== null) {
|
||||
Theming.add_icon_shadow();
|
||||
} else {
|
||||
log('[Dynamic Panel Transparency] Failed to enabled icon shadowing.');
|
||||
}
|
||||
}
|
||||
|
||||
Intellifade.forceSyncCheck();
|
||||
|
||||
return false;
|
||||
}).bind(this));
|
||||
}).bind(this)
|
||||
});
|
||||
Settings.add({
|
||||
key: 'icon-shadow-color',
|
||||
name: 'icon_shadow_color',
|
||||
type: '(iiid)',
|
||||
parser: Util.tuple_to_native_color,
|
||||
handler: (function() {
|
||||
Theming.remove_icon_shadow();
|
||||
|
||||
let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
|
||||
|
||||
for (let i = Theming.stylesheets.length - 1; i >= 0; i--) {
|
||||
let stylesheet = Theming.stylesheets[i];
|
||||
if (stylesheet.indexOf('shadow') !== -1 && stylesheet.indexOf('icon') !== -1) {
|
||||
theme.unload_stylesheet(Util.get_file(stylesheet));
|
||||
Util.remove_file(stylesheet);
|
||||
Theming.stylesheets.splice(i, 1);
|
||||
}
|
||||
}
|
||||
let icon_shadow = Theming.register_icon_shadow(Settings.get_icon_shadow_color(), Settings.get_icon_shadow_position());
|
||||
const id = this.icon_shadow_update_id = Mainloop.timeout_add(SETTINGS_DELAY, (function() { // eslint-disable-line no-magic-numbers
|
||||
if (id !== this.icon_shadow_update_id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Add Icon Shadowing */
|
||||
if (Settings.add_icon_shadow()) {
|
||||
if (icon_shadow !== null) {
|
||||
Theming.add_icon_shadow();
|
||||
} else {
|
||||
log('[Dynamic Panel Transparency] Failed to enabled icon shadowing.');
|
||||
}
|
||||
}
|
||||
|
||||
Intellifade.forceSyncCheck();
|
||||
|
||||
return false;
|
||||
}).bind(this));
|
||||
}).bind(this)
|
||||
});
|
||||
Settings.add({
|
||||
key: 'text-shadow-color',
|
||||
name: 'text_shadow_color',
|
||||
type: '(iiid)',
|
||||
parser: Util.tuple_to_native_color,
|
||||
handler: (function() {
|
||||
Theming.remove_text_shadow();
|
||||
|
||||
let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
|
||||
|
||||
for (let i = Theming.stylesheets.length - 1; i >= 0; i--) {
|
||||
let stylesheet = Theming.stylesheets[i];
|
||||
if (stylesheet.indexOf('shadow') !== -1 && stylesheet.indexOf('text') !== -1) {
|
||||
theme.unload_stylesheet(Util.get_file(stylesheet));
|
||||
Util.remove_file(stylesheet);
|
||||
Theming.stylesheets.splice(i, 1);
|
||||
}
|
||||
}
|
||||
let text_shadow = Theming.register_text_shadow(Settings.get_text_shadow_color(), Settings.get_text_shadow_position());
|
||||
const id = this.text_shadow_update_id = Mainloop.timeout_add(SETTINGS_DELAY, (function() { // eslint-disable-line no-magic-numbers
|
||||
if (id !== this.text_shadow_update_id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Add Text Shadowing */
|
||||
if (Settings.add_text_shadow()) {
|
||||
if (text_shadow !== null) {
|
||||
Theming.add_text_shadow();
|
||||
} else {
|
||||
log('[Dynamic Panel Transparency] Failed to enabled text shadowing.');
|
||||
}
|
||||
}
|
||||
|
||||
Intellifade.forceSyncCheck();
|
||||
|
||||
return false;
|
||||
}).bind(this));
|
||||
}).bind(this)
|
||||
});
|
||||
Settings.add({
|
||||
key: 'text-color',
|
||||
name: 'text_color',
|
||||
type: '(iii)',
|
||||
parser: Util.tuple_to_native_color
|
||||
});
|
||||
Settings.add({
|
||||
key: 'maximized-text-color',
|
||||
name: 'maximized_text_color',
|
||||
type: '(iii)',
|
||||
parser: Util.tuple_to_native_color
|
||||
});
|
||||
Settings.add({
|
||||
key: 'enable-maximized-text-color',
|
||||
name: 'enable_maximized_text_color',
|
||||
type: 'b',
|
||||
handler: (function() {
|
||||
Intellifade.forceSyncCheck();
|
||||
}).bind(this)
|
||||
});
|
||||
Settings.add({
|
||||
key: 'remove-panel-styling',
|
||||
name: 'remove_panel_styling',
|
||||
getter: 'remove_panel_styling',
|
||||
type: 'b'
|
||||
});
|
||||
Settings.add({
|
||||
key: 'enable-overview-text-color',
|
||||
name: 'enable_overview_text_color',
|
||||
type: 'b'
|
||||
});
|
||||
Settings.add({
|
||||
key: 'enable-text-color',
|
||||
name: 'enable_text_color',
|
||||
type: 'b',
|
||||
handler: (function() {
|
||||
if (Settings.get_enable_text_color()) {
|
||||
Intellifade.forceSyncCheck();
|
||||
} else {
|
||||
Theming.remove_text_color();
|
||||
Theming.remove_text_color('maximized');
|
||||
}
|
||||
}).bind(this)
|
||||
});
|
||||
Settings.add({
|
||||
key: 'enable-opacity',
|
||||
name: 'enable_custom_opacity',
|
||||
getter: 'enable_custom_opacity',
|
||||
type: 'b'
|
||||
});
|
||||
Settings.add({
|
||||
key: 'enable-background-color',
|
||||
name: 'enable_custom_background_color',
|
||||
getter: 'enable_custom_background_color',
|
||||
type: 'b'
|
||||
});
|
||||
Settings.add({
|
||||
key: 'transition-with-overview',
|
||||
name: 'transition_with_overview',
|
||||
getter: 'transition_with_overview',
|
||||
type: 'b'
|
||||
});
|
||||
Settings.add({
|
||||
key: 'transition-windows-touch',
|
||||
name: 'transition_windows_touch',
|
||||
getter: 'transition_when_windows_touch_panel',
|
||||
type: 'b'
|
||||
});
|
||||
|
||||
/* After we've given Settings the necessary information... let's bind it. */
|
||||
Settings.bind();
|
||||
}
|
||||
Reference in New Issue
Block a user