diff --git a/src/vs/workbench/browser/parts/titlebar/media/titlebarpart.css b/src/vs/workbench/browser/parts/titlebar/media/titlebarpart.css index 47e5b41ca5120439b5849325e5521edf946814cf..5cb8cff834a90941f9f3437a87f108216281a5aa 100644 --- a/src/vs/workbench/browser/parts/titlebar/media/titlebarpart.css +++ b/src/vs/workbench/browser/parts/titlebar/media/titlebarpart.css @@ -31,14 +31,12 @@ zoom: 1; /* prevent zooming */ } -.titlebar-style-custom .monaco-workbench.fullscreen .quick-open-widget, -.titlebar-style-custom .global-message-list { +.titlebar-style-custom .monaco-workbench.fullscreen .quick-open-widget { top: 0; } -.titlebar-style-custom .monaco-workbench .quick-open-widget, -.titlebar-style-custom .global-message-list { - top: 22px; /* push down quick open and messages when we have a custom title bar */ +.titlebar-style-custom .monaco-workbench .quick-open-widget { + top: 22px; /* push down quick open when we have a custom title bar */ } /* Theming */ diff --git a/src/vs/workbench/services/message/browser/media/messageList.css b/src/vs/workbench/services/message/browser/media/messageList.css index 6a675f91f00b660f7ccfd50d10c9537dd2bf32ba..8ee742da741fca994a25d0c31fcc4f1cf22cfc68 100644 --- a/src/vs/workbench/services/message/browser/media/messageList.css +++ b/src/vs/workbench/services/message/browser/media/messageList.css @@ -6,7 +6,6 @@ .global-message-list { font-size: 12px; position: absolute; - top: 0; z-index: 300; color: #eee; list-style-type: none; diff --git a/src/vs/workbench/services/message/browser/messageList.ts b/src/vs/workbench/services/message/browser/messageList.ts index 6980f64d319bb4342e289f081e58d4ca479c0f86..7b31f7223968c92c9a15ac2c47d3b1084496ea68 100644 --- a/src/vs/workbench/services/message/browser/messageList.ts +++ b/src/vs/workbench/services/message/browser/messageList.ts @@ -10,6 +10,7 @@ import nls = require('vs/nls'); import { TPromise } from 'vs/base/common/winjs.base'; import { Builder, $ } from 'vs/base/browser/builder'; import DOM = require('vs/base/browser/dom'); +import * as browser from 'vs/base/browser/browser'; import { toErrorMessage } from 'vs/base/common/errorMessage'; import aria = require('vs/base/browser/ui/aria/aria'); import types = require('vs/base/common/types'); @@ -67,8 +68,6 @@ export class MessageList { private _onMessagesShowing: Emitter; private _onMessagesCleared: Emitter; - private initialTopPosition: number; - constructor(container: HTMLElement, usageLogger?: IUsageLogger, options: IMessageListOptions = { purgeInterval: MessageList.DEFAULT_MESSAGE_PURGER_INTERVAL, maxMessages: MessageList.DEFAULT_MAX_MESSAGES, maxMessageLength: MessageList.DEFAULT_MAX_MESSAGE_LENGTH }) { this.messages = []; this.messageListPurger = null; @@ -78,6 +77,12 @@ export class MessageList { this._onMessagesShowing = new Emitter(); this._onMessagesCleared = new Emitter(); + + this.registerListeners(); + } + + private registerListeners(): void { + browser.onDidChangeFullscreen(() => this.positionMessageList()); } public get onMessagesShowing(): Event { @@ -171,7 +176,6 @@ export class MessageList { // Lazily create, otherwise clear old if (!this.messageListContainer) { this.messageListContainer = $('.global-message-list').appendTo(container); - this.initialTopPosition = parseInt(this.messageListContainer.getComputedStyle().getPropertyValue('top'), 10) || 0; } else { $(this.messageListContainer).empty(); $(this.messageListContainer).removeClass('transition'); @@ -199,12 +203,21 @@ export class MessageList { if (animate) { setTimeout(() => { $(this.messageListContainer).addClass('transition'); - $(this.messageListContainer).style('top', `${this.initialTopPosition}px`); + this.positionMessageList(); }, 50 /* Need this delay to reliably get the animation on some browsers */); } }); } + private positionMessageList(): void { + let position = 0; + if (!browser.isFullscreen() && DOM.hasClass(this.container, 'titlebar-style-custom')) { + position = 22 / browser.getZoomFactor(); // adjust the position based on title bar size and zoom factor + } + + $(this.messageListContainer).style('top', `${position}px`); + } + private renderMessage(message: IMessageEntry, container: Builder, total: number, delta: number): void { container.li({ class: 'message-list-entry message-list-entry-with-action' }, (li) => { diff --git a/src/vs/workbench/services/message/electron-browser/messageService.ts b/src/vs/workbench/services/message/electron-browser/messageService.ts index 676204fe1d46ae1a85a9f41f26845f3532fcbbde..0c930127383efccfdda21c3c132c3b4e72942308 100644 --- a/src/vs/workbench/services/message/electron-browser/messageService.ts +++ b/src/vs/workbench/services/message/electron-browser/messageService.ts @@ -54,7 +54,7 @@ export class MessageService extends WorkbenchMessageService implements IChoiceSe return result === 0 ? true : false; } - choose(severity: Severity, message: string, options: string[], modal: boolean = false): TPromise { + public choose(severity: Severity, message: string, options: string[], modal: boolean = false): TPromise { if (modal) { const type: 'none' | 'info' | 'error' | 'question' | 'warning' = severity === Severity.Info ? 'question' : severity === Severity.Error ? 'error' : severity === Severity.Warning ? 'warning' : 'none'; return TPromise.wrap(this.showMessageBox({ message, buttons: options, type }));