(Hopefully) fix #17 and #18.

master
Jens Lody 8 years ago
parent 0a4d0e7a1e
commit 6ad19f0a82
  1. 70
      src/extension.js

@ -46,6 +46,7 @@ const Mainloop = imports.mainloop;
const Me = ExtensionUtils.getCurrentExtension(); const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience; const Convenience = Me.imports.convenience;
const St = imports.gi.St; const St = imports.gi.St;
const Meta = imports.gi.Meta;
const Gettext = imports.gettext.domain('gnome-shell-extension-panel-osd'); const Gettext = imports.gettext.domain('gnome-shell-extension-panel-osd');
const _ = Gettext.gettext; const _ = Gettext.gettext;
@ -91,6 +92,13 @@ const State = {
HIDING: 3 HIDING: 3
}; };
let _availablePrimaryRect = new Meta.Rectangle({
x: 0,
y: 0,
width: 0,
height: 0
})
function init() { function init() {
Convenience.initTranslations('gnome-shell-extension-panel-osd'); Convenience.initTranslations('gnome-shell-extension-panel-osd');
} }
@ -169,6 +177,39 @@ let setTestNotification = function(v) {
loadConfig(); loadConfig();
Settings.set_boolean(PANEL_OSD_TEST_NOTIFICATION, v); Settings.set_boolean(PANEL_OSD_TEST_NOTIFICATION, v);
}; };
let updateAvailablePrimaryRect = function() {
let monitor=Main.layoutManager.monitors[0];
_availablePrimaryRect.x=monitor.x;
_availablePrimaryRect.y=monitor.y;
_availablePrimaryRect.width=monitor.width;
_availablePrimaryRect.height=monitor.height;
log(new Error().fileName+':'+new Error().lineNumber+' => panel(x, y, width, height) = ('+panel.x+','+panel.y+','+panel.width+','+panel.height+')');
let panelRect = new Meta.Rectangle({ x: panel.x,
y: panel.y,
width: panel.width,
height: panel.height });
let [panelIntersects, rect] = _availablePrimaryRect.intersect(panelRect);
if (panelIntersects)
{
if (monitor.width == rect.width)
{
_availablePrimaryRect.height = monitor.height - rect.height;
if (monitor.y == rect.y)
_availablePrimaryRect.y = rect.height;
}
if (monitor.height == rect.height)
{
_availablePrimaryRect.width = monitor.width - rect.width;
if (monitor.x == rect.x)
_availablePrimaryRect.x = rect.width;
}
}
};
/* /*
* Copied from MessageTray._showNotification() * Copied from MessageTray._showNotification()
* *
@ -203,7 +244,7 @@ let extensionShowNotification = function() {
this._bannerBin.opacity = 0; this._bannerBin.opacity = 0;
if (getY_position() < 50) if (getY_position() < 50)
this._bannerBin.y = Main.layoutManager.bottomMonitor.y + Main.layoutManager.bottomMonitor.height; this._bannerBin.y = Main.layoutManager.monitors[0].height;
else else
this._bannerBin.y = -this._banner.actor.height; this._bannerBin.y = -this._banner.actor.height;
@ -223,7 +264,7 @@ let extensionShowNotification = function() {
if (getY_position() < 50) if (getY_position() < 50)
this._notificationWidget.y = this.actor.height; this._notificationWidget.y = this.actor.height;
else else
this._notificationWidget.y = -(Main.layoutManager.bottomMonitor.y + Main.layoutManager.bottomMonitor.height); this._notificationWidget.y = -(Main.layoutManager.monitors[0].y + Main.layoutManager.monitors[0].height);
// JRL changes end // JRL changes end
@ -264,7 +305,7 @@ let extensionHideNotification = function(animate) {
let yPos; let yPos;
if (versionAtLeast('3.16', Config.PACKAGE_VERSION)) { if (versionAtLeast('3.16', Config.PACKAGE_VERSION)) {
if (getY_position() < 50) if (getY_position() < 50)
yPos = Main.layoutManager.bottomMonitor.y + Main.layoutManager.bottomMonitor.height; yPos = Main.layoutManager.monitors[0].y + Main.layoutManager.monitors[0].height;
else else
yPos = -this._bannerBin.height; yPos = -this._bannerBin.height;
@ -287,7 +328,7 @@ let extensionHideNotification = function(animate) {
if (getY_position() < 50) if (getY_position() < 50)
yPos = this.actor.height; yPos = this.actor.height;
else else
yPos = -(Main.layoutManager.bottomMonitor.y + Main.layoutManager.bottomMonitor.height); yPos = -(Main.layoutManager.monitors[0].y + Main.layoutManager.monitors[0].height);
// JRL changes end // JRL changes end
if (this._notificationClickedId) { if (this._notificationClickedId) {
this._notification.disconnect(this._notificationClickedId); this._notification.disconnect(this._notificationClickedId);
@ -425,18 +466,11 @@ let extensionUpdateShowingNotification = function() {
// "hide top panel" keeps the height and just moves the panel out of the visible area, so using // "hide top panel" keeps the height and just moves the panel out of the visible area, so using
// the panels-height is not enough. // the panels-height is not enough.
let yPos; let yPos;
updateAvailablePrimaryRect();
if (versionAtLeast('3.16', Config.PACKAGE_VERSION)) { if (versionAtLeast('3.16', Config.PACKAGE_VERSION)) {
let yTop = Main.layoutManager.bottomMonitor.y
if (Main.layoutManager.bottomMonitor == Main.layoutManager.primaryMonitor)
yTop += (panel.y + panel.height);
let yBottom = theNotification.height;
yPos = (Main.layoutManager.bottomMonitor.height - yTop - yBottom) * (100-getY_position()) / 100; yPos = (_availablePrimaryRect.height - theNotification.height) * (100-getY_position()) / 100;
if (yPos > (Main.layoutManager.bottomMonitor.height - theNotification.height))
yPos = Main.layoutManager.bottomMonitor.height - theNotification.height;
}else }else
{ {
let yTop = -(Main.layoutManager.bottomMonitor.y + Main.layoutManager.bottomMonitor.height); let yTop = -(Main.layoutManager.bottomMonitor.y + Main.layoutManager.bottomMonitor.height);
@ -449,7 +483,7 @@ let extensionUpdateShowingNotification = function() {
yPos = (yTop - yBottom) * getY_position() / 100 + yBottom; yPos = (yTop - yBottom) * getY_position() / 100 + yBottom;
// //
} }
theNotification.x = (Main.layoutManager.bottomMonitor.width - theNotification.width) * (getX_position() - 50) / 50; theNotification.x = _availablePrimaryRect.x + ((_availablePrimaryRect.width - theNotification.width) * (getX_position() - 50) / 50);
// JRL changes end // JRL changes end
// We tween all notifications to full opacity. This ensures that both new notifications and // We tween all notifications to full opacity. This ensures that both new notifications and
// notifications that might have been in the process of hiding get full opacity. // notifications that might have been in the process of hiding get full opacity.
@ -502,11 +536,11 @@ let extensionUpdateShowingNotification = function() {
let extensiononNotificationExpanded = function() { let extensiononNotificationExpanded = function() {
// JRL changes begin // JRL changes begin
//let expandedY = - this._notificationWidget.height; //let expandedY = - this._notificationWidget.height;
let yTop = -(Main.layoutManager.bottomMonitor.y + Main.layoutManager.bottomMonitor.height); let yTop = -(Main.layoutManager.monitors[0].y + Main.layoutManager.monitors[0].height);
if (Main.layoutManager.bottomMonitor == Main.layoutManager.primaryMonitor) if (Main.layoutManager.monitors[0] == Main.layoutManager.primaryMonitor)
yTop += (panel.y + panel.height); yTop += (panel.y + panel.height);
if (yTop < (-Main.layoutManager.bottomMonitor.height)) if (yTop < (-Main.layoutManager.monitors[0].height))
yTop = -Main.layoutManager.bottomMonitor.height; yTop = -Main.layoutManager.monitors[0].height;
let yBottom = -this._notificationWidget.height; let yBottom = -this._notificationWidget.height;
let expandedY = (yTop - yBottom) * getY_position() / 100 + yBottom; let expandedY = (yTop - yBottom) * getY_position() / 100 + yBottom;

Loading…
Cancel
Save