1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2025-12-19 09:43:20 +00:00

Added multi-workspace support to privacy bar for linux

This commit is contained in:
Bryan Roe
2020-04-28 01:19:24 -07:00
parent e1cb66e81c
commit 12347a8eb4
3 changed files with 55 additions and 28 deletions

File diff suppressed because one or more lines are too long

View File

@@ -534,18 +534,25 @@ function exportEnv()
return (r); return (r);
} }
function workspaceSetup(v) function workspaceSetup(oldV)
{ {
v.once('~', function () var GM = require('_GenericMarshal');
{ Object.defineProperty(oldV, "_setup", { value: true });
this._X11.XCloseDisplay(this);
});
Object.defineProperty(v, "_setup", { value: true });
Object.defineProperty(v, "_ROOTWIN", { value: v._X11.XRootWindow(v, 0) });
Object.defineProperty(v, "_ACTIVE_DESKTOP", { value: v._X11.XInternAtom(v, require('_GenericMarshal').CreateVariable('_NET_CURRENT_DESKTOP'), 0) });
var mask = require('_GenericMarshal').CreateVariable(require('_GenericMarshal').PointerSize == 8 ? 112 : 60); var v = oldV._X11.XOpenDisplay(GM.CreateVariable(process.env.DISPLAY));
mask.Deref(require('_GenericMarshal').PointerSize == 8 ? 72 : 40, 4).toBuffer().writeUInt32LE(PropertyChangeMask); v._X11 = oldV._X11;
v.parent = oldV;
v.on('~', function ()
{
v._X11.XCloseDisplay(v);
});
Object.defineProperty(oldV, "_v2", { value: v });
Object.defineProperty(v, "_ROOTWIN", { value: v._X11.XRootWindow(v, 0) });
Object.defineProperty(v, "_ACTIVE_DESKTOP", { value: v._X11.XInternAtom(v, GM.CreateVariable('_NET_CURRENT_DESKTOP'), 0) });
var mask = GM.CreateVariable(GM.PointerSize == 8 ? 112 : 60);
mask.Deref(GM.PointerSize == 8 ? 72 : 40, 4).toBuffer().writeUInt32LE(PropertyChangeMask);
v._X11.XChangeWindowAttributes(v, v._ROOTWIN, CWEventMask, mask); v._X11.XChangeWindowAttributes(v, v._ROOTWIN, CWEventMask, mask);
v._X11.XSync(v, 0); v._X11.XSync(v, 0);
@@ -563,7 +570,7 @@ function workspaceSetup(v)
case PropertyNotify: case PropertyNotify:
if (XE.Deref(require('_GenericMarshal').PointerSize == 8 ? 40 : 20, 4).toBuffer().readUInt32LE() == this._display._ACTIVE_DESKTOP.Val) if (XE.Deref(require('_GenericMarshal').PointerSize == 8 ? 40 : 20, 4).toBuffer().readUInt32LE() == this._display._ACTIVE_DESKTOP.Val)
{ {
this._display.emit('workspaceChanged', this._display.getCurrentWorkspace()); this._display.parent.emit('workspaceChanged', this._display.parent.getCurrentWorkspace());
} }
break; break;
default: default:
@@ -594,7 +601,7 @@ function addWorkspaceHandler(v,X11)
var tail = GM.CreatePointer(); var tail = GM.CreatePointer();
var result = GM.CreatePointer(); var result = GM.CreatePointer();
this._X11.XGetWindowProperty(this, this._ROOTWIN, this._ACTIVE_DESKTOP, 0, 64, 0, AnyPropertyType, id, bits, sz, tail, result); this._X11.XGetWindowProperty(this._v2, this._v2._ROOTWIN, this._v2._ACTIVE_DESKTOP, 0, 64, 0, AnyPropertyType, id, bits, sz, tail, result);
if (sz.Deref().Val > 0) if (sz.Deref().Val > 0)
{ {
return (result.Deref().Deref(0, 4).toBuffer().readUInt32LE()); return (result.Deref().Deref(0, 4).toBuffer().readUInt32LE());

View File

@@ -195,7 +195,7 @@ function x_notifybar_check(title)
function x_notifybar(title) function x_notifybar(title)
{ {
ret = { _ObjectID: 'notifybar-desktop.X', title: title, _windows: [], _promise: require('monitor-info').getInfo() }; ret = { _ObjectID: 'notifybar-desktop.X', title: title, _windows: [], _promise: require('monitor-info').getInfo(), monitors: [], workspaces: {} };
ret._promise.notifybar = ret; ret._promise.notifybar = ret;
require('events').EventEmitter.call(ret, true) require('events').EventEmitter.call(ret, true)
@@ -204,10 +204,8 @@ function x_notifybar(title)
{ {
}); });
ret._promise.then(function (m) ret._promise.createBars = function (m)
{ {
var offset;
var barWidth, monWidth, offset, barHeight, monHeight;
for (var i in m) for (var i in m)
{ {
monWidth = (m[i].right - m[i].left); monWidth = (m[i].right - m[i].left);
@@ -266,6 +264,29 @@ function x_notifybar(title)
} }
}); });
} }
};
ret._promise.then(function (m)
{
var offset;
var barWidth, monWidth, offset, barHeight, monHeight;
this.notifybar.monitors = m;
if (m.length > 0)
{
var ws = m[0].display.getCurrentWorkspace();
this.notifybar.workspaces[ws] = true;
this.createBars(m);
m[0].display._notifyBar = this.notifybar;
m[0].display.on('workspaceChanged', function (w)
{
if(!this._notifyBar.workspaces[w])
{
this._notifyBar.workspaces[w] = true;
this._notifyBar._promise.createBars(this._notifyBar.monitors);
}
});
}
}); });
return (ret); return (ret);
} }