2720 lines
105 KiB
JavaScript
2720 lines
105 KiB
JavaScript
|
// GNOME Shell Extension TaskBar 2020
|
||
|
// Copyright (C) 2013-2018 zpydr
|
||
|
// Copyright (C) 2020 c0ldplasma
|
||
|
//
|
||
|
// This program is free software: you can redistribute it and/or modify
|
||
|
// it under the terms of the GNU General Public License as published by
|
||
|
// the Free Software Foundation, either version 3 of the License, or
|
||
|
// (at your option) any later version.
|
||
|
//
|
||
|
// This program is distributed in the hope that it will be useful,
|
||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
// GNU General Public License for more details.
|
||
|
//
|
||
|
// You should have received a copy of the GNU General Public License
|
||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||
|
//
|
||
|
|
||
|
const Clutter = imports.gi.Clutter;
|
||
|
const Gdk = imports.gi.Gdk;
|
||
|
const Gio = imports.gi.Gio;
|
||
|
const GLib = imports.gi.GLib;
|
||
|
const Gtk = imports.gi.Gtk;
|
||
|
const Lang = imports.lang;
|
||
|
const Mainloop = imports.mainloop;
|
||
|
const Meta = imports.gi.Meta;
|
||
|
const Shell = imports.gi.Shell;
|
||
|
const St = imports.gi.St;
|
||
|
|
||
|
const AppFavorites = imports.ui.appFavorites;
|
||
|
const Layout = imports.ui.layout;
|
||
|
const Main = imports.ui.main;
|
||
|
|
||
|
const Util = imports.misc.util;
|
||
|
|
||
|
const MessageTray = imports.ui.messageTray;
|
||
|
const Panel = imports.ui.main.panel;
|
||
|
const PanelMenu = imports.ui.panelMenu;
|
||
|
const PopupMenu = imports.ui.popupMenu;
|
||
|
//const RemoteMenu = imports.ui.remoteMenu;
|
||
|
const ThumbnailsSlider = imports.ui.overviewControls.ThumbnailsSlider.prototype;
|
||
|
const Tweener = imports.ui.tweener;
|
||
|
|
||
|
const Extension = imports.misc.extensionUtils.getCurrentExtension();
|
||
|
const Lib = Extension.imports.lib;
|
||
|
const Prefs = Extension.imports.prefs;
|
||
|
const ShellVersion = imports.misc.config.PACKAGE_VERSION.split(".").map(function(x) {
|
||
|
return +x;
|
||
|
});
|
||
|
const Windows = Extension.imports.windows;
|
||
|
|
||
|
const schema = "org.gnome.shell.extensions.TaskBar";
|
||
|
|
||
|
const RESETBOTTOMPANELCOLOR = 'rgba(0,0,0,1)';
|
||
|
|
||
|
const LEFTBUTTON = 1;
|
||
|
const MIDDLEBUTTON = 2;
|
||
|
const RIGHTBUTTON = 3;
|
||
|
const NOHOTCORNER = 54321;
|
||
|
const DESKTOPICON = Extension.path + '/images/desktop-button-default.png';
|
||
|
const APPVIEWICON = Extension.path + '/images/appview-button-default.svg';
|
||
|
const BPTRAYICON = Extension.path + '/images/bottom-panel-tray-button.svg';
|
||
|
const PREVIOUSKEY = 'key-previous-task';
|
||
|
const NEXTKEY = 'key-next-task';
|
||
|
const DESKTOPKEY = 'key-toggle-desktop';
|
||
|
|
||
|
function init(extensionMeta) {
|
||
|
return new TaskBar(extensionMeta, schema);
|
||
|
}
|
||
|
|
||
|
function TaskBar(extensionMeta, schema) {
|
||
|
this.init(extensionMeta, schema);
|
||
|
}
|
||
|
|
||
|
TaskBar.prototype = {
|
||
|
active: null,
|
||
|
activeTask: null,
|
||
|
activeWorkspaceIndex: null,
|
||
|
activeWorkspace: null,
|
||
|
activitiesStyle: null,
|
||
|
activitiesContainer: null,
|
||
|
alwaysZoomOut: null,
|
||
|
app: null,
|
||
|
appearance: null,
|
||
|
appearances: [],
|
||
|
appMenuColor: null,
|
||
|
appMenuContainer: null,
|
||
|
appMenuStyle: null,
|
||
|
appname: null,
|
||
|
attentionStyle: null,
|
||
|
attentionStyleChanged: null,
|
||
|
attentionStyleChangeTimeout: null,
|
||
|
backgroundColor: null,
|
||
|
backgroundStyleColor: null,
|
||
|
barriers: null,
|
||
|
blacklist: [],
|
||
|
blacklistapp: null,
|
||
|
bottomPanelActor: null,
|
||
|
bottomPanelBackgroundColor: null,
|
||
|
bottomPanelBackgroundStyle: null,
|
||
|
bottomPanelEndIndicator: null,
|
||
|
bottomPanelHeight: null,
|
||
|
bottomPanelVertical: null,
|
||
|
boxBottomPanelTrayButton: null,
|
||
|
boxDesktop: null,
|
||
|
boxMainDesktopButton: null,
|
||
|
boxMainFavorites: null,
|
||
|
boxMain: null,
|
||
|
boxMainShowAppsButton: null,
|
||
|
boxMainTasksId: null,
|
||
|
boxMainTasks: null,
|
||
|
boxMainWorkspaceButton: null,
|
||
|
boxShowApps: null,
|
||
|
boxTray: null,
|
||
|
boxWorkspace: null,
|
||
|
buttonDesktop: null,
|
||
|
buttonfavorite: null,
|
||
|
button: null,
|
||
|
buttonShowApps: null,
|
||
|
buttonTask: null,
|
||
|
buttonTaskLayout: null,
|
||
|
buttonTaskWidth: null,
|
||
|
buttonTray: null,
|
||
|
buttonWorkspace: null,
|
||
|
changedId: null,
|
||
|
countTasks: null,
|
||
|
dash: null,
|
||
|
dashHeight: null,
|
||
|
dashWidth: null,
|
||
|
dateMenuColor: null,
|
||
|
dateMenuContainer: null,
|
||
|
dateMenuStyle: null,
|
||
|
desktopButtonIcon: null,
|
||
|
desktopView: null,
|
||
|
favoriteappName: null,
|
||
|
favoriteapp: null,
|
||
|
favorites: null,
|
||
|
favoritesPreview: null,
|
||
|
focusWindow: null,
|
||
|
globalThemeChangedId: null,
|
||
|
height: null,
|
||
|
hidingId2: null,
|
||
|
hidingId: null,
|
||
|
hoverComponent: null,
|
||
|
hoverStyle: null,
|
||
|
iconDesktop: null,
|
||
|
iconPath: null,
|
||
|
iconShowApps: null,
|
||
|
panelSize: null,
|
||
|
iconTask: null,
|
||
|
iconThemeChangedId: null,
|
||
|
iconTray: null,
|
||
|
inactiveBackgroundStyleColor: null,
|
||
|
inactiveTask: null,
|
||
|
index: null,
|
||
|
indicatorCount: null,
|
||
|
installedChangedId: null,
|
||
|
i: null,
|
||
|
itemHeight: null,
|
||
|
itemWidth: null,
|
||
|
j: null,
|
||
|
k: null,
|
||
|
key: null,
|
||
|
labelHeight: null,
|
||
|
labelNamePreview: null,
|
||
|
labelTask: null,
|
||
|
labelTitlePreview: null,
|
||
|
labelTotalWorkspace: null,
|
||
|
labelTray: null,
|
||
|
labelWidth: null,
|
||
|
labelWorkspaceIndex: null,
|
||
|
labelWorkspace: null,
|
||
|
lastFocusedWindow: null,
|
||
|
lastFocusedWindowUserTime: null,
|
||
|
leftbutton: null,
|
||
|
mainBox: null,
|
||
|
maxWindows: null,
|
||
|
menuQuit: null,
|
||
|
messageTrayCountAddedId: null,
|
||
|
messageTrayCountRemovedId: null,
|
||
|
messageTrayHidingId: null,
|
||
|
messageTrayShowingId: null,
|
||
|
monitorChangedId: null,
|
||
|
mutterWindow: null,
|
||
|
newActiveWorkspace: null,
|
||
|
newBox: null,
|
||
|
newShowTray: null,
|
||
|
newTasksContainerWidth: null,
|
||
|
newWidth: null,
|
||
|
nextTask: null,
|
||
|
node: null,
|
||
|
nonExpandedWidth: null,
|
||
|
numButton: null,
|
||
|
nWorkspacesId: null,
|
||
|
originalLeftPanelCornerStyle: null,
|
||
|
originalRightPanelCornerStyle: null,
|
||
|
originalTopPanelStyle: null,
|
||
|
overviewHidingId: null,
|
||
|
overviewShowingId: null,
|
||
|
panelBox: null,
|
||
|
panelIconSize: null,
|
||
|
panelPosition: null,
|
||
|
panelSet: null,
|
||
|
fontSize: null,
|
||
|
panelStyleChangedId: null,
|
||
|
pbchildren: null,
|
||
|
positionAppearance: null,
|
||
|
positionBoxBottomEnd: null,
|
||
|
positionBoxBottomMiddle: null,
|
||
|
positionBoxBottomSettings: null,
|
||
|
positionBoxBottomStart: null,
|
||
|
positionMaxRight: null,
|
||
|
posparent: null,
|
||
|
posparentWidth: null,
|
||
|
preview: null,
|
||
|
previewTimer2: null,
|
||
|
previewTimer: null,
|
||
|
previousTask: null,
|
||
|
primary: null,
|
||
|
resetHover: null,
|
||
|
rightbutton: null,
|
||
|
scale: null,
|
||
|
screenShieldLockId: null,
|
||
|
scrollDirection: null,
|
||
|
separatorAppview: null,
|
||
|
separatorBoxMain: null,
|
||
|
separatorDesktop: null,
|
||
|
separatorFavorites: null,
|
||
|
separatorLeftAppview: null,
|
||
|
separatorLeftBoxMain: null,
|
||
|
separatorLeftDesktop: null,
|
||
|
separatorLeftFavorites: null,
|
||
|
separatorLeftTasks: null,
|
||
|
separatorLeftWorkspaces: null,
|
||
|
separatorRightAppview: null,
|
||
|
separatorRightBoxMain: null,
|
||
|
separatorRightDesktop: null,
|
||
|
separatorRightFavorites: null,
|
||
|
separatorRightTasks: null,
|
||
|
separatorRightWorkspaces: null,
|
||
|
separatorTasks: null,
|
||
|
separatorWorkspaces: null,
|
||
|
setAnchorPoint: null,
|
||
|
setTaskBar: null,
|
||
|
settingSignals: [],
|
||
|
settings: null,
|
||
|
showAppsIcon: null,
|
||
|
showTray: null,
|
||
|
signalDesktop: null,
|
||
|
signalShowApps: null,
|
||
|
signalsTask: [],
|
||
|
signalTray: null,
|
||
|
spaces: null,
|
||
|
stageX: null,
|
||
|
stageY: null,
|
||
|
systemMenuColor: null,
|
||
|
systemMenuContainer: null,
|
||
|
systemMenuStyle: null,
|
||
|
taskMenu: null,
|
||
|
taskMenuIsOpen: null,
|
||
|
taskMenuManager: null,
|
||
|
taskMenuUp: null,
|
||
|
tasksContainerWidth: null,
|
||
|
tasksLabelColor: null,
|
||
|
tasksLabelStyle: null,
|
||
|
tasksList: [],
|
||
|
tasksWidth: null,
|
||
|
tbp: null,
|
||
|
threshold: null,
|
||
|
thumbnail: null,
|
||
|
title: null,
|
||
|
toggleOverview: null,
|
||
|
topPanelBackgroundColor: null,
|
||
|
topPanelBackgroundStyle: null,
|
||
|
topPanelOriginalBackgroundColor: null,
|
||
|
totalWidth: null,
|
||
|
totalWorkspace: null,
|
||
|
tpobc: null,
|
||
|
trayIcon: null,
|
||
|
type: null,
|
||
|
userTime: null,
|
||
|
variant: null,
|
||
|
width: null,
|
||
|
windowDemandsAttentionId: null,
|
||
|
windows: null,
|
||
|
windowsList: [],
|
||
|
windowTask: null,
|
||
|
windowTexture: null,
|
||
|
windowWorkspace: null,
|
||
|
workspace: null,
|
||
|
workspaceButtonColor: null,
|
||
|
workspaceButtonStyle: null,
|
||
|
workspaceSwitchedId: null,
|
||
|
workspaceTask: null,
|
||
|
x: null,
|
||
|
xsettings: null,
|
||
|
y: null,
|
||
|
yOffset: null,
|
||
|
|
||
|
init: function(extensionMeta, schema) {
|
||
|
this.extensionMeta = extensionMeta;
|
||
|
this.schema = schema;
|
||
|
},
|
||
|
|
||
|
onParamChanged: function() {
|
||
|
if (!this.settings.get_boolean("reset-flag")) {
|
||
|
this.disable();
|
||
|
this.enable();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
enable: function() {
|
||
|
let settings = new Lib.Settings(this.schema);
|
||
|
this.settings = settings.getSettings();
|
||
|
|
||
|
//Top Panel Background Color
|
||
|
this.changeTopPanelBackgroundColor();
|
||
|
|
||
|
//First Start
|
||
|
this.firstStart();
|
||
|
|
||
|
//Verify other Extensions
|
||
|
this.otherExtensions();
|
||
|
|
||
|
//Add TaskBar
|
||
|
this.addTaskBar();
|
||
|
|
||
|
//Add Separators
|
||
|
this.addSeparators();
|
||
|
|
||
|
//Set TaskBar Position
|
||
|
this.onPositionChanged();
|
||
|
|
||
|
//Add Favorites
|
||
|
this.addFavorites();
|
||
|
|
||
|
//Add Appview Button
|
||
|
this.addShowAppsButton();
|
||
|
|
||
|
//Add Workspace Button
|
||
|
this.addWorkspaceButton();
|
||
|
|
||
|
//Add Desktop Button
|
||
|
this.addDesktopButton();
|
||
|
|
||
|
//Add Tray Button
|
||
|
this.addTrayButton();
|
||
|
|
||
|
//Activities Button
|
||
|
this.initDisplayActivitiesButton();
|
||
|
|
||
|
//Hot Corner
|
||
|
this.initEnableHotCorner();
|
||
|
|
||
|
//Application Menu
|
||
|
this.initDisplayApplicationMenu();
|
||
|
|
||
|
//Date Menu
|
||
|
this.initDisplayDateMenu();
|
||
|
|
||
|
//System Menu
|
||
|
this.initDisplaySystemMenu();
|
||
|
|
||
|
//Dash
|
||
|
this.initDisplayDash();
|
||
|
|
||
|
//Workspace Selector
|
||
|
this.initDisplayWorkspaceSelector();
|
||
|
|
||
|
//Init Windows Manage Callbacks
|
||
|
this.initWindows();
|
||
|
|
||
|
//Order of Appearance
|
||
|
this.appearanceOrder();
|
||
|
|
||
|
//Preferences Hover Event
|
||
|
this.hoverEvent();
|
||
|
|
||
|
//Top Panel
|
||
|
this.initDisplayTopPanel();
|
||
|
|
||
|
//Reinit Extension on Param Change
|
||
|
this.setSignals();
|
||
|
this.setSystemSignals();
|
||
|
|
||
|
//Keybindings
|
||
|
this.keybindings();
|
||
|
},
|
||
|
|
||
|
disable: function() {
|
||
|
//Disconnect Overview Signals
|
||
|
if (this.overviewHidingId !== null) {
|
||
|
Main.overview.disconnect(this.overviewHidingId);
|
||
|
this.overviewHidingId = null;
|
||
|
}
|
||
|
if (this.overviewShowingId !== null) {
|
||
|
Main.overview.disconnect(this.overviewShowingId);
|
||
|
this.overviewShowingId = null;
|
||
|
}
|
||
|
|
||
|
//Show Activities if hidden
|
||
|
if (!this.settings.get_boolean("activities-button"))
|
||
|
this.activitiesContainer.show();
|
||
|
|
||
|
//Reset Activities Button Color if changed
|
||
|
if (this.settings.get_string("activities-button-color") !== "unset")
|
||
|
Main.panel.statusArea.activities.actor.set_style("None");
|
||
|
|
||
|
//Enable Hot Corner if disabled
|
||
|
if ((!this.settings.get_boolean("hot-corner")) && (ShellVersion[1] < 26))
|
||
|
Main.layoutManager._updateHotCorners();
|
||
|
|
||
|
//Show and disconnect Application Menu if hidden
|
||
|
if (!this.settings.get_boolean("application-menu")) {
|
||
|
this.appMenuContainer.show();
|
||
|
Shell.WindowTracker.get_default().disconnect(this.hidingId2);
|
||
|
Main.overview.disconnect(this.hidingId);
|
||
|
}
|
||
|
|
||
|
//Reset Application Menu Color if changed
|
||
|
if (this.settings.get_string("application-menu-color") !== "unset")
|
||
|
Main.panel.statusArea.appMenu.actor.set_style("None");
|
||
|
|
||
|
//Show Date Menu if hidden
|
||
|
if (!this.settings.get_boolean("date-menu"))
|
||
|
this.dateMenuContainer.show();
|
||
|
|
||
|
//Reset Date Menu Color if changed
|
||
|
if (this.settings.get_string("date-menu-color") !== "unset")
|
||
|
Main.panel.statusArea.dateMenu.actor.set_style("None");
|
||
|
|
||
|
//Show System Menu if hidden
|
||
|
if (!this.settings.get_boolean("system-menu"))
|
||
|
this.systemMenuContainer.show();
|
||
|
|
||
|
//Reset System Menu Color if changed
|
||
|
if (this.settings.get_string("system-menu-color") !== "unset")
|
||
|
Main.panel.statusArea.aggregateMenu.actor.set_style("None");
|
||
|
|
||
|
//Show Dash if hidden
|
||
|
if (!this.settings.get_boolean("dash")) {
|
||
|
this.dash.set_height(this.dashHeight);
|
||
|
this.dash.set_width(this.dashWidth);
|
||
|
}
|
||
|
|
||
|
//Show Workspace Selector if hidden
|
||
|
if (!this.settings.get_boolean("workspace-selector")) {
|
||
|
ThumbnailsSlider._getAlwaysZoomOut = this.alwaysZoomOut;
|
||
|
ThumbnailsSlider.getNonExpandedWidth = this.nonExpandedWidth;
|
||
|
}
|
||
|
|
||
|
//Disconnect Workspace Signals
|
||
|
if (this.workspaceSwitchedId !== null) {
|
||
|
global.workspace_manager.disconnect(this.workspaceSwitchedId);
|
||
|
this.workspaceSwitchedId = null;
|
||
|
}
|
||
|
if (this.nWorkspacesId !== null) {
|
||
|
global.workspace_manager.disconnect(this.nWorkspacesId);
|
||
|
this.nWorkspacesId = null;
|
||
|
}
|
||
|
|
||
|
//Disconnect Favorites Signals
|
||
|
if (this.installedChangedId !== null) {
|
||
|
Shell.AppSystem.get_default().disconnect(this.installedChangedId);
|
||
|
this.installedChangedId = null;
|
||
|
}
|
||
|
if (this.changedId !== null) {
|
||
|
AppFavorites.getAppFavorites().disconnect(this.changedId);
|
||
|
this.changedId = null;
|
||
|
}
|
||
|
|
||
|
//Disconnect Message Tray Sources Added Signal
|
||
|
if (this.messageTrayCountAddedId !== null) {
|
||
|
if (ShellVersion[1] <= 14)
|
||
|
Main.messageTray.disconnect(this.messageTrayCountAddedId);
|
||
|
this.messageTrayCountAddedId = null;
|
||
|
}
|
||
|
|
||
|
//Disconnect Message Tray Sources Removed Signal
|
||
|
if (this.messageTrayCountRemovedId !== null) {
|
||
|
if (ShellVersion[1] <= 14)
|
||
|
Main.messageTray.disconnect(this.messageTrayCountRemovedId);
|
||
|
this.messageTrayCountRemovedId = null;
|
||
|
}
|
||
|
|
||
|
//Disconnect Message Tray Showing Signal
|
||
|
if (this.messageTrayShowingId !== null) {
|
||
|
if (ShellVersion[1] <= 14)
|
||
|
Main.messageTray.disconnect(this.messageTrayShowingId);
|
||
|
this.messageTrayShowingId = null;
|
||
|
}
|
||
|
|
||
|
//Disconnect Message Tray Hiding Signal
|
||
|
if (this.messageTrayHidingId !== null) {
|
||
|
if (ShellVersion[1] <= 14)
|
||
|
Main.messageTray.disconnect(this.messageTrayHidingId);
|
||
|
this.messageTrayHidingId = null;
|
||
|
}
|
||
|
|
||
|
//Reset Message Tray
|
||
|
if (this.showTray !== null) {
|
||
|
if (ShellVersion[1] <= 14)
|
||
|
MessageTray.MessageTray.prototype._showTray = this.showTray;
|
||
|
this.showTray = null;
|
||
|
}
|
||
|
|
||
|
//Disconnect Setting Signals
|
||
|
if (this.settingSignals !== null) {
|
||
|
this.settingSignals.forEach(
|
||
|
function(signal) {
|
||
|
this.settings.disconnect(signal);
|
||
|
},
|
||
|
this
|
||
|
);
|
||
|
this.settingSignals = null;
|
||
|
}
|
||
|
|
||
|
//Disconnect Monitor Change Signals
|
||
|
if (this.monitorChangedId !== null) {
|
||
|
Main.layoutManager.disconnect(this.monitorChangedId);
|
||
|
this.monitorChangedId = null;
|
||
|
}
|
||
|
|
||
|
//Disconnect Texture Cache Signals
|
||
|
if (this.iconThemeChangedId !== null) {
|
||
|
St.TextureCache.get_default().disconnect(this.iconThemeChangedId);
|
||
|
this.iconThemeChangedId = null;
|
||
|
}
|
||
|
|
||
|
//Disconnect Global Theme Signals
|
||
|
if (this.globalThemeChangedId !== null) {
|
||
|
St.ThemeContext.get_for_stage(global.stage).disconnect(this.globalThemeChangedId);
|
||
|
this.globalThemeChangedId = null;
|
||
|
}
|
||
|
|
||
|
//Disconnect Window Demands Attention Signals
|
||
|
if (this.windowDemandsAttentionId !== null) {
|
||
|
global.display.disconnect(this.windowDemandsAttentionId);
|
||
|
this.windowDemandsAttentionId = null;
|
||
|
}
|
||
|
|
||
|
//Disconnect Lock Screen Signals
|
||
|
if (this.screenShieldLockId !== null) {
|
||
|
Main.screenShield.disconnect(this.screenShieldLockId);
|
||
|
this.screenShieldLockId = null;
|
||
|
}
|
||
|
|
||
|
//Hide current preview if necessary
|
||
|
this.hidePreview();
|
||
|
|
||
|
//Disconnect Tasks Container Scroll Signals
|
||
|
if (this.boxMainTasksId !== null) {
|
||
|
this.boxMainTasks.disconnect(this.boxMainTasksId);
|
||
|
this.boxMainTasksId = null;
|
||
|
}
|
||
|
|
||
|
//Remove Keybindings
|
||
|
if (Main.wm.removeKeybinding) {
|
||
|
Main.wm.removeKeybinding(PREVIOUSKEY);
|
||
|
Main.wm.removeKeybinding(NEXTKEY);
|
||
|
Main.wm.removeKeybinding(DESKTOPKEY);
|
||
|
} else {
|
||
|
global.display.remove_keybinding(PREVIOUSKEY);
|
||
|
global.display.remove_keybinding(NEXTKEY);
|
||
|
global.display.remove_keybinding(DESKTOPKEY);
|
||
|
}
|
||
|
|
||
|
//Remove TaskBar
|
||
|
if (this.windows !== null) {
|
||
|
this.windows.destruct();
|
||
|
this.windows = null;
|
||
|
}
|
||
|
if (this.bottomPanelActor !== null) {
|
||
|
this.bottomPanelActor.destroy();
|
||
|
this.bottomPanelActor = null;
|
||
|
}
|
||
|
if ((this.setAnchorPoint) && (ShellVersion[1] <= 14)) {
|
||
|
Main.messageTray.actor.set_anchor_point(0, 0);
|
||
|
Main.messageTray._notificationWidget.set_anchor_point(0, 0);
|
||
|
this.setAnchorPoint = false;
|
||
|
}
|
||
|
if (this.newBox !== null) {
|
||
|
this.newBox.remove_child(this.boxMain);
|
||
|
this.newBox = null;
|
||
|
}
|
||
|
if (this.boxMain !== null)
|
||
|
this.boxMain = null;
|
||
|
if (this.mainBox !== null)
|
||
|
this.mainBox = null;
|
||
|
this.cleanTasksList();
|
||
|
if (this.topPanelBackgroundColor !== 'unset') {
|
||
|
if (ShellVersion[1] <= 16) {
|
||
|
Main.panel._leftCorner.actor.show();
|
||
|
Main.panel._rightCorner.actor.show();
|
||
|
}
|
||
|
Main.panel._leftCorner.actor.set_style(this.originalLeftPanelCornerStyle);
|
||
|
Main.panel._rightCorner.actor.set_style(this.originalRightPanelCornerStyle);
|
||
|
}
|
||
|
if ((this.topPanelBackgroundColor !== 'unset') || (this.panelSet))
|
||
|
Main.panel.actor.set_style(this.originalTopPanelStyle);
|
||
|
if (!this.settings.get_boolean("top-panel")) {
|
||
|
Main.layoutManager.removeChrome(Main.layoutManager.panelBox);
|
||
|
Main.layoutManager.addChrome(Main.layoutManager.panelBox, {
|
||
|
affectsStruts: true
|
||
|
});
|
||
|
Main.panel._leftCorner.actor.show();
|
||
|
Main.panel._rightCorner.actor.show();
|
||
|
Main.panel.actor.show();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
setSignals: function() {
|
||
|
//Reinit Extension on Param Change
|
||
|
this.settingSignals = [
|
||
|
this.settings.connect("changed::panel-size", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::panel-size-bottom", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::tb-icon-size", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::tb-icon-size-bottom", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::tb-label-size", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::tb-label-size-bottom", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::content-size", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::font-size-bottom", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::panel-box", Lang.bind(this, this.onBoxChanged)),
|
||
|
this.settings.connect("changed::panel-position", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::display-favorites", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::display-showapps-button", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::display-workspace-button", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::workspace-button-index", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::workspace-button-color", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::display-workspace-button-color", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::workspace-button-width", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::display-desktop-button", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::overview", Lang.bind(this, this.setOverview)),
|
||
|
this.settings.connect("changed::tray-button", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::tray-button-empty", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::desktop-button-icon", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::appview-button-icon", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::tray-button-icon", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::sort-tasks", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::active-task-frame", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::inactive-task-frame", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::active-task-background-color", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::active-task-background-color-set", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::inactive-task-background-color", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::inactive-task-background-color-set", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::tasks-label", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::tasks-label-color", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::display-tasks-label-color", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::inactive-tasks-label-color", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::display-inactive-tasks-label-color", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::tasks-frame-color", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::display-tasks-frame-color", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::inactive-tasks-frame-color", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::display-inactive-tasks-frame-color", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::tasks-width", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::tasks-spaces", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::blink-tasks", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::blacklist-set", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::top-panel-background-color", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::top-panel-background-alpha", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::bottom-panel-background-color", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::display-tasks", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::separator-left-box-main", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::separator-right-box-main", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::separator-left-tasks", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::separator-right-tasks", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::separator-left-desktop", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::separator-right-desktop", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::separator-left-workspaces", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::separator-right-workspaces", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::separator-left-appview", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::separator-right-appview", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::separator-left-favorites", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::separator-right-favorites", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::top-panel", Lang.bind(this, this.displayTopPanel)),
|
||
|
this.settings.connect("changed::activities-button", Lang.bind(this, this.displayActivities)),
|
||
|
this.settings.connect("changed::activities-button-color", Lang.bind(this, this.colorActivities)),
|
||
|
this.settings.connect("changed::hot-corner", Lang.bind(this, this.enableHotCorner)),
|
||
|
this.settings.connect("changed::application-menu", Lang.bind(this, this.displayApplicationMenu)),
|
||
|
this.settings.connect("changed::application-menu-color", Lang.bind(this, this.colorApplicationMenu)),
|
||
|
this.settings.connect("changed::date-menu", Lang.bind(this, this.displayDateMenu)),
|
||
|
this.settings.connect("changed::date-menu-color", Lang.bind(this, this.colorDateMenu)),
|
||
|
this.settings.connect("changed::system-menu", Lang.bind(this, this.displaySystemMenu)),
|
||
|
this.settings.connect("changed::system-menu-color", Lang.bind(this, this.colorSystemMenu)),
|
||
|
this.settings.connect("changed::dash", Lang.bind(this, this.displayDash)),
|
||
|
this.settings.connect("changed::workspace-selector", Lang.bind(this, this.displayWorkspaceSelector)),
|
||
|
this.settings.connect("changed::position-changed", Lang.bind(this, this.appearancePositionChange)),
|
||
|
this.settings.connect("changed::bottom-panel", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::bottom-panel-vertical", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::position-bottom-box", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::tasks-all-workspaces", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::tasks-container-width-new", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::hover-event", Lang.bind(this, this.hoverEvent)),
|
||
|
this.settings.connect("changed::blacklist", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::find-apps", Lang.bind(this, this.findApps)),
|
||
|
this.settings.connect("changed::display-preview-background-color", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::display-preview-label-color", Lang.bind(this, this.onParamChanged)),
|
||
|
this.settings.connect("changed::export-settings", Lang.bind(this, this.exportSettings)),
|
||
|
this.settings.connect("changed::import-settings", Lang.bind(this, this.importSettings)),
|
||
|
this.settings.connect("changed::reset-all", Lang.bind(this, this.resetAll)),
|
||
|
this.settings.connect("changed::reset-flag", Lang.bind(this, this.onParamChanged))
|
||
|
];
|
||
|
},
|
||
|
|
||
|
//Monitor Change, Icon and Global Theme Change
|
||
|
setSystemSignals: function() {
|
||
|
this.monitorChangedId = null;
|
||
|
this.iconThemeChangedId = null;
|
||
|
this.globalThemeChangedId = null;
|
||
|
this.windowDemandsAttentionId = null;
|
||
|
this.screenShieldLockId = null;
|
||
|
this.panelStyleChangedId = null;
|
||
|
this.mainBox = null;
|
||
|
this.overviewHidingId = null;
|
||
|
this.overviewShowingId = null;
|
||
|
this.monitorChangedId = Main.layoutManager.connect('monitors-changed', Lang.bind(this, this.onParamChanged));
|
||
|
this.iconThemeChangedId = St.TextureCache.get_default().connect('icon-theme-changed', Lang.bind(this, this.onParamChanged));
|
||
|
this.globalThemeChangedId = St.ThemeContext.get_for_stage(global.stage).connect('changed', Lang.bind(this, this.onParamChanged));
|
||
|
if ((this.settings.get_boolean("display-tasks")) && (this.settings.get_boolean("blink-tasks")))
|
||
|
this.windowDemandsAttentionId = global.display.connect('window-demands-attention', Lang.bind(this, this.onWindowDemandsAttention));
|
||
|
// if (Main.screenShield !== null)
|
||
|
// this.screenShieldLockId = Main.screenShield.connect('lock-status-changed', Lang.bind(this, this.onParamChanged));
|
||
|
this.setOverview();
|
||
|
},
|
||
|
|
||
|
//TaskBar in Overview Mode
|
||
|
setOverview: function() {
|
||
|
if (!this.settings.get_boolean("overview")) {
|
||
|
this.mainBox = this.boxMain;
|
||
|
this.overviewHidingId = Main.overview.connect('hiding', Lang.bind(this, this.showMainBox));
|
||
|
this.overviewShowingId = Main.overview.connect('showing', Lang.bind(this, this.hideMainBox));
|
||
|
} else {
|
||
|
//Disconnect Overview Signals
|
||
|
if (this.overviewHidingId !== null) {
|
||
|
Main.overview.disconnect(this.overviewHidingId);
|
||
|
this.overviewHidingId = null;
|
||
|
}
|
||
|
if (this.overviewShowingId !== null) {
|
||
|
Main.overview.disconnect(this.overviewShowingId);
|
||
|
this.overviewShowingId = null;
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//First Start
|
||
|
firstStart: function() {
|
||
|
if ((this.settings.get_string("extension-path") === 'unset') || (this.settings.get_string("extension-path") !== Extension.path)) {
|
||
|
this.settings.set_string("extension-path", Extension.path);
|
||
|
this.settings.set_string("desktop-button-icon", DESKTOPICON);
|
||
|
this.settings.set_string("appview-button-icon", APPVIEWICON);
|
||
|
this.settings.set_string("tray-button-icon", BPTRAYICON);
|
||
|
}
|
||
|
if ((this.settings.get_boolean("first-start")) && (Main.sessionMode.currentMode === 'user')) {
|
||
|
//Comment out the next line to disable the preferences window from opening at the first start
|
||
|
Util.spawnCommandLine('gnome-extensions prefs ' + Extension.metadata.uuid);
|
||
|
this.settings.set_boolean("first-start", false);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Verify other Extensions
|
||
|
otherExtensions: function() {
|
||
|
//Find out if the bottom panel extension is enabled
|
||
|
this.tbp = false;
|
||
|
let schemaSettings = new Gio.Settings({
|
||
|
schema: 'org.gnome.shell'
|
||
|
});
|
||
|
let enabled_extensions = schemaSettings.get_strv('enabled-extensions');
|
||
|
if (enabled_extensions.indexOf("bottompanel@tmoer93") !== -1)
|
||
|
this.tbp = true;
|
||
|
},
|
||
|
|
||
|
//Add TaskBar
|
||
|
addTaskBar: function() {
|
||
|
this.setTaskBar = false;
|
||
|
if ((this.settings.get_boolean("display-tasks")) ||
|
||
|
(this.settings.get_boolean("display-desktop-button")) ||
|
||
|
(this.settings.get_boolean("display-workspace-button")) ||
|
||
|
(this.settings.get_boolean("display-showapps-button")) ||
|
||
|
(this.settings.get_boolean("display-favorites"))) {
|
||
|
this.setTaskBar = true;
|
||
|
this.boxMain = new St.BoxLayout({
|
||
|
style_class: "tkb-box"
|
||
|
});
|
||
|
if (this.settings.get_boolean("display-favorites"))
|
||
|
this.boxMainFavorites = new St.BoxLayout({
|
||
|
style_class: "tkb-box"
|
||
|
});
|
||
|
if (this.settings.get_boolean("display-showapps-button"))
|
||
|
this.boxMainShowAppsButton = new St.BoxLayout({
|
||
|
style_class: "tkb-box"
|
||
|
});
|
||
|
if (this.settings.get_boolean("display-workspace-button"))
|
||
|
this.boxMainWorkspaceButton = new St.BoxLayout({
|
||
|
style_class: "tkb-box"
|
||
|
});
|
||
|
if (this.settings.get_boolean("display-desktop-button"))
|
||
|
this.boxMainDesktopButton = new St.BoxLayout({
|
||
|
style_class: "tkb-box"
|
||
|
});
|
||
|
if (this.settings.get_boolean("display-tasks")) {
|
||
|
this.boxMainTasks = new St.BoxLayout({
|
||
|
style_class: "tkb-box",
|
||
|
reactive: true
|
||
|
});
|
||
|
this.tasksContainerWidth = this.settings.get_int("tasks-container-width-new");
|
||
|
this.boxMainTasksId = this.boxMainTasks.connect("scroll-event", Lang.bind(this, this.onScrollTaskButton));
|
||
|
}
|
||
|
if ((this.settings.get_enum("tray-button") !== 0) && (this.settings.get_boolean("bottom-panel")) && (ShellVersion[1] <= 14))
|
||
|
this.boxBottomPanelTrayButton = new St.BoxLayout({
|
||
|
style_class: "tkb-box"
|
||
|
});
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Add Separators
|
||
|
addSeparators: function() {
|
||
|
if (this.setTaskBar) {
|
||
|
let separatorLeftBoxMain = this.settings.get_int('separator-left-box-main');
|
||
|
let separatorRightBoxMain = this.settings.get_int('separator-right-box-main');
|
||
|
this.separatorBoxMain = 'padding-left: ' + separatorLeftBoxMain + 'px; padding-right: ' + separatorRightBoxMain + 'px; ';
|
||
|
this.boxMain.set_style(this.separatorBoxMain);
|
||
|
if (this.settings.get_boolean("display-favorites")) {
|
||
|
let separatorLeftFavorites = this.settings.get_int('separator-left-favorites');
|
||
|
let separatorRightFavorites = this.settings.get_int('separator-right-favorites');
|
||
|
this.separatorFavorites = 'padding-left: ' + separatorLeftFavorites + 'px; padding-right: ' + separatorRightFavorites + 'px; ';
|
||
|
this.boxMainFavorites.set_style(this.separatorFavorites);
|
||
|
}
|
||
|
if (this.settings.get_boolean("display-showapps-button")) {
|
||
|
let separatorLeftAppview = this.settings.get_int('separator-left-appview');
|
||
|
let separatorRightAppview = this.settings.get_int('separator-right-appview');
|
||
|
this.separatorAppview = 'padding-left: ' + separatorLeftAppview + 'px; padding-right: ' + separatorRightAppview + 'px; ';
|
||
|
this.boxMainShowAppsButton.set_style(this.separatorAppview);
|
||
|
}
|
||
|
if (this.settings.get_boolean("display-workspace-button")) {
|
||
|
let separatorLeftWorkspaces = this.settings.get_int('separator-left-workspaces');
|
||
|
let separatorRightWorkspaces = this.settings.get_int('separator-right-workspaces');
|
||
|
this.separatorWorkspaces = 'padding-left: ' + separatorLeftWorkspaces + 'px; padding-right: ' + separatorRightWorkspaces + 'px; ';
|
||
|
this.boxMainWorkspaceButton.set_style(this.separatorWorkspaces);
|
||
|
}
|
||
|
if (this.settings.get_boolean("display-desktop-button")) {
|
||
|
let separatorLeftDesktop = this.settings.get_int('separator-left-desktop');
|
||
|
let separatorRightDesktop = this.settings.get_int('separator-right-desktop');
|
||
|
this.separatorDesktop = 'padding-left: ' + separatorLeftDesktop + 'px; padding-right: ' + separatorRightDesktop + 'px; ';
|
||
|
this.boxMainDesktopButton.set_style(this.separatorDesktop);
|
||
|
}
|
||
|
if (this.settings.get_boolean("display-tasks")) {
|
||
|
let separatorLeftTasks = this.settings.get_int('separator-left-tasks');
|
||
|
let separatorRightTasks = this.settings.get_int('separator-right-tasks');
|
||
|
this.separatorTasks = 'padding-left: ' + separatorLeftTasks + 'px; padding-right: ' + separatorRightTasks + 'px; ';
|
||
|
this.boxMainTasks.set_style(this.separatorTasks);
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Export Settings
|
||
|
exportSettings: function() {
|
||
|
if (this.settings.get_boolean("export-settings")) {
|
||
|
Util.spawnCommandLine('sh ' + Extension.path + '/scripts/export.sh');
|
||
|
this.settings.set_boolean("export-settings", false);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Import Settings
|
||
|
importSettings: function() {
|
||
|
if (this.settings.get_boolean("import-settings")) {
|
||
|
Util.spawnCommandLine('sh ' + Extension.path + '/scripts/import.sh');
|
||
|
this.settings.set_boolean("import-settings", false);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Reset All !
|
||
|
resetAll: function() {
|
||
|
if (this.settings.get_boolean("reset-all")) {
|
||
|
Util.spawnCommandLine('dconf reset -f /org/gnome/shell/extensions/TaskBar/');
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Find Apps
|
||
|
findApps: function() {
|
||
|
if (this.settings.get_boolean("find-apps")) {
|
||
|
Main.overview.show();
|
||
|
Main.overview.viewSelector._showAppsButton.checked = true;
|
||
|
this.settings.set_boolean("find-apps", false);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Keybindings
|
||
|
keybindings: function() {
|
||
|
if (Main.wm.addKeybinding && Shell.ActionMode) //3.16
|
||
|
Main.wm.addKeybinding(PREVIOUSKEY, this.settings, Meta.KeyBindingFlags.NONE,
|
||
|
Shell.ActionMode.NORMAL,
|
||
|
Lang.bind(this, this.keyPreviousTask));
|
||
|
else if (Main.wm.addKeybinding && Shell.KeyBindingMode) //3.8
|
||
|
Main.wm.addKeybinding(PREVIOUSKEY, this.settings, Meta.KeyBindingFlags.NONE,
|
||
|
Shell.KeyBindingMode.NORMAL | Shell.KeyBindingMode.MESSAGE_TRAY,
|
||
|
Lang.bind(this, this.keyPreviousTask));
|
||
|
else
|
||
|
global.display.add_keybinding(PREVIOUSKEY, this.settings, Meta.KeyBindingFlags.NONE,
|
||
|
Lang.bind(this, this.keyPreviousTask));
|
||
|
if (Main.wm.addKeybinding && Shell.ActionMode) //3.16
|
||
|
Main.wm.addKeybinding(NEXTKEY, this.settings, Meta.KeyBindingFlags.NONE,
|
||
|
Shell.ActionMode.NORMAL,
|
||
|
Lang.bind(this, this.keyNextTask));
|
||
|
else if (Main.wm.addKeybinding && Shell.KeyBindingMode) //3.8
|
||
|
Main.wm.addKeybinding(NEXTKEY, this.settings, Meta.KeyBindingFlags.NONE,
|
||
|
Shell.KeyBindingMode.NORMAL | Shell.KeyBindingMode.MESSAGE_TRAY,
|
||
|
Lang.bind(this, this.keyNextTask));
|
||
|
else
|
||
|
global.display.add_keybinding(NEXTKEY, this.settings, Meta.KeyBindingFlags.NONE,
|
||
|
Lang.bind(this, this.keyNextTask));
|
||
|
if (Main.wm.addKeybinding && Shell.ActionMode) //3.16
|
||
|
Main.wm.addKeybinding(DESKTOPKEY, this.settings, Meta.KeyBindingFlags.NONE,
|
||
|
Shell.ActionMode.NORMAL,
|
||
|
Lang.bind(this, this.keyToggleDesktop));
|
||
|
else if (Main.wm.addKeybinding && Shell.KeyBindingMode) //3.8
|
||
|
Main.wm.addKeybinding(DESKTOPKEY, this.settings, Meta.KeyBindingFlags.NONE,
|
||
|
Shell.KeyBindingMode.NORMAL | Shell.KeyBindingMode.MESSAGE_TRAY,
|
||
|
Lang.bind(this, this.keyToggleDesktop));
|
||
|
else
|
||
|
global.display.add_keybinding(DESKTOPKEY, this.settings, Meta.KeyBindingFlags.NONE,
|
||
|
Lang.bind(this, this.keyToggleDesktop));
|
||
|
},
|
||
|
|
||
|
//Keybinding Activate Previous Task
|
||
|
keyPreviousTask: function() {
|
||
|
this.previousTask = null;
|
||
|
let focusWindow = global.display.focus_window;
|
||
|
let activeWorkspace = global.workspace_manager.get_active_workspace();
|
||
|
this.tasksList.forEach(
|
||
|
function(task) {
|
||
|
let [windowTask, buttonTask, signalsTask] = task;
|
||
|
if ((windowTask === focusWindow) && (this.previousTask !== null)) {
|
||
|
let [windowTask, buttonTask, signalsTask] = this.previousTask;
|
||
|
let windowWorkspace = windowTask.get_workspace();
|
||
|
if (windowWorkspace !== activeWorkspace)
|
||
|
windowWorkspace.activate(global.get_current_time());
|
||
|
windowTask.activate(global.get_current_time());
|
||
|
}
|
||
|
this.previousTask = task;
|
||
|
},
|
||
|
this
|
||
|
);
|
||
|
if (Main.overview.visible)
|
||
|
Main.overview.hide();
|
||
|
},
|
||
|
|
||
|
//Keybinding Activate Next Task
|
||
|
keyNextTask: function() {
|
||
|
this.nextTask = false;
|
||
|
let focusWindow = global.display.focus_window;
|
||
|
let activeWorkspace = global.workspace_manager.get_active_workspace();
|
||
|
this.tasksList.forEach(
|
||
|
function(task) {
|
||
|
let [windowTask, buttonTask, signalsTask] = task;
|
||
|
let windowWorkspace = windowTask.get_workspace();
|
||
|
if (this.nextTask) {
|
||
|
if (windowWorkspace !== activeWorkspace)
|
||
|
windowWorkspace.activate(global.get_current_time());
|
||
|
windowTask.activate(global.get_current_time());
|
||
|
this.nextTask = false;
|
||
|
}
|
||
|
if (windowTask === focusWindow)
|
||
|
this.nextTask = true;
|
||
|
},
|
||
|
this
|
||
|
);
|
||
|
if (Main.overview.visible)
|
||
|
Main.overview.hide();
|
||
|
},
|
||
|
|
||
|
//Keybinding Toggle Desktop
|
||
|
keyToggleDesktop: function() {
|
||
|
let maxWindows = false;
|
||
|
let userTime = null;
|
||
|
let activeWorkspace = global.workspace_manager.get_active_workspace();
|
||
|
let windows = activeWorkspace.list_windows().filter(function(w) {
|
||
|
return w.get_window_type() !== Meta.WindowType.DESKTOP;
|
||
|
});
|
||
|
for (let i = 0; i < windows.length; ++i) {
|
||
|
if ((this.desktopView) && (!Main.overview.visible)) {
|
||
|
userTime = windows[i].user_time;
|
||
|
if (userTime > this.lastFocusedWindowUserTime) {
|
||
|
this.lastFocusedWindowUserTime = userTime;
|
||
|
this.lastFocusedWindow = windows[i];
|
||
|
}
|
||
|
windows[i].unminimize();
|
||
|
maxWindows = true;
|
||
|
} else {
|
||
|
windows[i].minimize();
|
||
|
}
|
||
|
}
|
||
|
if (maxWindows) {
|
||
|
this.lastFocusedWindow.activate(global.get_current_time());
|
||
|
}
|
||
|
this.desktopView = !this.desktopView;
|
||
|
if (Main.overview.visible)
|
||
|
Main.overview.hide();
|
||
|
},
|
||
|
|
||
|
//Align Position
|
||
|
onPositionChanged: function() {
|
||
|
this.showTray = null;
|
||
|
this.messageTrayShowingId = null;
|
||
|
this.messageTrayHidingId = null;
|
||
|
this.setAnchorPoint = false;
|
||
|
this.bottomPanelEndIndicator = false;
|
||
|
if (this.setTaskBar) {
|
||
|
if (this.settings.get_boolean("bottom-panel"))
|
||
|
this.bottomPanel();
|
||
|
else {
|
||
|
this.defineBoxChanged();
|
||
|
this.panelPosition = this.settings.get_int('panel-position');
|
||
|
if (this.panelPosition > this.pbchildren)
|
||
|
this.settings.set_int("panel-position", this.pbchildren);
|
||
|
this.newBox.insert_child_at_index(this.boxMain, this.panelPosition);
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
defineBoxChanged: function() {
|
||
|
this.panelBox = this.settings.get_int('panel-box');
|
||
|
if (this.panelBox === 1)
|
||
|
this.newBox = Main.panel._leftBox;
|
||
|
else if (this.panelBox === 2)
|
||
|
this.newBox = Main.panel._centerBox;
|
||
|
else if (this.panelBox === 3)
|
||
|
this.newBox = Main.panel._rightBox;
|
||
|
this.pbchildren = this.newBox.get_children().length;
|
||
|
let positionMaxRight = this.settings.get_int("position-max-right");
|
||
|
if (positionMaxRight !== this.pbchildren)
|
||
|
this.settings.set_int("position-max-right", this.pbchildren);
|
||
|
},
|
||
|
|
||
|
onBoxChanged: function() {
|
||
|
this.newBox.remove_child(this.boxMain);
|
||
|
this.defineBoxChanged();
|
||
|
},
|
||
|
|
||
|
appearanceOrder: function() {
|
||
|
if (this.setTaskBar) {
|
||
|
this.appearances = [
|
||
|
("position-tasks"),
|
||
|
("position-desktop-button"),
|
||
|
("position-workspace-button"),
|
||
|
("position-appview-button"),
|
||
|
("position-favorites")
|
||
|
];
|
||
|
for (let i = 0; i <= 4; i++) {
|
||
|
this.appearances.forEach(
|
||
|
function(appearance) {
|
||
|
let positionAppearance = this.settings.get_int(appearance);
|
||
|
if (positionAppearance === i) {
|
||
|
if ((appearance === "position-tasks") && (this.settings.get_boolean("display-tasks")))
|
||
|
this.boxMain.add_actor(this.boxMainTasks);
|
||
|
else if ((appearance === "position-desktop-button") && (this.settings.get_boolean("display-desktop-button")))
|
||
|
this.boxMain.add_actor(this.boxMainDesktopButton);
|
||
|
else if ((appearance === "position-workspace-button") && (this.settings.get_boolean("display-workspace-button")))
|
||
|
this.boxMain.add_actor(this.boxMainWorkspaceButton);
|
||
|
else if ((appearance === "position-appview-button") && (this.settings.get_boolean("display-showapps-button")))
|
||
|
this.boxMain.add_actor(this.boxMainShowAppsButton);
|
||
|
else if ((appearance === "position-favorites") && (this.settings.get_boolean("display-favorites")))
|
||
|
this.boxMain.add_actor(this.boxMainFavorites);
|
||
|
}
|
||
|
},
|
||
|
this
|
||
|
);
|
||
|
}
|
||
|
if ((this.settings.get_enum("tray-button") !== 0) && (this.bottomPanelEndIndicator) && (ShellVersion[1] <= 14))
|
||
|
this.boxMain.add_actor(this.boxBottomPanelTrayButton);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Appearance Position changed
|
||
|
appearancePositionChange: function() {
|
||
|
if (this.settings.get_boolean("position-changed")) {
|
||
|
this.settings.set_boolean("position-changed", false);
|
||
|
this.onParamChanged();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Hide TaskBar in Overview
|
||
|
showMainBox: function() {
|
||
|
this.mainBox.show();
|
||
|
if ((this.settings.get_enum("tray-button") !== 0) && (!this.bottomPanelEndIndicator) && (this.settings.get_boolean("bottom-panel")) && (ShellVersion[1] <= 14))
|
||
|
this.boxBottomPanelTrayButton.show();
|
||
|
},
|
||
|
|
||
|
hideMainBox: function() {
|
||
|
this.mainBox.hide();
|
||
|
if ((this.settings.get_enum("tray-button") !== 0) && (!this.bottomPanelEndIndicator) && (this.settings.get_boolean("bottom-panel")) && (ShellVersion[1] <= 14))
|
||
|
this.boxBottomPanelTrayButton.hide();
|
||
|
},
|
||
|
|
||
|
//Add Favorites
|
||
|
addFavorites: function(buttonfavorite, favoriteapp) {
|
||
|
this.installedChangedId = null;
|
||
|
this.changedId = null;
|
||
|
if (this.settings.get_boolean("display-favorites")) {
|
||
|
//Connect Favorites Changes
|
||
|
this.installedChangedId = Shell.AppSystem.get_default().connect('installed-changed', Lang.bind(this, this.onParamChanged));
|
||
|
this.changedId = AppFavorites.getAppFavorites().connect('changed', Lang.bind(this, this.onParamChanged));
|
||
|
|
||
|
let favorites = global.settings.get_strv(AppFavorites.getAppFavorites().FAVORITE_APPS_KEY);
|
||
|
for (let i = 0; i < favorites.length; ++i) {
|
||
|
let favoriteapp = Shell.AppSystem.get_default().lookup_app(favorites[i]);
|
||
|
if (favoriteapp === null) {
|
||
|
continue;
|
||
|
}
|
||
|
let buttonfavorite = new St.Button({
|
||
|
style_class: "tkb-task-button",
|
||
|
child: favoriteapp.create_icon_texture(this.panelSize)
|
||
|
});
|
||
|
buttonfavorite.connect('clicked', Lang.bind(this, function() {
|
||
|
favoriteapp.open_new_window(-1);
|
||
|
}, favoriteapp));
|
||
|
buttonfavorite.connect("enter-event", Lang.bind(this, function() {
|
||
|
//Hide current preview if necessary
|
||
|
this.hidePreview();
|
||
|
if (this.settings.get_enum("display-favorites-label") !== 0) {
|
||
|
if (this.settings.get_int("preview-delay") === 0)
|
||
|
this.showFavoritesPreview(buttonfavorite, favoriteapp);
|
||
|
else
|
||
|
this.previewTimer = Mainloop.timeout_add(this.settings.get_int("preview-delay"),
|
||
|
Lang.bind(this, this.showFavoritesPreview, buttonfavorite, favoriteapp));
|
||
|
}
|
||
|
}, buttonfavorite, favoriteapp));
|
||
|
buttonfavorite.connect("leave-event", Lang.bind(this, this.hidePreview));
|
||
|
this.boxMainFavorites.add_actor(buttonfavorite);
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Add Appview Button
|
||
|
addShowAppsButton: function() {
|
||
|
if (this.settings.get_boolean("display-showapps-button")) {
|
||
|
let iconPath = this.settings.get_string("appview-button-icon");
|
||
|
if (iconPath === 'unset')
|
||
|
iconPath = APPVIEWICON;
|
||
|
this.showAppsIcon = Gio.icon_new_for_string(iconPath);
|
||
|
this.iconShowApps = new St.Icon({
|
||
|
gicon: this.showAppsIcon,
|
||
|
icon_size: (this.panelSize),
|
||
|
style_class: "tkb-desktop-icon"
|
||
|
});
|
||
|
this.buttonShowApps = new St.Button({
|
||
|
style_class: "tkb-task-button"
|
||
|
});
|
||
|
this.signalShowApps = this.buttonShowApps.connect("button-press-event", Lang.bind(this, this.onClickShowAppsButton));
|
||
|
this.buttonShowApps.set_child(this.iconShowApps);
|
||
|
this.boxShowApps = new St.BoxLayout({
|
||
|
style_class: "tkb-desktop-box"
|
||
|
});
|
||
|
this.boxShowApps.add_actor(this.buttonShowApps);
|
||
|
this.boxMainShowAppsButton.add_actor(this.boxShowApps);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Add Workspace Button
|
||
|
addWorkspaceButton: function() {
|
||
|
this.workspaceSwitchedId = null;
|
||
|
this.nWorkspacesId = null;
|
||
|
if (this.settings.get_boolean("display-workspace-button")) {
|
||
|
//Connect Workspace Changes
|
||
|
this.workspaceSwitchedId = global.workspace_manager.connect('workspace-switched', Lang.bind(this, this.updateWorkspaces));
|
||
|
this.nWorkspacesId = global.workspace_manager.connect('notify::n-workspaces', Lang.bind(this, this.updateWorkspaces));
|
||
|
this.buttonWorkspace = new St.Button({
|
||
|
style_class: "tkb-task-button"
|
||
|
});
|
||
|
this.buttonWorkspace.connect("button-press-event", Lang.bind(this, this.onClickWorkspaceButton));
|
||
|
this.buttonWorkspace.connect("scroll-event", Lang.bind(this, this.onScrollWorkspaceButton));
|
||
|
this.workspaceButtonColor = this.settings.get_string("workspace-button-color");
|
||
|
this.displayWorkspaceButtonColor = this.settings.get_boolean("display-workspace-button-color");
|
||
|
if ((this.workspaceButtonColor !== "unset") && (this.displayWorkspaceButtonColor)) {
|
||
|
this.workspaceButtonStyle = "color: " + this.workspaceButtonColor + ";";
|
||
|
this.buttonWorkspace.set_style(this.workspaceButtonStyle);
|
||
|
}
|
||
|
this.updateWorkspaces();
|
||
|
this.boxWorkspace = new St.BoxLayout({
|
||
|
style_class: "tkb-desktop-box"
|
||
|
});
|
||
|
this.boxWorkspace.add_actor(this.buttonWorkspace);
|
||
|
this.boxMainWorkspaceButton.add_actor(this.boxWorkspace);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
updateWorkspaces: function() {
|
||
|
this.activeWorkspaceIndex = global.workspace_manager.get_active_workspace().index();
|
||
|
let workspaceButtonWidth = this.settings.get_int("workspace-button-width");
|
||
|
this.totalWorkspace = global.workspace_manager.n_workspaces - 1;
|
||
|
let labelWorkspaceIndex = this.activeWorkspaceIndex + 1;
|
||
|
let labelTotalWorkspace = this.totalWorkspace + 1;
|
||
|
if (this.settings.get_enum("workspace-button-index") === 1) {
|
||
|
this.labelWorkspace = new St.Label({
|
||
|
text: (labelWorkspaceIndex + "/" + labelTotalWorkspace)
|
||
|
});
|
||
|
this.labelWorkspace.set_width((this.panelSize * 2) + 2 + this.adjustTBLabelSize - this.adjustTBIconSize + workspaceButtonWidth);
|
||
|
} else if (this.settings.get_enum("workspace-button-index") === 0) {
|
||
|
this.labelWorkspace = new St.Label({
|
||
|
text: (labelWorkspaceIndex + "")
|
||
|
});
|
||
|
this.labelWorkspace.set_width(this.panelSize - 2 + this.adjustTBLabelSize - this.adjustTBIconSize + workspaceButtonWidth);
|
||
|
}
|
||
|
this.labelWorkspace.style = 'font-size: ' + (this.panelSize - 5 + this.adjustTBLabelSize - this.adjustTBIconSize) + 'px' + '; text-align: center;';
|
||
|
this.buttonWorkspace.set_child(this.labelWorkspace);
|
||
|
},
|
||
|
|
||
|
//Add Desktop Button
|
||
|
addDesktopButton: function() {
|
||
|
if (this.settings.get_boolean("display-desktop-button")) {
|
||
|
let iconPath = this.settings.get_string("desktop-button-icon");
|
||
|
if (iconPath === 'unset')
|
||
|
iconPath = DESKTOPICON;
|
||
|
this.desktopButtonIcon = Gio.icon_new_for_string(iconPath);
|
||
|
let iconDesktop = new St.Icon({
|
||
|
gicon: this.desktopButtonIcon,
|
||
|
icon_size: (this.panelSize),
|
||
|
style_class: "tkb-desktop-icon"
|
||
|
});
|
||
|
let buttonDesktop = new St.Button({
|
||
|
style_class: "tkb-task-button"
|
||
|
});
|
||
|
let signalDesktop = buttonDesktop.connect("button-press-event", Lang.bind(this, this.onClickDesktopButton));
|
||
|
buttonDesktop.set_child(iconDesktop);
|
||
|
let boxDesktop = new St.BoxLayout({
|
||
|
style_class: "tkb-desktop-box"
|
||
|
});
|
||
|
boxDesktop.add_actor(buttonDesktop);
|
||
|
this.boxMainDesktopButton.add_actor(boxDesktop);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Add Tray Button
|
||
|
addTrayButton: function() {
|
||
|
this.messageTrayCountAddedId = null;
|
||
|
this.messageTrayCountRemovedId = null;
|
||
|
if ((this.settings.get_boolean("bottom-panel")) && (this.settings.get_enum("tray-button") !== 0) && (ShellVersion[1] <= 14)) {
|
||
|
this.buttonTray = new St.Button({
|
||
|
style_class: "tkb-task-button"
|
||
|
});
|
||
|
this.signalTray = [
|
||
|
this.buttonTray.connect("button-press-event", Lang.bind(this, this.onClickTrayButton)),
|
||
|
this.buttonTray.connect("enter-event", Lang.bind(this, this.onHoverTrayButton))
|
||
|
];
|
||
|
if ((this.settings.get_enum("tray-button") === 1) && (this.settings.get_enum("tray-button-empty") === 0))
|
||
|
this.messageTrayIcon();
|
||
|
else {
|
||
|
this.messageTrayCountAddedId = Main.messageTray.connect('source-added', Lang.bind(this, this.messageTrayCount));
|
||
|
this.messageTrayCountRemovedId = Main.messageTray.connect('source-removed', Lang.bind(this, this.messageTrayCount));
|
||
|
this.messageTrayCount();
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
messageTrayCount: function() {
|
||
|
let indicatorCount = 0;
|
||
|
indicatorCount = Main.messageTray.getSources().length;
|
||
|
if (((indicatorCount === 0) && (this.settings.get_enum("tray-button-empty") === 0)) ||
|
||
|
((indicatorCount !== 0) && (this.settings.get_enum("tray-button-empty") === 1) && (this.settings.get_enum("tray-button") !== 2)) ||
|
||
|
((indicatorCount !== 0) && (this.settings.get_enum("tray-button") === 1)))
|
||
|
this.messageTrayIcon();
|
||
|
else {
|
||
|
if ((indicatorCount === 0) && (this.settings.get_enum("tray-button-empty") === 2))
|
||
|
this.labelTray = new St.Label();
|
||
|
else
|
||
|
this.labelTray = new St.Label({
|
||
|
text: (indicatorCount + '')
|
||
|
});
|
||
|
this.buttonTray.set_child(this.labelTray);
|
||
|
this.boxTray = new St.BoxLayout({
|
||
|
style_class: "tkb-desktop-box"
|
||
|
});
|
||
|
this.boxTray.add_actor(this.buttonTray);
|
||
|
this.boxBottomPanelTrayButton.add_actor(this.boxTray);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
messageTrayIcon: function() {
|
||
|
let iconPath = this.settings.get_string("tray-button-icon");
|
||
|
if (iconPath === 'unset')
|
||
|
iconPath = BPTRAYICON;
|
||
|
this.trayIcon = Gio.icon_new_for_string(iconPath);
|
||
|
this.iconTray = new St.Icon({
|
||
|
gicon: this.trayIcon,
|
||
|
icon_size: (this.panelSize),
|
||
|
style_class: "tkb-desktop-icon"
|
||
|
});
|
||
|
this.buttonTray.set_child(this.iconTray);
|
||
|
this.boxTray = new St.BoxLayout({
|
||
|
style_class: "tkb-desktop-box"
|
||
|
});
|
||
|
this.boxTray.add_actor(this.buttonTray);
|
||
|
this.boxBottomPanelTrayButton.add_actor(this.boxTray);
|
||
|
},
|
||
|
|
||
|
//Activities Button
|
||
|
displayActivities: function() {
|
||
|
this.initDisplayActivitiesButton();
|
||
|
if (this.settings.get_boolean("activities-button"))
|
||
|
this.activitiesContainer.show();
|
||
|
},
|
||
|
|
||
|
initDisplayActivitiesButton: function() {
|
||
|
if (!this.settings.get_boolean("activities-button")) {
|
||
|
this.activitiesContainer = Main.panel.statusArea.activities.container;
|
||
|
this.activitiesContainer.hide();
|
||
|
}
|
||
|
this.activitiesColor = this.settings.get_string("activities-button-color");
|
||
|
if (this.activitiesColor !== "unset")
|
||
|
this.colorActivities();
|
||
|
},
|
||
|
|
||
|
colorActivities: function() {
|
||
|
this.activitiesColor = this.settings.get_string("activities-button-color");
|
||
|
if (this.activitiesColor !== "unset") {
|
||
|
this.activitiesStyle = "color: " + this.activitiesColor + ";";
|
||
|
Main.panel.statusArea.activities.actor.set_style(this.activitiesStyle);
|
||
|
} else
|
||
|
Main.panel.statusArea.activities.actor.set_style("None");
|
||
|
},
|
||
|
|
||
|
//Top Panel
|
||
|
displayTopPanel: function() {
|
||
|
this.initDisplayTopPanel();
|
||
|
if (this.settings.get_boolean("top-panel")) {
|
||
|
Main.layoutManager.removeChrome(Main.layoutManager.panelBox);
|
||
|
Main.layoutManager.addChrome(Main.layoutManager.panelBox, {
|
||
|
affectsStruts: true
|
||
|
});
|
||
|
Main.panel.actor.show();
|
||
|
Main.panel._leftCorner.actor.show();
|
||
|
Main.panel._rightCorner.actor.show();
|
||
|
this.onParamChanged();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
initDisplayTopPanel: function() {
|
||
|
if (!this.settings.get_boolean("top-panel")) {
|
||
|
Main.layoutManager.removeChrome(Main.layoutManager.panelBox);
|
||
|
Main.layoutManager.addChrome(Main.layoutManager.panelBox, {
|
||
|
affectsStruts: false
|
||
|
});
|
||
|
Main.panel.actor.hide();
|
||
|
Main.panel._leftCorner.actor.hide();
|
||
|
Main.panel._rightCorner.actor.hide();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Hot Corner
|
||
|
enableHotCorner: function() {
|
||
|
if (ShellVersion[1] < 26) {
|
||
|
this.initEnableHotCorner();
|
||
|
if (this.settings.get_boolean("hot-corner")) {
|
||
|
Main.layoutManager._updateHotCorners();
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
initEnableHotCorner: function() {
|
||
|
if ((!this.settings.get_boolean("hot-corner")) && (ShellVersion[1] < 26)) {
|
||
|
Main.layoutManager.hotCorners[Main.layoutManager.primaryIndex]._toggleOverview = function() {};
|
||
|
Main.layoutManager.hotCorners[Main.layoutManager.primaryIndex]._pressureBarrier._trigger = function() {};
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Application Menu
|
||
|
displayApplicationMenu: function() {
|
||
|
this.initDisplayApplicationMenu();
|
||
|
if (this.settings.get_boolean("application-menu")) {
|
||
|
let variant = GLib.Variant.new('a{sv}', {
|
||
|
'Gtk/ShellShowsAppMenu': GLib.Variant.new('i', 1)
|
||
|
});
|
||
|
let xsettings = new Gio.Settings({
|
||
|
schema: 'org.gnome.settings-daemon.plugins.xsettings'
|
||
|
});
|
||
|
xsettings.set_value('overrides', variant);
|
||
|
this.appMenuContainer.show();
|
||
|
Shell.WindowTracker.get_default().disconnect(this.hidingId2);
|
||
|
Main.overview.disconnect(this.hidingId);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
initDisplayApplicationMenu: function() {
|
||
|
this.appMenuContainer = Main.panel.statusArea.appMenu.container;
|
||
|
if (!this.settings.get_boolean("application-menu")) {
|
||
|
this.appMenuContainer.hide();
|
||
|
this.hidingId = Main.overview.connect('hiding', function() {
|
||
|
Main.panel.statusArea.appMenu.container.hide();
|
||
|
});
|
||
|
this.hidingId2 = Shell.WindowTracker.get_default().connect('notify::focus-app', function() {
|
||
|
Main.panel.statusArea.appMenu.container.hide();
|
||
|
});
|
||
|
}
|
||
|
this.appMenuColor = this.settings.get_string("application-menu-color");
|
||
|
if (this.appMenuColor !== "unset")
|
||
|
this.colorApplicationMenu();
|
||
|
},
|
||
|
|
||
|
colorApplicationMenu: function() {
|
||
|
this.appMenuColor = this.settings.get_string("application-menu-color");
|
||
|
if (this.appMenuColor !== "unset") {
|
||
|
this.appMenuStyle = "color: " + this.appMenuColor + ";";
|
||
|
Main.panel.statusArea.appMenu.actor.set_style(this.appMenuStyle);
|
||
|
} else
|
||
|
Main.panel.statusArea.appMenu.actor.set_style("None");
|
||
|
},
|
||
|
|
||
|
|
||
|
//Date Menu
|
||
|
displayDateMenu: function() {
|
||
|
this.initDisplayDateMenu();
|
||
|
if (this.settings.get_boolean("date-menu"))
|
||
|
this.dateMenuContainer.show();
|
||
|
},
|
||
|
|
||
|
initDisplayDateMenu: function() {
|
||
|
if (!this.settings.get_boolean("date-menu")) {
|
||
|
this.dateMenuContainer = Main.panel.statusArea.dateMenu.container;
|
||
|
this.dateMenuContainer.hide();
|
||
|
}
|
||
|
this.dateMenuColor = this.settings.get_string("date-menu-color");
|
||
|
if (this.dateMenuColor !== "unset")
|
||
|
this.colorDateMenu();
|
||
|
},
|
||
|
|
||
|
colorDateMenu: function() {
|
||
|
this.dateMenuColor = this.settings.get_string("date-menu-color");
|
||
|
if (this.dateMenuColor !== "unset") {
|
||
|
this.dateMenuStyle = "color: " + this.dateMenuColor + ";";
|
||
|
Main.panel.statusArea.dateMenu.actor.set_style(this.dateMenuStyle);
|
||
|
} else
|
||
|
Main.panel.statusArea.dateMenu.actor.set_style("None");
|
||
|
},
|
||
|
|
||
|
//System Menu
|
||
|
displaySystemMenu: function() {
|
||
|
this.initDisplaySystemMenu();
|
||
|
if (this.settings.get_boolean("system-menu"))
|
||
|
this.systemMenuContainer.show();
|
||
|
},
|
||
|
|
||
|
initDisplaySystemMenu: function() {
|
||
|
if (!this.settings.get_boolean("system-menu")) {
|
||
|
this.systemMenuContainer = Main.panel.statusArea.aggregateMenu.container;
|
||
|
this.systemMenuContainer.hide();
|
||
|
}
|
||
|
this.systemMenuColor = this.settings.get_string("system-menu-color");
|
||
|
if (this.systemMenuColor !== "unset")
|
||
|
this.colorSystemMenu();
|
||
|
},
|
||
|
|
||
|
colorSystemMenu: function() {
|
||
|
this.systemMenuColor = this.settings.get_string("system-menu-color");
|
||
|
if (this.systemMenuColor !== "unset") {
|
||
|
this.systemMenuStyle = "color: " + this.systemMenuColor + ";";
|
||
|
Main.panel.statusArea.aggregateMenu.actor.set_style(this.systemMenuStyle);
|
||
|
} else
|
||
|
Main.panel.statusArea.aggregateMenu.actor.set_style("None");
|
||
|
},
|
||
|
|
||
|
//Dash
|
||
|
displayDash: function() {
|
||
|
this.initDisplayDash();
|
||
|
if (this.settings.get_boolean("dash")) {
|
||
|
this.dash.set_height(this.dashHeight);
|
||
|
this.dash.set_width(this.dashWidth);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
initDisplayDash: function() {
|
||
|
if (!this.settings.get_boolean("dash")) {
|
||
|
this.dash = Main.overview._dash.actor;
|
||
|
this.dashHeight = this.dash.get_height();
|
||
|
this.dashWidth = this.dash.get_width();
|
||
|
this.dash.set_height(0);
|
||
|
this.dash.set_width(0);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Workspace Selector
|
||
|
displayWorkspaceSelector: function() {
|
||
|
this.initDisplayWorkspaceSelector();
|
||
|
if (this.settings.get_boolean("workspace-selector")) {
|
||
|
ThumbnailsSlider._getAlwaysZoomOut = this.alwaysZoomOut;
|
||
|
ThumbnailsSlider.getNonExpandedWidth = this.nonExpandedWidth;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
initDisplayWorkspaceSelector: function() {
|
||
|
if (!this.settings.get_boolean("workspace-selector")) {
|
||
|
this.alwaysZoomOut = ThumbnailsSlider._getAlwaysZoomOut;
|
||
|
this.nonExpandedWidth = ThumbnailsSlider.getNonExpandedWidth;
|
||
|
ThumbnailsSlider._getAlwaysZoomOut = function() {
|
||
|
return false;
|
||
|
}
|
||
|
ThumbnailsSlider.getNonExpandedWidth = function() {
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
|
||
|
//Preferences Hover Component Event
|
||
|
hoverEvent: function() {
|
||
|
this.hoverComponent = this.settings.get_int("hover-event");
|
||
|
this.hoverStyle = "background-color: red; border-radius: 5px";
|
||
|
if ((this.hoverComponent === 1) && (this.settings.get_boolean("display-tasks")))
|
||
|
this.boxMainTasks.set_style(this.separatorTasks + this.hoverStyle);
|
||
|
else if ((this.hoverComponent === 2) && (this.settings.get_boolean("display-desktop-button")))
|
||
|
this.boxMainDesktopButton.set_style(this.separatorDesktop + this.hoverStyle);
|
||
|
else if ((this.hoverComponent === 3) && (this.settings.get_boolean("display-workspace-button")))
|
||
|
this.boxMainWorkspaceButton.set_style(this.separatorWorkspaces + this.hoverStyle);
|
||
|
else if ((this.hoverComponent === 4) && (this.settings.get_boolean("display-showapps-button")))
|
||
|
this.boxMainShowAppsButton.set_style(this.separatorAppview + this.hoverStyle);
|
||
|
else if ((this.hoverComponent === 5) && (this.settings.get_boolean("display-favorites")))
|
||
|
this.boxMainFavorites.set_style(this.separatorFavorites + this.hoverStyle);
|
||
|
else if (this.hoverComponent === 0) {
|
||
|
if (this.settings.get_boolean("display-tasks"))
|
||
|
this.boxMainTasks.set_style(this.separatorTasks);
|
||
|
if (this.settings.get_boolean("display-desktop-button"))
|
||
|
this.boxMainDesktopButton.set_style(this.separatorDesktop);
|
||
|
if (this.settings.get_boolean("display-workspace-button"))
|
||
|
this.boxMainWorkspaceButton.set_style(this.separatorWorkspaces);
|
||
|
if (this.settings.get_boolean("display-showapps-button"))
|
||
|
this.boxMainShowAppsButton.set_style(this.separatorAppview);
|
||
|
if (this.settings.get_boolean("display-favorites"))
|
||
|
this.boxMainFavorites.set_style(this.separatorFavorites);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Active Task Frame / Background Color
|
||
|
activeTaskFrame: function() {
|
||
|
this.backgroundColor = this.settings.get_string("active-task-background-color");
|
||
|
this.activeTasksFrameColor = this.settings.get_string("tasks-frame-color");
|
||
|
this.margin = this.settings.get_int("tasks-spaces");
|
||
|
this.backgroundStyleColor = "border-radius: 5px;";
|
||
|
if (this.settings.get_boolean("active-task-background-color-set"))
|
||
|
this.backgroundStyleColor += "background-color: " + this.backgroundColor + "; ";
|
||
|
if ((this.settings.get_boolean("active-task-frame")) && (this.settings.get_boolean("display-tasks-frame-color")))
|
||
|
this.backgroundStyleColor += "border: 1px " + this.activeTasksFrameColor + "; background-image: url('" + Extension.path + "/images/active-task-background.svg'); ";
|
||
|
else if ((this.settings.get_boolean("active-task-frame")) && (!this.settings.get_boolean("display-tasks-frame-color")))
|
||
|
this.backgroundStyleColor += "border: 1px solid gray; background-image: url('" + Extension.path + "/images/active-task-background.svg'); ";
|
||
|
if (this.settings.get_int("tasks-spaces") !== 0)
|
||
|
this.backgroundStyleColor += "margin-right: " + this.margin + "px;";
|
||
|
},
|
||
|
|
||
|
//Inactive Task Frame / Background Color
|
||
|
inactiveTaskFrame: function() {
|
||
|
this.inactiveBackgroundColor = this.settings.get_string("inactive-task-background-color");
|
||
|
this.inactiveTasksFrameColor = this.settings.get_string("inactive-tasks-frame-color");
|
||
|
this.inactiveMargin = this.settings.get_int("tasks-spaces");
|
||
|
this.inactiveBackgroundStyleColor = "border-radius: 5px; ";
|
||
|
if (this.settings.get_boolean("inactive-task-background-color-set"))
|
||
|
this.inactiveBackgroundStyleColor += "background-color: " + this.inactiveBackgroundColor + "; ";
|
||
|
if ((this.settings.get_boolean("inactive-task-frame")) && (this.settings.get_boolean("display-inactive-tasks-frame-color")))
|
||
|
this.inactiveBackgroundStyleColor += "border: 1px " + this.inactiveTasksFrameColor + "; background-image: url('" + Extension.path + "/images/active-task-background.svg'); ";
|
||
|
else if ((this.settings.get_boolean("inactive-task-frame")) && (!this.settings.get_boolean("display-inactive-tasks-frame-color")))
|
||
|
this.inactiveBackgroundStyleColor += "border: 1px solid gray; background-image: url('" + Extension.path + "/images/active-task-background.svg'); ";
|
||
|
if (this.settings.get_int("tasks-spaces") !== 0)
|
||
|
this.inactiveBackgroundStyleColor += "margin-right: " + this.inactiveMargin + "px;";
|
||
|
},
|
||
|
|
||
|
//Top Panel Background Color and (Font) Size
|
||
|
changeTopPanelBackgroundColor: function() {
|
||
|
this.panelSize = this.settings.get_int('panel-size');
|
||
|
this.adjustTBIconSize = this.settings.get_int('tb-icon-size');
|
||
|
this.adjustTBLabelSize = this.settings.get_int('tb-label-size');
|
||
|
this.adjustContentSize = this.settings.get_int('content-size');
|
||
|
this.panelSet = false;
|
||
|
this.originalTopPanelStyle = Main.panel.actor.get_style();
|
||
|
this.originalLeftPanelCornerStyle = Main.panel._leftCorner.actor.get_style();
|
||
|
this.originalRightPanelCornerStyle = Main.panel._rightCorner.actor.get_style();
|
||
|
//Get Native Panel Background Color
|
||
|
let tpobc = Main.panel.actor.get_theme_node().get_background_color();
|
||
|
let topPanelOriginalBackgroundColor = 'rgba(%d, %d, %d, %d)'.format(tpobc.red, tpobc.green, tpobc.blue, tpobc.alpha);
|
||
|
this.settings.set_string("top-panel-original-background-color", topPanelOriginalBackgroundColor);
|
||
|
this.bottomPanelBackgroundColor = this.settings.get_string("bottom-panel-background-color");
|
||
|
if (this.bottomPanelBackgroundColor === 'unset') {
|
||
|
this.settings.set_string("bottom-panel-original-background-color", topPanelOriginalBackgroundColor);
|
||
|
}
|
||
|
if ((this.panelSize !== 27) || (this.adjustContentSize !== 0)) {
|
||
|
//Set Font Size
|
||
|
this.panelLabelSize = (this.panelSize - 12 + this.adjustContentSize);
|
||
|
this.fontSize = 'font-size: ' + this.panelLabelSize + 'px; height: ' + this.panelSize + 'px;';
|
||
|
Main.panel.actor.set_style(this.fontSize);
|
||
|
this.panelSet = true;
|
||
|
}
|
||
|
this.topPanelBackgroundColor = this.settings.get_string("top-panel-background-color");
|
||
|
if (this.topPanelBackgroundColor !== 'unset') {
|
||
|
this.topPanelBackgroundStyle = "background-color: " + this.topPanelBackgroundColor + ";";
|
||
|
this.panelLabelSize = (this.panelSize - 12 + this.adjustContentSize);
|
||
|
this.fontSize = 'font-size: ' + this.panelLabelSize + 'px; height: ' + this.panelSize + 'px;';
|
||
|
Main.panel.actor.set_style(this.fontSize + ' ' + this.topPanelBackgroundStyle);
|
||
|
if ((this.settings.get_boolean("top-panel-background-alpha")) && (ShellVersion[1] <= 16)) {
|
||
|
Main.panel._leftCorner.actor.hide();
|
||
|
Main.panel._rightCorner.actor.hide();
|
||
|
} else {
|
||
|
if (ShellVersion[1] <= 16) {
|
||
|
Main.panel._leftCorner.actor.show();
|
||
|
Main.panel._rightCorner.actor.show();
|
||
|
}
|
||
|
Main.panel._leftCorner.actor.set_style('-panel-corner-background-color: ' + this.topPanelBackgroundColor + ';');
|
||
|
Main.panel._rightCorner.actor.set_style('-panel-corner-background-color: ' + this.topPanelBackgroundColor + ';');
|
||
|
}
|
||
|
this.panelSet = true;
|
||
|
}
|
||
|
this.panelSize = ((this.settings.get_int('panel-size')) - 6 + (this.settings.get_int('tb-icon-size')));
|
||
|
},
|
||
|
|
||
|
//Bottom Panel
|
||
|
bottomPanel: function() {
|
||
|
this.adjustTBIconSize = this.settings.get_int('tb-icon-size-bottom');
|
||
|
this.adjustTBLabelSize = this.settings.get_int('tb-label-size-bottom');
|
||
|
this.adjustContentSize = 0;
|
||
|
let bottomPanelHeight = null;
|
||
|
let newShowTray = null;
|
||
|
this.panelSize = this.settings.get_int('panel-size-bottom');
|
||
|
this.panelLabelSize = (this.panelSize - 12 + this.adjustTBLabelSize);
|
||
|
this.fontSize = 'font-size: ' + this.panelLabelSize + 'px; height: ' + this.panelSize + 'px;';
|
||
|
this.bottomPanelVertical = this.settings.get_int('bottom-panel-vertical');
|
||
|
this.bottomPanelBackgroundColor = this.settings.get_string("bottom-panel-background-color");
|
||
|
if (this.bottomPanelBackgroundColor === "unset")
|
||
|
this.bottomPanelBackgroundColor = this.settings.get_string("bottom-panel-original-background-color");
|
||
|
this.bottomPanelBackgroundStyle = "background-color: " + this.bottomPanelBackgroundColor + ";";
|
||
|
this.bottomPanelActor = new St.BoxLayout({
|
||
|
name: 'bottomPanel'
|
||
|
});
|
||
|
this.bottomPanelActor.set_style(this.fontSize + ' ' + this.bottomPanelBackgroundStyle);
|
||
|
this.bottomPanelActor.set_reactive(false);
|
||
|
this.positionBoxBottomStart = new St.Bin({
|
||
|
x_fill: false,
|
||
|
x_expand: true,
|
||
|
x_align: St.Align.START
|
||
|
});
|
||
|
this.positionBoxBottomMiddle = new St.Bin({
|
||
|
x_fill: false,
|
||
|
x_expand: true,
|
||
|
x_align: St.Align.MIDDLE
|
||
|
});
|
||
|
this.positionBoxBottomEnd = new St.Bin({
|
||
|
x_fill: false,
|
||
|
x_expand: true,
|
||
|
x_align: St.Align.END
|
||
|
});
|
||
|
this.positionBoxBottomSettings = this.settings.get_int("position-bottom-box");
|
||
|
if (this.positionBoxBottomSettings === 0)
|
||
|
this.positionBoxBottomStart.add_actor(this.boxMain);
|
||
|
else if (this.positionBoxBottomSettings === 1)
|
||
|
this.positionBoxBottomMiddle.add_actor(this.boxMain);
|
||
|
else if (this.positionBoxBottomSettings === 2) {
|
||
|
this.positionBoxBottomEnd.add_actor(this.boxMain);
|
||
|
this.bottomPanelEndIndicator = true;
|
||
|
}
|
||
|
if ((this.settings.get_enum("tray-button") !== 0) && (!this.bottomPanelEndIndicator) && (ShellVersion[1] <= 14))
|
||
|
this.positionBoxBottomEnd.add_actor(this.boxBottomPanelTrayButton);
|
||
|
Main.layoutManager.addChrome(this.bottomPanelActor, {
|
||
|
affectsStruts: true,
|
||
|
trackFullscreen: true
|
||
|
});
|
||
|
this.bottomPanelActor.add_actor(this.positionBoxBottomStart);
|
||
|
this.bottomPanelActor.add_actor(this.positionBoxBottomMiddle);
|
||
|
this.bottomPanelActor.add_actor(this.positionBoxBottomEnd);
|
||
|
let primary = Main.layoutManager.primaryMonitor;
|
||
|
this.height = (this.panelSize + this.bottomPanelVertical);
|
||
|
this.bottomPanelActor.set_position(primary.x, primary.y + primary.height - this.height);
|
||
|
this.bottomPanelActor.set_size(primary.width, -1);
|
||
|
if (ShellVersion[1] <= 14) {
|
||
|
Main.messageTray._notificationWidget.set_anchor_point(0, this.height);
|
||
|
this.setAnchorPoint = true;
|
||
|
this.messageTrayShowingId = Main.messageTray.connect('showing', Lang.bind(this, function() {
|
||
|
Main.messageTray.actor.set_anchor_point(0, this.height);
|
||
|
this.setAnchorPoint = true;
|
||
|
}));
|
||
|
this.messageTrayHidingId = Main.messageTray.connect('hiding', Lang.bind(this, function() {
|
||
|
Main.messageTray.actor.set_anchor_point(0, 0);
|
||
|
this.setAnchorPoint = true;
|
||
|
}));
|
||
|
}
|
||
|
this.panelSize = ((this.settings.get_int('panel-size-bottom')) - 6 + (this.settings.get_int('tb-icon-size-bottom')));
|
||
|
},
|
||
|
|
||
|
//Click Events
|
||
|
onClickShowAppsButton: function(button, pspec) {
|
||
|
let numButton = pspec.get_button();
|
||
|
this.leftbutton = LEFTBUTTON;
|
||
|
this.rightbutton = RIGHTBUTTON;
|
||
|
if (this.settings.get_enum("showapps-button-toggle") === 1) {
|
||
|
this.leftbutton = RIGHTBUTTON;
|
||
|
this.rightbutton = LEFTBUTTON;
|
||
|
}
|
||
|
if (numButton === this.leftbutton) //Left Button
|
||
|
{
|
||
|
if (!Main.overview.visible)
|
||
|
Main.overview.show();
|
||
|
if (!Main.overview.viewSelector._showAppsButton.checked)
|
||
|
Main.overview.viewSelector._showAppsButton.checked = true;
|
||
|
else
|
||
|
Main.overview.hide();
|
||
|
} else if (numButton === this.rightbutton) //Right Button
|
||
|
{
|
||
|
if (!Main.overview.visible)
|
||
|
Main.overview.show();
|
||
|
else if (Main.overview.viewSelector._showAppsButton.checked)
|
||
|
Main.overview.viewSelector._showAppsButton.checked = false;
|
||
|
else
|
||
|
Main.overview.hide();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
onClickWorkspaceButton: function(button, pspec) {
|
||
|
let numButton = pspec.get_button();
|
||
|
if (numButton === LEFTBUTTON) //Left Button
|
||
|
{
|
||
|
if (this.activeWorkspaceIndex === this.totalWorkspace)
|
||
|
this.activeWorkspaceIndex = -1;
|
||
|
let newActiveWorkspace = global.workspace_manager.get_workspace_by_index(this.activeWorkspaceIndex + 1);
|
||
|
newActiveWorkspace.activate(global.get_current_time());
|
||
|
} else if (numButton === RIGHTBUTTON) //Right Button
|
||
|
{
|
||
|
if (this.activeWorkspaceIndex === 0)
|
||
|
this.activeWorkspaceIndex = this.totalWorkspace + 1;
|
||
|
let newActiveWorkspace = global.workspace_manager.get_workspace_by_index(this.activeWorkspaceIndex - 1);
|
||
|
newActiveWorkspace.activate(global.get_current_time());
|
||
|
}
|
||
|
},
|
||
|
|
||
|
onClickDesktopButton: function(button, pspec) {
|
||
|
let maxWindows = false;
|
||
|
let userTime = null;
|
||
|
let activeWorkspace = global.workspace_manager.get_active_workspace();
|
||
|
let windows = activeWorkspace.list_windows().filter(function(w) {
|
||
|
return w.get_window_type() !== Meta.WindowType.DESKTOP;
|
||
|
});
|
||
|
let numButton = pspec.get_button();
|
||
|
if (numButton === LEFTBUTTON) //Left Button
|
||
|
{
|
||
|
for (let i = 0; i < windows.length; ++i) {
|
||
|
if ((this.desktopView) && (!Main.overview.visible)) {
|
||
|
userTime = windows[i].user_time;
|
||
|
if (userTime > this.lastFocusedWindowUserTime) {
|
||
|
this.lastFocusedWindowUserTime = userTime;
|
||
|
this.lastFocusedWindow = windows[i];
|
||
|
}
|
||
|
windows[i].unminimize();
|
||
|
maxWindows = true;
|
||
|
} else {
|
||
|
windows[i].minimize();
|
||
|
}
|
||
|
}
|
||
|
if (maxWindows) {
|
||
|
this.lastFocusedWindow.activate(global.get_current_time());
|
||
|
}
|
||
|
this.desktopView = !this.desktopView;
|
||
|
if (Main.overview.visible)
|
||
|
Main.overview.hide();
|
||
|
} else if ((numButton === RIGHTBUTTON) && (this.settings.get_boolean("desktop-button-right-click"))) //Right Button
|
||
|
Util.spawnCommandLine('gnome-extensions prefs ' + Extension.metadata.uuid);
|
||
|
},
|
||
|
|
||
|
onClickTaskButton: function(button, pspec, window) {
|
||
|
if (this.taskMenuUp && this.taskMenu.isOpen) {
|
||
|
this.taskMenu.close();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
let numButton = pspec.get_button();
|
||
|
let buttonAction = 0;
|
||
|
|
||
|
if (numButton === LEFTBUTTON)
|
||
|
buttonAction = this.settings.get_enum("tasks-left-click");
|
||
|
else if (numButton === MIDDLEBUTTON)
|
||
|
buttonAction = this.settings.get_enum("tasks-middle-click");
|
||
|
else if (numButton === RIGHTBUTTON)
|
||
|
buttonAction = this.settings.get_enum("tasks-right-click");
|
||
|
|
||
|
let app = Shell.WindowTracker.get_default().get_window_app(window);
|
||
|
let appname = app.get_name();
|
||
|
let index = this.searchTaskInList(window);
|
||
|
|
||
|
switch (buttonAction)
|
||
|
{
|
||
|
case 0: //Action === 'none'
|
||
|
return;
|
||
|
case 1: //Action === 'minmax'
|
||
|
this.clickActionMinMax(window, appname, index);
|
||
|
break;
|
||
|
case 2: //Action === 'openmenu'
|
||
|
this.clickActionOpenMenu(window, appname, button);
|
||
|
break;
|
||
|
case 3: //Action === 'close'
|
||
|
window.delete(global.get_current_time());
|
||
|
break;
|
||
|
case 4: //Action === 'new_instance'
|
||
|
app.open_new_window(-1);
|
||
|
break;
|
||
|
default: //Same as 'none'
|
||
|
return;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
onClickTrayButton: function(button, pspec) {
|
||
|
let numButton = pspec.get_button();
|
||
|
if (numButton === LEFTBUTTON) //Left Button
|
||
|
{
|
||
|
Main.messageTray.toggle();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Actions executed depending on button click on Task
|
||
|
clickActionMinMax: function(window, appname, index) {
|
||
|
let activeWorkspace = global.workspace_manager.get_active_workspace();
|
||
|
let focusWindow = global.display.focus_window;
|
||
|
let nextApp = false;
|
||
|
|
||
|
this.tasksList.forEach(
|
||
|
function(task) {
|
||
|
let [windowTask, buttonTask, signalsTask] = task;
|
||
|
let windowWorkspace = windowTask.get_workspace();
|
||
|
|
||
|
if (windowTask === window) {
|
||
|
if (windowWorkspace !== activeWorkspace) {
|
||
|
windowWorkspace.activate(global.get_current_time());
|
||
|
windowTask.activate(global.get_current_time());
|
||
|
}
|
||
|
else if (!windowTask.has_focus()) {
|
||
|
windowTask.activate(global.get_current_time());
|
||
|
}
|
||
|
else if ((!Main.overview.visible) && ((this.settings.get_enum("sort-tasks") === 3) || (this.settings.get_enum("sort-tasks") === 4))) {
|
||
|
for (let i = index - 1; i >= 0; i--) {
|
||
|
let sameWorkspace = true;
|
||
|
let [_windowTask, _buttonTask, _signalsTask] = this.tasksList[i];
|
||
|
let _appname = Shell.WindowTracker.get_default().get_window_app(_windowTask).get_name();
|
||
|
let _windowWorkspace = _windowTask.get_workspace();
|
||
|
|
||
|
if ((appname === _appname) && (_windowTask !== focusWindow)) {
|
||
|
if (_windowWorkspace !== activeWorkspace) {
|
||
|
if (this.settings.get_enum("sort-tasks") === 4) continue;
|
||
|
else _windowWorkspace.activate(global.get_current_time());
|
||
|
}
|
||
|
_windowTask.activate(global.get_current_time());
|
||
|
nextApp = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!nextApp) {
|
||
|
for (let k = this.tasksList.length - 1; k >= index; k--) {
|
||
|
let [_windowTask2, _buttonTask2, _signalsTask2] = this.tasksList[k];
|
||
|
let _appname2 = Shell.WindowTracker.get_default().get_window_app(_windowTask2).get_name();
|
||
|
let _windowWorkspace2 = _windowTask2.get_workspace();
|
||
|
|
||
|
if ((appname === _appname2) && (_windowTask2 !== focusWindow)) {
|
||
|
if (_windowWorkspace2 !== activeWorkspace) {
|
||
|
if (this.settings.get_enum("sort-tasks") === 4)
|
||
|
continue;
|
||
|
else
|
||
|
_windowWorkspace2.activate(global.get_current_time());
|
||
|
}
|
||
|
_windowTask2.activate(global.get_current_time());
|
||
|
nextApp = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
windowTask.minimize();
|
||
|
}
|
||
|
}
|
||
|
else if (!Main.overview.visible)
|
||
|
windowTask.minimize();
|
||
|
}
|
||
|
},
|
||
|
this
|
||
|
);
|
||
|
|
||
|
if (Main.overview.visible)
|
||
|
Main.overview.hide();
|
||
|
},
|
||
|
|
||
|
clickActionOpenMenu: function(window, appname, button) {
|
||
|
this.taskMenu = null;
|
||
|
let app = Shell.WindowTracker.get_default().get_window_app(window);
|
||
|
let taskMenuManager = new PopupMenu.PopupMenuManager(button);
|
||
|
|
||
|
if (app.action_group && app.menu) {
|
||
|
this.taskMenu = new imports.ui.remoteMenu.RemoteMenu(button, app.menu, app.action_group);
|
||
|
}
|
||
|
else {
|
||
|
this.taskMenu = new PopupMenu.PopupMenu(button, 0.0, St.Side.TOP);
|
||
|
let menuQuit = new PopupMenu.PopupMenuItem("Quit");
|
||
|
|
||
|
menuQuit.connect('activate', Lang.bind(this, function() {
|
||
|
window.delete(global.get_current_time());
|
||
|
}));
|
||
|
this.taskMenu.addMenuItem(menuQuit);
|
||
|
}
|
||
|
|
||
|
if ((this.settings.get_enum("sort-tasks") === 3) || (this.settings.get_enum("sort-tasks") === 4)) {
|
||
|
let counter = 1;
|
||
|
let windowsList = null;
|
||
|
let title = null;
|
||
|
|
||
|
this.tasksList.forEach(
|
||
|
function(task) {
|
||
|
let [windowTask, buttonTask, signalsTask] = task;
|
||
|
let _appname = Shell.WindowTracker.get_default().get_window_app(windowTask).get_name();
|
||
|
let windowWorkspace = windowTask.get_workspace();
|
||
|
|
||
|
if ((appname === _appname) && (windowTask !== window)) {
|
||
|
if ((windowWorkspace !== window.get_workspace()) && (this.settings.get_enum("sort-tasks") === 4))
|
||
|
return;
|
||
|
|
||
|
windowsList = null;
|
||
|
title = windowTask.get_title();
|
||
|
|
||
|
if (title.length > 50)
|
||
|
title = title.substr(0, 47) + "...";
|
||
|
|
||
|
windowsList = new PopupMenu.PopupMenuItem(title);
|
||
|
windowsList.connect('activate', Lang.bind(this, function() {
|
||
|
if (windowWorkspace !== global.workspace_manager.get_active_workspace())
|
||
|
windowWorkspace.activate(global.get_current_time());
|
||
|
windowTask.activate(global.get_current_time());
|
||
|
}));
|
||
|
|
||
|
this.taskMenu.addMenuItem(windowsList, 0);
|
||
|
counter++;
|
||
|
}
|
||
|
},
|
||
|
this
|
||
|
);
|
||
|
|
||
|
if (counter > 1) {
|
||
|
windowsList = null;
|
||
|
title = null;
|
||
|
title = window.get_title();
|
||
|
if (title.length > 50)
|
||
|
title = title.substr(0, 47) + "...";
|
||
|
windowsList = new PopupMenu.PopupMenuItem(title);
|
||
|
let _windowWorkspace = window.get_workspace();
|
||
|
windowsList.connect('activate', Lang.bind(this, function() {
|
||
|
window.activate(global.get_current_time());
|
||
|
}));
|
||
|
this.taskMenu.addMenuItem(windowsList, 0);
|
||
|
}
|
||
|
else {
|
||
|
counter--;
|
||
|
}
|
||
|
|
||
|
if (counter > 1) {
|
||
|
let mini = new PopupMenu.PopupMenuItem("Minimize Window");
|
||
|
mini.connect('activate', Lang.bind(this, function() {
|
||
|
window.minimize();
|
||
|
}));
|
||
|
this.taskMenu.addMenuItem(mini, counter);
|
||
|
let separator = new PopupMenu.PopupSeparatorMenuItem();
|
||
|
this.taskMenu.addMenuItem(separator, counter);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
this.taskMenu.actor.hide();
|
||
|
taskMenuManager.addMenu(this.taskMenu);
|
||
|
Main.uiGroup.add_actor(this.taskMenu.actor);
|
||
|
this.taskMenuUp = true;
|
||
|
this.hidePreview();
|
||
|
this.taskMenu.open();
|
||
|
},
|
||
|
|
||
|
//Scroll Events
|
||
|
onScrollWorkspaceButton: function(button, event) {
|
||
|
if ((this.settings.get_enum("scroll-workspaces") === 1) || (this.settings.get_enum("scroll-workspaces") === 2)) {
|
||
|
let scrollDirection = event.get_scroll_direction();
|
||
|
if (((scrollDirection === Clutter.ScrollDirection.UP) && (this.settings.get_enum("scroll-workspaces") === 1)) ||
|
||
|
((scrollDirection === Clutter.ScrollDirection.DOWN) && (this.settings.get_enum("scroll-workspaces") === 2))) {
|
||
|
if (this.activeWorkspaceIndex === this.totalWorkspace)
|
||
|
this.activeWorkspaceIndex = -1;
|
||
|
let newActiveWorkspace = global.workspace_manager.get_workspace_by_index(this.activeWorkspaceIndex + 1);
|
||
|
newActiveWorkspace.activate(global.get_current_time());
|
||
|
} else if (((scrollDirection === Clutter.ScrollDirection.DOWN) && (this.settings.get_enum("scroll-workspaces") === 1)) ||
|
||
|
((scrollDirection === Clutter.ScrollDirection.UP) && (this.settings.get_enum("scroll-workspaces") === 2))) {
|
||
|
if (this.activeWorkspaceIndex === 0)
|
||
|
this.activeWorkspaceIndex = this.totalWorkspace + 1;
|
||
|
let newActiveWorkspace = global.workspace_manager.get_workspace_by_index(this.activeWorkspaceIndex - 1);
|
||
|
newActiveWorkspace.activate(global.get_current_time());
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
onScrollTaskButton: function(button, event) {
|
||
|
if ((this.settings.get_enum("scroll-tasks") === 1) || (this.settings.get_enum("scroll-tasks") === 2)) {
|
||
|
this.nextTask = false;
|
||
|
this.previousTask = null;
|
||
|
let focusWindow = global.display.focus_window;
|
||
|
let activeWorkspace = global.workspace_manager.get_active_workspace();
|
||
|
let scrollDirection = event.get_scroll_direction();
|
||
|
if (((scrollDirection === Clutter.ScrollDirection.UP) && (this.settings.get_enum("scroll-tasks") === 1)) ||
|
||
|
((scrollDirection === Clutter.ScrollDirection.DOWN) && (this.settings.get_enum("scroll-tasks") === 2))) {
|
||
|
this.tasksList.forEach(
|
||
|
function(task) {
|
||
|
let [windowTask, buttonTask, signalsTask] = task;
|
||
|
let windowWorkspace = windowTask.get_workspace();
|
||
|
if (this.nextTask) {
|
||
|
if (windowWorkspace !== activeWorkspace)
|
||
|
windowWorkspace.activate(global.get_current_time());
|
||
|
windowTask.activate(global.get_current_time());
|
||
|
this.nextTask = false;
|
||
|
}
|
||
|
if (windowTask === focusWindow)
|
||
|
this.nextTask = true;
|
||
|
},
|
||
|
this
|
||
|
);
|
||
|
if (Main.overview.visible)
|
||
|
Main.overview.hide();
|
||
|
} else if (((scrollDirection === Clutter.ScrollDirection.DOWN) && (this.settings.get_enum("scroll-tasks") === 1)) ||
|
||
|
((scrollDirection === Clutter.ScrollDirection.UP) && (this.settings.get_enum("scroll-tasks") === 2))) {
|
||
|
this.tasksList.forEach(
|
||
|
function(task) {
|
||
|
let [windowTask, buttonTask, signalsTask] = task;
|
||
|
if ((windowTask === focusWindow) && (this.previousTask !== null)) {
|
||
|
let [windowTask, buttonTask, signalsTask] = this.previousTask;
|
||
|
let windowWorkspace = windowTask.get_workspace();
|
||
|
if (windowWorkspace !== activeWorkspace)
|
||
|
windowWorkspace.activate(global.get_current_time());
|
||
|
windowTask.activate(global.get_current_time());
|
||
|
}
|
||
|
this.previousTask = task;
|
||
|
},
|
||
|
this
|
||
|
);
|
||
|
if (Main.overview.visible)
|
||
|
Main.overview.hide();
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Open Tray on Tray Button Hover
|
||
|
onHoverTrayButton: function() {
|
||
|
if (this.settings.get_boolean("hover-tray-button"))
|
||
|
Main.messageTray.toggle();
|
||
|
},
|
||
|
|
||
|
//Switch Task on Hover
|
||
|
onHoverSwitchTask: function(button, window) {
|
||
|
if (!this.resetHover) {
|
||
|
let focusWindow = global.display.focus_window;
|
||
|
let appname = Shell.WindowTracker.get_default().get_window_app(focusWindow).get_name();
|
||
|
let activeWorkspace = global.workspace_manager.get_active_workspace();
|
||
|
this.tasksList.forEach(
|
||
|
function(task) {
|
||
|
let [windowTask, buttonTask, signalsTask] = task;
|
||
|
let windowWorkspace = windowTask.get_workspace();
|
||
|
let _app_name = Shell.WindowTracker.get_default().get_window_app(windowTask).get_name();
|
||
|
if ((windowTask === window) && (((appname !== _app_name) && ((this.settings.get_enum("sort-tasks") === 3) || (this.settings.get_enum("sort-tasks") === 4))) || ((this.settings.get_enum("sort-tasks") !== 3) && (this.settings.get_enum("sort-tasks") !== 4)))) {
|
||
|
if (windowWorkspace !== activeWorkspace) {
|
||
|
windowWorkspace.activate(global.get_current_time());
|
||
|
windowTask.activate(global.get_current_time());
|
||
|
} else if (!windowTask.has_focus())
|
||
|
windowTask.activate(global.get_current_time());
|
||
|
}
|
||
|
},
|
||
|
this
|
||
|
);
|
||
|
if (Main.overview.visible)
|
||
|
Main.overview.hide();
|
||
|
}
|
||
|
if (this.previewTimer2 !== null) {
|
||
|
Mainloop.source_remove(this.previewTimer2);
|
||
|
this.previewTimer2 = null;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Window Demands Attention
|
||
|
onWindowDemandsAttention: function(display, window) {
|
||
|
if ((this.settings.get_boolean("display-tasks")) && (this.settings.get_boolean("blink-tasks"))) {
|
||
|
this.tasksList.forEach(
|
||
|
function(task) {
|
||
|
let [windowTask, buttonTask, signalsTask] = task;
|
||
|
if ((windowTask === window) && (!windowTask.has_focus())) {
|
||
|
this.attentionStyleChanged = false;
|
||
|
this.attentionStyle = "background-color: " + this.settings.get_string("blink-color") + "; margin-right: " + this.inactiveMargin + "px;";
|
||
|
this.attentionStyleChangeTimeout = Mainloop.timeout_add(this.settings.get_int("blink-rate"), Lang.bind(this, this.changeAttentionStyle, windowTask, buttonTask));
|
||
|
}
|
||
|
},
|
||
|
this
|
||
|
);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
changeAttentionStyle: function(windowTask, buttonTask) {
|
||
|
if ((!this.attentionStyleChanged) && (!windowTask.has_focus())) {
|
||
|
buttonTask.set_style(this.attentionStyle);
|
||
|
this.attentionStyleChanged = true;
|
||
|
return true;
|
||
|
} else if ((this.attentionStyleChanged) && (!windowTask.has_focus())) {
|
||
|
buttonTask.set_style(this.inactiveBackgroundStyleColor);
|
||
|
this.attentionStyleChanged = false;
|
||
|
return true;
|
||
|
} else
|
||
|
return false;
|
||
|
},
|
||
|
|
||
|
//Init Windows Manage Callbacks
|
||
|
initWindows: function(windowsList, type, window) {
|
||
|
if (this.settings.get_boolean("display-tasks")) {
|
||
|
//Active Task Frame / Background Color
|
||
|
this.activeTaskFrame();
|
||
|
//Inactive Task Frame / Background Color
|
||
|
this.inactiveTaskFrame();
|
||
|
//Task Menu
|
||
|
this.taskMenu = null;
|
||
|
this.taskMenuUp = false;
|
||
|
this.tasksContainerSize();
|
||
|
this.windows = new Windows.Windows(this, this.onWindowsListChanged, this.onWindowChanged);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Taskslist
|
||
|
onWindowsListChanged: function(windowsList, type, window) {
|
||
|
this.cleanTasksList();
|
||
|
windowsList.forEach(
|
||
|
function(window) {
|
||
|
this.addTaskInList(window);
|
||
|
},
|
||
|
this
|
||
|
);
|
||
|
this.hidePreview();
|
||
|
this.tasksContainer();
|
||
|
this.iconGeometry();
|
||
|
this.updateIcon();
|
||
|
},
|
||
|
|
||
|
//Tasks Container
|
||
|
tasksContainer: function(window) {
|
||
|
if ((this.tasksContainerWidth > 0) && (this.countTasks > 0) && (this.countTasks > this.tasksContainerWidth)) {
|
||
|
let buttonTaskWidth;
|
||
|
if (this.settings.get_enum("tasks-label") !== 0)
|
||
|
buttonTaskWidth = this.settings.get_int("tasks-width");
|
||
|
else
|
||
|
buttonTaskWidth = (this.panelSize + 8);
|
||
|
let totalWidth = this.boxMainTasks.get_width();
|
||
|
let spaces = this.settings.get_int("tasks-spaces");
|
||
|
let counter = 0;
|
||
|
this.tasksList.forEach(
|
||
|
function(task) {
|
||
|
let [windowTask, buttonTask, signalsTask] = task;
|
||
|
if (buttonTask.visible)
|
||
|
counter++;
|
||
|
},
|
||
|
this
|
||
|
);
|
||
|
let newWidth = ((totalWidth - (spaces * counter)) / counter);
|
||
|
if (newWidth > buttonTaskWidth) {
|
||
|
newWidth = buttonTaskWidth;
|
||
|
}
|
||
|
this.tasksList.forEach(
|
||
|
function(_task) {
|
||
|
let [_windowTask, _buttonTask, _signalsTask] = _task;
|
||
|
_buttonTask.set_width(newWidth);
|
||
|
},
|
||
|
this
|
||
|
);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Tasks Container Size
|
||
|
tasksContainerSize: function() {
|
||
|
if (this.tasksContainerWidth > 0) {
|
||
|
let spaces = this.settings.get_int("tasks-spaces");
|
||
|
let buttonTaskWidth = 0;
|
||
|
this.tasksWidth = this.settings.get_int("tasks-width");
|
||
|
if (this.settings.get_enum("tasks-label") !== 0)
|
||
|
buttonTaskWidth = this.tasksWidth;
|
||
|
else
|
||
|
buttonTaskWidth = (this.panelSize + 8);
|
||
|
this.newTasksContainerWidth = (this.tasksContainerWidth * (buttonTaskWidth + spaces));
|
||
|
this.boxMainTasks.set_width(this.newTasksContainerWidth);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Icon Geometry
|
||
|
iconGeometry: function() {
|
||
|
for (let i = this.tasksList.length - 1; i >= 0; i--) {
|
||
|
let [windowTask, buttonTask, signalsTask, labelTask, iconTask] = this.tasksList[i];
|
||
|
let rect = new Meta.Rectangle();
|
||
|
[rect.x, rect.y] = buttonTask.get_transformed_position();
|
||
|
[rect.width, rect.height] = buttonTask.get_transformed_size();
|
||
|
windowTask.set_icon_geometry(rect);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Icons
|
||
|
updateIcon: function() {
|
||
|
this.tasksList.forEach(
|
||
|
function(task) {
|
||
|
let [windowTask, buttonTask, signalsTask, labelTask, iconTask] = task;
|
||
|
let app = Shell.WindowTracker.get_default().get_window_app(windowTask);
|
||
|
iconTask.child = app.create_icon_texture(this.panelSize);
|
||
|
},
|
||
|
this
|
||
|
);
|
||
|
},
|
||
|
|
||
|
updateTasks: function() {
|
||
|
this.iconGeometry();
|
||
|
this.updateIcon();
|
||
|
},
|
||
|
|
||
|
//Active Tasks
|
||
|
activeTasks: function(window) {
|
||
|
let active = false;
|
||
|
let activeWorkspace = global.workspace_manager.get_active_workspace();
|
||
|
this.tasksList.forEach(
|
||
|
function(task) {
|
||
|
let [windowTask, buttonTask, signalsTask] = task;
|
||
|
let workspaceTask = windowTask.get_workspace();
|
||
|
if ((!windowTask.minimized) && (workspaceTask === activeWorkspace))
|
||
|
active = true;
|
||
|
},
|
||
|
this
|
||
|
);
|
||
|
if (active === true)
|
||
|
this.desktopView = false;
|
||
|
else
|
||
|
this.desktopView = true;
|
||
|
},
|
||
|
|
||
|
//Task Style
|
||
|
onWindowChanged: function(window, type) {
|
||
|
if (type === 0) //Focus
|
||
|
{
|
||
|
this.tasksList.forEach(
|
||
|
function(task) {
|
||
|
let [windowTask, buttonTask, signalsTask, labelTask] = task;
|
||
|
if (windowTask === window) {
|
||
|
buttonTask.set_style(this.backgroundStyleColor);
|
||
|
buttonTask.show();
|
||
|
if ((this.settings.get_enum("tasks-label") !== 0) && (this.settings.get_boolean("display-tasks-label-color"))) {
|
||
|
this.tasksLabelColor = this.settings.get_string("tasks-label-color");
|
||
|
if (this.tasksLabelColor !== "unset") {
|
||
|
this.tasksLabelStyle = 'font-size: ' + (this.panelSize - 5 + this.adjustTBLabelSize - this.adjustTBIconSize) + 'px; padding-top: ' + ((this.panelSize - 5 - (this.panelSize - 5 + this.adjustTBLabelSize - this.adjustTBIconSize)) / 2) + 'px; color: ' + this.tasksLabelColor + ';';
|
||
|
labelTask.set_style(this.tasksLabelStyle);
|
||
|
} else
|
||
|
labelTask.set_style("None");
|
||
|
} else if (this.settings.get_enum("tasks-label") !== 0) {
|
||
|
this.tasksLabelStyle = 'font-size: ' + (this.panelSize - 5 + this.adjustTBLabelSize - this.adjustTBIconSize) + 'px; padding-top: ' + ((this.panelSize - 5 - (this.panelSize - 5 + this.adjustTBLabelSize - this.adjustTBIconSize)) / 2) + 'px;';
|
||
|
labelTask.set_style(this.tasksLabelStyle);
|
||
|
}
|
||
|
} else {
|
||
|
buttonTask.set_style(this.inactiveBackgroundStyleColor);
|
||
|
if ((this.settings.get_enum("sort-tasks") === 3) || (this.settings.get_enum("sort-tasks") === 4)) {
|
||
|
let _app_name = Shell.WindowTracker.get_default().get_window_app(window).get_name();
|
||
|
let appname = Shell.WindowTracker.get_default().get_window_app(windowTask).get_name();
|
||
|
let workspaceTask = windowTask.get_workspace();
|
||
|
let activeWorkspace = global.workspace_manager.get_active_workspace();
|
||
|
if ((_app_name === appname) && ((workspaceTask === activeWorkspace) || (this.settings.get_enum("sort-tasks") === 3)))
|
||
|
buttonTask.hide();
|
||
|
}
|
||
|
if ((this.settings.get_enum("tasks-label") !== 0) && (this.settings.get_boolean("display-inactive-tasks-label-color"))) {
|
||
|
this.inactiveTasksLabelColor = this.settings.get_string("inactive-tasks-label-color");
|
||
|
if (this.inactiveTasksLabelColor !== "unset") {
|
||
|
this.inactiveTasksLabelStyle = 'font-size: ' + (this.panelSize - 5 + this.adjustTBLabelSize - this.adjustTBIconSize) + 'px; color: ' + this.inactiveTasksLabelColor + ';';
|
||
|
labelTask.set_style(this.inactiveTasksLabelStyle);
|
||
|
} else
|
||
|
labelTask.set_style("None");
|
||
|
} else if (this.settings.get_enum("tasks-label") !== 0) {
|
||
|
this.tasksLabelStyle = 'font-size: ' + (this.panelSize - 5 + this.adjustTBLabelSize - this.adjustTBIconSize) + 'px; padding-top: ' + ((this.panelSize - 5 - (this.panelSize - 5 + this.adjustTBLabelSize - this.adjustTBIconSize)) / 2) + 'px;';
|
||
|
labelTask.set_style(this.tasksLabelStyle);
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
this
|
||
|
);
|
||
|
} else if ((type === 1) && (this.settings.get_enum("tasks-label") === 1)) //Title Change
|
||
|
{
|
||
|
this.tasksList.forEach(
|
||
|
function(task) {
|
||
|
let [windowTask, buttonTask, signalsTask, labelTask] = task;
|
||
|
if (windowTask === window) {
|
||
|
labelTask.text = " " + window.get_title() + " ";
|
||
|
}
|
||
|
},
|
||
|
this
|
||
|
);
|
||
|
} else if (type === 2) //Minimized
|
||
|
{
|
||
|
this.tasksList.forEach(
|
||
|
function(task) {
|
||
|
let [windowTask, buttonTask, signalsTask, labelTask] = task;
|
||
|
if (windowTask === window) {
|
||
|
buttonTask.set_style(this.inactiveBackgroundStyleColor);
|
||
|
if ((this.settings.get_enum("tasks-label") !== 0) && (this.settings.get_boolean("display-inactive-tasks-label-color"))) {
|
||
|
this.inactiveTasksLabelColor = this.settings.get_string("inactive-tasks-label-color");
|
||
|
if (this.inactiveTasksLabelColor !== "unset") {
|
||
|
this.inactiveTasksLabelStyle = 'font-size: ' + (this.panelSize - 5 + this.adjustTBLabelSize - this.adjustTBIconSize) + 'px; color: ' + this.inactiveTasksLabelColor + ';';
|
||
|
labelTask.set_style(this.inactiveTasksLabelStyle);
|
||
|
} else
|
||
|
labelTask.set_style("None");
|
||
|
} else if (this.settings.get_enum("tasks-label") !== 0) {
|
||
|
this.tasksLabelStyle = 'font-size: ' + (this.panelSize - 5 + this.adjustTBLabelSize - this.adjustTBIconSize) + 'px; padding-top: ' + ((this.panelSize - 5 - (this.panelSize - 5 + this.adjustTBLabelSize - this.adjustTBIconSize)) / 2) + 'px;';
|
||
|
labelTask.set_style(this.tasksLabelStyle);
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
this
|
||
|
);
|
||
|
} else if ((type === 3) || (type === 4)) {
|
||
|
this.updateIcon();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Task Index
|
||
|
searchTaskInList: function(window) {
|
||
|
let index = null;
|
||
|
for (let indexTask in this.tasksList) {
|
||
|
let [windowTask, buttonTask, signalsTask] = this.tasksList[indexTask];
|
||
|
if (windowTask === window) {
|
||
|
index = indexTask;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
return index;
|
||
|
},
|
||
|
|
||
|
//Add Tasks
|
||
|
addTaskInList: function(window) {
|
||
|
let app = Shell.WindowTracker.get_default().get_window_app(window);
|
||
|
let buttonTask = null;
|
||
|
let iconTask = new St.Bin();
|
||
|
let labelTask = null;
|
||
|
if (app !== null) {
|
||
|
let appname = app.get_name();
|
||
|
//Check Blacklisted Apps
|
||
|
if (this.settings.get_boolean("blacklist-set")) {
|
||
|
let blacklist = this.settings.get_strv("blacklist");
|
||
|
if (blacklist.length > 0) {
|
||
|
for (let j = 0; j < blacklist.length; j++) {
|
||
|
let blacklistapp = blacklist[j];
|
||
|
if (appname === blacklistapp) {
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
//Tasks Label
|
||
|
if (this.settings.get_enum("tasks-label") !== 0) {
|
||
|
let buttonTaskLayout = null;
|
||
|
if (this.settings.get_boolean("bottom-panel")) {
|
||
|
buttonTaskLayout = new St.BoxLayout({
|
||
|
style_class: "tkb-task-button-bottom-label"
|
||
|
});
|
||
|
} else {
|
||
|
buttonTaskLayout = new St.BoxLayout({
|
||
|
style_class: "tkb-task-button"
|
||
|
});
|
||
|
}
|
||
|
buttonTaskLayout.add_actor(iconTask);
|
||
|
if (this.settings.get_enum("tasks-label") === 1) {
|
||
|
labelTask = new St.Label({
|
||
|
text: (" " + window.get_title() + " ")
|
||
|
});
|
||
|
} else {
|
||
|
labelTask = new St.Label({
|
||
|
text: (" " + appname + " ")
|
||
|
});
|
||
|
}
|
||
|
labelTask.set_style('font-size: ' + (this.panelSize - 5 + this.adjustTBLabelSize - this.adjustTBIconSize) + 'px; padding-top: ' + ((this.panelSize - 5 - (this.panelSize - 5 + this.adjustTBLabelSize - this.adjustTBIconSize)) / 2) + 'px;');
|
||
|
buttonTaskLayout.add_actor(labelTask);
|
||
|
buttonTask = new St.Button({
|
||
|
style_class: "tkb-task-button",
|
||
|
child: buttonTaskLayout,
|
||
|
x_align: St.Align.START
|
||
|
});
|
||
|
this.tasksWidth = this.settings.get_int("tasks-width");
|
||
|
buttonTask.set_width(this.tasksWidth);
|
||
|
} else {
|
||
|
if (this.settings.get_boolean("bottom-panel")) {
|
||
|
buttonTask = new St.Button({
|
||
|
style_class: "tkb-task-button-bottom"
|
||
|
});
|
||
|
} else {
|
||
|
buttonTask = new St.Button({
|
||
|
style_class: "tkb-task-button"
|
||
|
});
|
||
|
}
|
||
|
buttonTask.add_actor(iconTask);
|
||
|
}
|
||
|
//Signals
|
||
|
let signalsTask = [
|
||
|
buttonTask.connect("button-press-event", Lang.bind(this, this.onClickTaskButton, window)),
|
||
|
buttonTask.connect("enter-event", Lang.bind(this, this.showPreview, window)),
|
||
|
buttonTask.connect("leave-event", Lang.bind(this, this.resetPreview, window)),
|
||
|
buttonTask.connect("allocation-changed", Lang.bind(this, this.updateTasks))
|
||
|
];
|
||
|
//Display Tasks of All Workspaces
|
||
|
if (!this.settings.get_boolean("tasks-all-workspaces")) {
|
||
|
let workspace = global.workspace_manager.get_active_workspace();
|
||
|
if (!this.settings.get_boolean("tasks-all-workspaces")) {
|
||
|
buttonTask.visible = window.located_on_workspace(workspace);
|
||
|
}
|
||
|
}
|
||
|
if (window.has_focus()) {
|
||
|
buttonTask.set_style(this.backgroundStyleColor);
|
||
|
if ((this.settings.get_enum("tasks-label") !== 0) && (this.settings.get_boolean("display-tasks-label-color"))) {
|
||
|
this.tasksLabelColor = this.settings.get_string("tasks-label-color");
|
||
|
if (this.tasksLabelColor !== "unset") {
|
||
|
this.tasksLabelStyle = 'font-size: ' + (this.panelSize - 5 + this.adjustTBLabelSize - this.adjustTBIconSize) + 'px; padding-top: ' + ((this.panelSize - 5 - (this.panelSize - 5 + this.adjustTBLabelSize - this.adjustTBIconSize)) / 2) + 'px; color: ' + this.tasksLabelColor + ';';
|
||
|
labelTask.set_style(this.tasksLabelStyle);
|
||
|
} else
|
||
|
labelTask.set_style("None");
|
||
|
}
|
||
|
} else {
|
||
|
buttonTask.set_style(this.inactiveBackgroundStyleColor);
|
||
|
if ((this.settings.get_enum("tasks-label") !== 0) && (this.settings.get_boolean("display-inactive-tasks-label-color"))) {
|
||
|
this.inactiveTasksLabelColor = this.settings.get_string("inactive-tasks-label-color");
|
||
|
if (this.inactiveTasksLabelColor !== "unset") {
|
||
|
this.inactiveTasksLabelStyle = 'font-size: ' + (this.panelSize - 5 + this.adjustTBLabelSize - this.adjustTBIconSize) + 'px; color: ' + this.inactiveTasksLabelColor + ';';
|
||
|
labelTask.set_style(this.inactiveTasksLabelStyle);
|
||
|
} else {
|
||
|
labelTask.set_style("None");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
//Sort Tasks
|
||
|
let inserted = false;
|
||
|
if (this.settings.get_enum("sort-tasks") !== 0) {
|
||
|
for (let i = this.tasksList.length - 1; i >= 0; i--) {
|
||
|
let [_windowTask, _buttonTask, _signalsTask] = this.tasksList[i];
|
||
|
let _app_name = Shell.WindowTracker.get_default().get_window_app(_windowTask).get_name();
|
||
|
if (appname === _app_name) {
|
||
|
if ((this.settings.get_enum("sort-tasks") === 2) || (this.settings.get_enum("sort-tasks") === 4)) {
|
||
|
let _workspaceTask = _windowTask.get_workspace();
|
||
|
let workspaceTask = window.get_workspace();
|
||
|
if (workspaceTask !== _workspaceTask) {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
this.boxMainTasks.insert_child_above(buttonTask, _buttonTask);
|
||
|
if ((this.settings.get_enum("sort-tasks") === 3) || (this.settings.get_enum("sort-tasks") === 4)) {
|
||
|
buttonTask.hide();
|
||
|
}
|
||
|
this.tasksList.splice(i + 1, 0, [window, buttonTask, signalsTask, labelTask, iconTask]);
|
||
|
inserted = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (!inserted) {
|
||
|
this.boxMainTasks.add_child(buttonTask);
|
||
|
this.tasksList.push([window, buttonTask, signalsTask, labelTask, iconTask]);
|
||
|
}
|
||
|
this.countTasks++;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
//Remove Tasks
|
||
|
removeTaskInList: function(window) {
|
||
|
let index = this.searchTaskInList(window);
|
||
|
if (index !== null) {
|
||
|
let [windowTask, buttonTask, signalsTask] = this.tasksList[index];
|
||
|
signalsTask.forEach(
|
||
|
function(signal) {
|
||
|
buttonTask.disconnect(signal);
|
||
|
},
|
||
|
this
|
||
|
);
|
||
|
buttonTask.destroy();
|
||
|
this.tasksList.splice(index, 1);
|
||
|
this.countTasks--;
|
||
|
if (this.countTasks < 0)
|
||
|
this.countTasks = 0;
|
||
|
if (this.countTasks === 0)
|
||
|
this.cleanTasksList();
|
||
|
return true;
|
||
|
} else
|
||
|
return false;
|
||
|
},
|
||
|
|
||
|
//Reset Taskslist
|
||
|
cleanTasksList: function() {
|
||
|
for (let i = this.tasksList.length - 1; i >= 0; i--) {
|
||
|
let [windowTask, buttonTask, signalsTask] = this.tasksList[i];
|
||
|
try {
|
||
|
signalsTask.forEach(
|
||
|
function(signal) {
|
||
|
buttonTask.disconnect(signal);
|
||
|
},
|
||
|
this
|
||
|
);
|
||
|
} catch (e) {
|
||
|
// try...catch... workaround for crashing when disabling bottom panel in settings
|
||
|
}
|
||
|
buttonTask.destroy();
|
||
|
this.tasksList.splice(i, 1);
|
||
|
}
|
||
|
this.tasksList = [];
|
||
|
this.countTasks = 0;
|
||
|
},
|
||
|
|
||
|
//Preview
|
||
|
getThumbnail: function(window, size) {
|
||
|
let thumbnail = null;
|
||
|
let mutterWindow = window.get_compositor_private();
|
||
|
if (mutterWindow) {
|
||
|
let windowTexture = mutterWindow.get_texture();
|
||
|
let width, height;
|
||
|
if (windowTexture.get_size) {
|
||
|
[width, height] = windowTexture.get_size();
|
||
|
} else {
|
||
|
let preferred_size_ok;
|
||
|
[preferred_size_ok, width, height] = windowTexture.get_preferred_size();
|
||
|
}
|
||
|
let scale = Math.min(1.0, size / width, size / height);
|
||
|
thumbnail = new Clutter.Clone({
|
||
|
source: mutterWindow,
|
||
|
reactive: true,
|
||
|
width: width * scale,
|
||
|
height: height * scale
|
||
|
});
|
||
|
}
|
||
|
return thumbnail;
|
||
|
},
|
||
|
|
||
|
showPreview: function(button, pspec, window) {
|
||
|
//Switch Task on Hover
|
||
|
this.resetHover = false;
|
||
|
if (this.settings.get_boolean("hover-switch-task")) {
|
||
|
if (this.settings.get_int("hover-delay") === 0)
|
||
|
this.onHoverSwitchTask(button, window);
|
||
|
else
|
||
|
this.previewTimer2 = Mainloop.timeout_add(this.settings.get_int("hover-delay"),
|
||
|
Lang.bind(this, this.onHoverSwitchTask, button, window));
|
||
|
}
|
||
|
//Hide current preview if necessary
|
||
|
this.hidePreview();
|
||
|
this.grouped = false;
|
||
|
if ((this.settings.get_enum("display-label") !== 0) || (this.settings.get_boolean("display-thumbnail"))) {
|
||
|
if ((this.settings.get_enum("sort-tasks") === 3) || (this.settings.get_enum("sort-tasks") === 4)) {
|
||
|
let appname = Shell.WindowTracker.get_default().get_window_app(window).get_name();
|
||
|
let focuswindow = global.display.focus_window;
|
||
|
let focusappname = Shell.WindowTracker.get_default().get_window_app(focuswindow).get_name();
|
||
|
for (let i = this.tasksList.length - 1; i >= 0; i--) {
|
||
|
let [_windowTask, _buttonTask, _signalsTask] = this.tasksList[i];
|
||
|
let _app_name = Shell.WindowTracker.get_default().get_window_app(_windowTask).get_name();
|
||
|
if ((appname === _app_name) && (_windowTask !== window)) {
|
||
|
this.grouped = true;
|
||
|
if (appname === focusappname) {
|
||
|
window = global.display.focus_window;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (this.settings.get_int("preview-delay") === 0)
|
||
|
this.showPreview2(button, window);
|
||
|
else
|
||
|
this.previewTimer = Mainloop.timeout_add(this.settings.get_int("preview-delay"),
|
||
|
Lang.bind(this, this.showPreview2, button, window));
|
||
|
}
|
||
|
},
|
||
|
|
||
|
showPreview2: function(button, window) {
|
||
|
//Hide current preview if necessary
|
||
|
this.hidePreview();
|
||
|
let app = Shell.WindowTracker.get_default().get_window_app(window);
|
||
|
this.previewFontSize = this.settings.get_int("preview-font-size");
|
||
|
this.preview = new St.BoxLayout({
|
||
|
vertical: true
|
||
|
});
|
||
|
if (this.settings.get_enum("display-label") !== 0) {
|
||
|
if (this.settings.get_enum("display-label") !== 2) {
|
||
|
let labelNamePreview;
|
||
|
if (this.grouped) {
|
||
|
labelNamePreview = new St.Label({
|
||
|
text: ' ' + app.get_name() + ' (Group) '
|
||
|
});
|
||
|
} else {
|
||
|
labelNamePreview = new St.Label({
|
||
|
text: ' ' + app.get_name() + ' '
|
||
|
});
|
||
|
}
|
||
|
if ((this.settings.get_string("preview-label-color") !== 'unset') && (this.settings.get_boolean("display-preview-label-color"))) {
|
||
|
this.previewLabelColor = this.settings.get_string("preview-label-color");
|
||
|
this.labelNamePreviewStyle = "color: " + this.previewLabelColor + "; font-weight: bold; font-size: " + this.previewFontSize + "pt; text-align: center;";
|
||
|
labelNamePreview.set_style(this.labelNamePreviewStyle);
|
||
|
} else {
|
||
|
this.labelNamePreviewStyle = "color: rgba(255,255,255,1); font-weight: bold; font-size: " + this.previewFontSize + "pt; text-align: center;";
|
||
|
labelNamePreview.set_style(this.labelNamePreviewStyle);
|
||
|
}
|
||
|
this.preview.add_actor(labelNamePreview);
|
||
|
}
|
||
|
if (this.settings.get_enum("display-label") !== 1) {
|
||
|
let title = window.get_title();
|
||
|
if ((title.length > 50) && (this.settings.get_boolean("display-thumbnail")))
|
||
|
title = title.substr(0, 47) + "...";
|
||
|
let labelTitlePreview = new St.Label({
|
||
|
text: ' ' + title + ' '
|
||
|
});
|
||
|
if ((this.settings.get_string("preview-label-color") !== 'unset') && (this.settings.get_boolean("display-preview-label-color"))) {
|
||
|
this.previewLabelColor = this.settings.get_string("preview-label-color");
|
||
|
this.labelTitlePreviewStyle = "color: " + this.previewLabelColor + "; font-weight: bold; font-size: " + this.previewFontSize + "pt; text-align: center;";
|
||
|
labelTitlePreview.set_style(this.labelTitlePreviewStyle);
|
||
|
} else {
|
||
|
this.labelTitlePreviewStyle = "color: rgba(255,255,255,1.0); font-weight: bold; font-size: " + this.previewFontSize + "pt; text-align: center;";
|
||
|
labelTitlePreview.set_style(this.labelTitlePreviewStyle);
|
||
|
}
|
||
|
this.preview.add_actor(labelTitlePreview);
|
||
|
}
|
||
|
}
|
||
|
if (this.settings.get_boolean("display-thumbnail")) {
|
||
|
let thumbnail = this.getThumbnail(window, this.settings.get_int("preview-size"));
|
||
|
this.preview.add_actor(thumbnail);
|
||
|
}
|
||
|
if ((this.settings.get_string("preview-background-color") !== 'unset') && (this.settings.get_boolean("display-preview-background-color"))) {
|
||
|
this.previewBackgroundColor = this.settings.get_string("preview-background-color");
|
||
|
this.previewStyle = "background-color: " + this.previewBackgroundColor + "; padding: 5px; border-radius: 8px; -y-offset: 6px;";
|
||
|
this.preview.set_style(this.previewStyle);
|
||
|
} else {
|
||
|
this.previewStyle = "background-color: rgba(0,0,0,0.9); padding: 5px; border-radius: 8px; -y-offset: 6px;";
|
||
|
this.preview.set_style(this.previewStyle);
|
||
|
}
|
||
|
global.stage.add_actor(this.preview);
|
||
|
this.button = button;
|
||
|
this.setPreviewPosition();
|
||
|
},
|
||
|
|
||
|
showFavoritesPreview: function(buttonfavorite, favoriteapp) {
|
||
|
//Hide current preview if necessary
|
||
|
this.hidePreview();
|
||
|
this.previewFontSize = this.settings.get_int("preview-font-size");
|
||
|
this.favoritesPreview = new St.BoxLayout({
|
||
|
vertical: true
|
||
|
});
|
||
|
let favoriteappName = favoriteapp.get_name();
|
||
|
if (favoriteapp.get_description()) {
|
||
|
if (this.settings.get_enum("display-favorites-label") === 2)
|
||
|
favoriteappName = favoriteapp.get_description();
|
||
|
if (this.settings.get_enum("display-favorites-label") === 3)
|
||
|
favoriteappName += '\n' + favoriteapp.get_description();
|
||
|
}
|
||
|
let labelNamePreview = new St.Label({
|
||
|
text: favoriteappName
|
||
|
});
|
||
|
if ((this.settings.get_string("preview-label-color") !== 'unset') && (this.settings.get_boolean("display-preview-label-color"))) {
|
||
|
this.previewLabelColor = this.settings.get_string("preview-label-color");
|
||
|
this.labelNamePreviewStyle = "color: " + this.previewLabelColor + "; font-weight: bold; font-size: " + this.previewFontSize + "pt; text-align: center;";
|
||
|
labelNamePreview.set_style(this.labelNamePreviewStyle);
|
||
|
} else {
|
||
|
this.labelNamePreviewStyle = "color: rgba(255,255,255,1.0); font-weight: bold; font-size: " + this.previewFontSize + "pt; text-align: center;";
|
||
|
labelNamePreview.set_style(this.labelNamePreviewStyle);
|
||
|
}
|
||
|
this.favoritesPreview.add_actor(labelNamePreview);
|
||
|
if ((this.settings.get_string("preview-background-color") !== 'unset') && (this.settings.get_boolean("display-preview-background-color"))) {
|
||
|
this.previewBackgroundColor = this.settings.get_string("preview-background-color");
|
||
|
this.favoritesPreviewStyle = "background-color: " + this.previewBackgroundColor + "; padding: 5px; border-radius: 8px; -y-offset: 6px;";
|
||
|
this.favoritesPreview.set_style(this.favoritesPreviewStyle);
|
||
|
} else {
|
||
|
this.favoritesPreviewStyle = "background-color: rgba(0,0,0,0.9); padding: 5px; border-radius: 8px; -y-offset: 6px;";
|
||
|
this.favoritesPreview.set_style(this.favoritesPreviewStyle);
|
||
|
}
|
||
|
global.stage.add_actor(this.favoritesPreview);
|
||
|
this.button = buttonfavorite;
|
||
|
this.preview = this.favoritesPreview;
|
||
|
this.setPreviewPosition();
|
||
|
},
|
||
|
|
||
|
setPreviewPosition: function() {
|
||
|
let [stageX, stageY] = this.button.get_transformed_position();
|
||
|
let itemHeight = this.button.allocation.y2 - this.button.allocation.y1;
|
||
|
let itemWidth = this.button.allocation.x2 - this.button.allocation.x1;
|
||
|
let labelWidth = this.preview.get_width();
|
||
|
let labelHeight = this.preview.get_height();
|
||
|
let node = this.preview.get_theme_node();
|
||
|
let yOffset = node.get_length('-y-offset');
|
||
|
let y = null;
|
||
|
if ((this.settings.get_boolean("bottom-panel")) || (this.tbp))
|
||
|
y = stageY - labelHeight - yOffset;
|
||
|
else
|
||
|
y = stageY + itemHeight + yOffset;
|
||
|
let x = Math.floor(stageX + itemWidth / 2 - labelWidth / 2);
|
||
|
let posparent = this.preview.get_parent();
|
||
|
let posparentWidth = posparent.allocation.x2 - posparent.allocation.x1;
|
||
|
if (Clutter.get_default_text_direction() === Clutter.TextDirection.LTR) {
|
||
|
x = Math.min(x, posparentWidth - labelWidth - 6);
|
||
|
x = Math.max(x, 6);
|
||
|
} else {
|
||
|
x = Math.max(x, 6);
|
||
|
x = Math.min(x, posparentWidth - labelWidth - 6);
|
||
|
}
|
||
|
this.preview.set_position(x, y);
|
||
|
},
|
||
|
|
||
|
resetPreview: function(button, window) {
|
||
|
//Reset Hover
|
||
|
this.resetHover = true;
|
||
|
if (this.previewTimer2 !== null) {
|
||
|
Mainloop.source_remove(this.previewTimer2);
|
||
|
this.previewTimer2 = null;
|
||
|
}
|
||
|
this.hidePreview();
|
||
|
},
|
||
|
|
||
|
hidePreview: function() {
|
||
|
//Remove preview programmed if necessary
|
||
|
if (this.previewTimer !== null) {
|
||
|
Mainloop.source_remove(this.previewTimer);
|
||
|
this.previewTimer = null;
|
||
|
}
|
||
|
|
||
|
//Destroy Preview if displaying
|
||
|
if (this.preview !== null) {
|
||
|
this.preview.destroy();
|
||
|
this.preview = null;
|
||
|
}
|
||
|
|
||
|
//Destroy Favorites Preview if displaying
|
||
|
if (this.favoritesPreview !== null) {
|
||
|
this.favoritesPreview.destroy();
|
||
|
this.favoritesPreview = null;
|
||
|
}
|
||
|
}
|
||
|
};
|