diff --git a/js/ui/altTab.js b/js/ui/altTab.js index 97dddce5b..d0c3713cf 100644 --- a/js/ui/altTab.js +++ b/js/ui/altTab.js @@ -502,7 +502,8 @@ var CyclerPopup = new Lang.Class({ _finish() { let window = this._items[this._selectedIndex]; let ws = window.get_workspace(); - let activeWs = global.screen.get_active_workspace(); + let workspaceManager = global.workspace_manager; + let activeWs = workspaceManager.get_active_workspace(); if (window.minimized) { Main.wm.skipNextEffect(window.get_compositor_private()); @@ -572,7 +573,14 @@ var WindowSwitcherPopup = new Lang.Class({ }, _getWindowList() { - let workspace = this._settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace() : null; + let workspace = null; + + if (this._settings.get_boolean('current-workspace-only')) { + let workspaceManager = global.workspace_manager; + + workspace = workspaceManager.get_active_workspace(); + } + return getWindows(workspace); }, @@ -620,7 +628,14 @@ var WindowCyclerPopup = new Lang.Class({ }, _getWindows() { - let workspace = this._settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace() : null; + let workspace = null; + + if (this._settings.get_boolean('current-workspace-only')) { + let workspaceManager = global.workspace_manager; + + workspace = workspaceManager.get_active_workspace(); + } + return getWindows(workspace); }, @@ -669,8 +684,14 @@ var AppSwitcher = new Lang.Class({ let windowTracker = Shell.WindowTracker.get_default(); let settings = new Gio.Settings({ schema_id: 'org.gnome.shell.app-switcher' }); - let workspace = settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace() - : null; + + let workspace = null; + if (settings.get_boolean('current-workspace-only')) { + let workspaceManager = global.workspace_manager; + + workspace = workspaceManager.get_active_workspace(); + } + let allWindows = global.display.get_tab_list(Meta.TabList.NORMAL, workspace); // Construct the AppIcons, add to the popup diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index 2835c2aae..785b9f764 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -1862,7 +1862,8 @@ var AppIconMenu = new Lang.Class({ // Display the app windows menu items and the separator between windows // of the current desktop and other windows. - let activeWorkspace = global.screen.get_active_workspace(); + let workspaceManager = global.workspace_manager; + let activeWorkspace = workspaceManager.get_active_workspace(); let separatorShown = windows.length > 0 && windows[0].get_workspace() != activeWorkspace; for (let i = 0; i < windows.length; i++) { diff --git a/js/ui/background.js b/js/ui/background.js index b24f82536..941b28903 100644 --- a/js/ui/background.js +++ b/js/ui/background.js @@ -240,7 +240,7 @@ var Background = new Lang.Class({ file: null, style: null }); - this.background = new Meta.Background({ meta_screen: global.screen }); + this.background = new Meta.Background({ meta_display: global.display }); this.background._delegate = this; this._settings = params.settings; @@ -499,12 +499,12 @@ var SystemBackground = new Lang.Class({ let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/noise-texture.png'); if (_systemBackground == null) { - _systemBackground = new Meta.Background({ meta_screen: global.screen }); + _systemBackground = new Meta.Background({ meta_display: global.display }); _systemBackground.set_color(DEFAULT_BACKGROUND_COLOR); _systemBackground.set_file(file, GDesktopEnums.BackgroundStyle.WALLPAPER); } - this.actor = new Meta.BackgroundActor({ meta_screen: global.screen, + this.actor = new Meta.BackgroundActor({ meta_display: global.display, monitor: 0, background: _systemBackground }); @@ -538,8 +538,10 @@ var BackgroundSource = new Lang.Class({ this._settings = new Gio.Settings({ schema_id: settingsSchema }); this._backgrounds = []; - this._monitorsChangedId = global.screen.connect('monitors-changed', - this._onMonitorsChanged.bind(this)); + let monitorManager = Meta.MonitorManager.get(); + this._monitorsChangedId = + monitorManager.connect('monitors-changed', + this._onMonitorsChanged.bind(this)); }, _onMonitorsChanged() { @@ -604,7 +606,8 @@ var BackgroundSource = new Lang.Class({ }, destroy() { - global.screen.disconnect(this._monitorsChangedId); + let monitorManager = Meta.MonitorManager.get(); + monitorManager.disconnect(this._monitorsChangedId); for (let monitorIndex in this._backgrounds) { let background = this._backgrounds[monitorIndex]; @@ -751,7 +754,7 @@ var BackgroundManager = new Lang.Class({ _createBackgroundActor() { let background = this._backgroundSource.getBackground(this._monitorIndex); - let backgroundActor = new Meta.BackgroundActor({ meta_screen: global.screen, + let backgroundActor = new Meta.BackgroundActor({ meta_display: global.display, monitor: this._monitorIndex, background: background.background, vignette: this._vignette, diff --git a/js/ui/ctrlAltTab.js b/js/ui/ctrlAltTab.js index 673819c52..1ecd2d1f5 100644 --- a/js/ui/ctrlAltTab.js +++ b/js/ui/ctrlAltTab.js @@ -85,9 +85,11 @@ var CtrlAltTabManager = new Lang.Class({ // And add the windows metacity would show in its Ctrl-Alt-Tab list if (Main.sessionMode.hasWindows && !Main.overview.visible) { - let screen = global.screen; - let display = screen.get_display(); - let windows = display.get_tab_list(Meta.TabList.DOCKS, screen.get_active_workspace ()); + let display = global.display; + let workspaceManager = global.workspace_manager; + let activeWorkspace = workspaceManager.get_active_workspace(); + let windows = display.get_tab_list(Meta.TabList.DOCKS, + activeWorkspace); let windowTracker = Shell.WindowTracker.get_default(); let textureCache = St.TextureCache.get_default(); for (let i = 0; i < windows.length; i++) { @@ -131,7 +133,7 @@ var CtrlAltTabManager = new Lang.Class({ }, _focusWindows(timestamp) { - global.screen.focus_default_window(timestamp); + global.display.focus_default_window(timestamp); } }); diff --git a/js/ui/dnd.js b/js/ui/dnd.js index a38607c24..634a7d6d7 100644 --- a/js/ui/dnd.js +++ b/js/ui/dnd.js @@ -280,7 +280,7 @@ var _Draggable = new Lang.Class({ this._touchSequence = sequence; this._grabEvents(); - global.screen.set_cursor(Meta.Cursor.DND_IN_DRAG); + global.display.set_cursor(Meta.Cursor.DND_IN_DRAG); this._dragX = this._dragStartX = stageX; this._dragY = this._dragStartY = stageY; @@ -412,7 +412,7 @@ var _Draggable = new Lang.Class({ if (motionFunc) { let result = motionFunc(dragEvent); if (result != DragMotionResult.CONTINUE) { - global.screen.set_cursor(DRAG_CURSOR_MAP[result]); + global.display.set_cursor(DRAG_CURSOR_MAP[result]); return GLib.SOURCE_REMOVE; } } @@ -430,13 +430,13 @@ var _Draggable = new Lang.Class({ targY, 0); if (result != DragMotionResult.CONTINUE) { - global.screen.set_cursor(DRAG_CURSOR_MAP[result]); + global.display.set_cursor(DRAG_CURSOR_MAP[result]); return GLib.SOURCE_REMOVE; } } target = target.get_parent(); } - global.screen.set_cursor(Meta.Cursor.DND_IN_DRAG); + global.display.set_cursor(Meta.Cursor.DND_IN_DRAG); return GLib.SOURCE_REMOVE; }, @@ -509,7 +509,7 @@ var _Draggable = new Lang.Class({ } this._dragInProgress = false; - global.screen.set_cursor(Meta.Cursor.DEFAULT); + global.display.set_cursor(Meta.Cursor.DEFAULT); this.emit('drag-end', event.get_time(), true); this._dragComplete(); return true; @@ -561,7 +561,7 @@ var _Draggable = new Lang.Class({ let [snapBackX, snapBackY, snapBackScale] = this._getRestoreLocation(); if (this._actorDestroyed) { - global.screen.set_cursor(Meta.Cursor.DEFAULT); + global.display.set_cursor(Meta.Cursor.DEFAULT); if (!this._buttonDown) this._dragComplete(); this.emit('drag-end', eventTime, false); @@ -620,7 +620,7 @@ var _Draggable = new Lang.Class({ if (!this._buttonDown) this._dragComplete(); - global.screen.set_cursor(Meta.Cursor.DEFAULT); + global.display.set_cursor(Meta.Cursor.DEFAULT); }, _onAnimationComplete(dragActor, eventTime) { diff --git a/js/ui/edgeDragAction.js b/js/ui/edgeDragAction.js index 6cfeffcf0..d49aa69d9 100644 --- a/js/ui/edgeDragAction.js +++ b/js/ui/edgeDragAction.js @@ -27,9 +27,9 @@ var EdgeDragAction = new Lang.Class({ _getMonitorRect(x, y) { let rect = new Meta.Rectangle({ x: x - 1, y: y - 1, width: 1, height: 1 }); - let monitorIndex = global.screen.get_monitor_index_for_rect(rect); + let monitorIndex = global.display.get_monitor_index_for_rect(rect); - return global.screen.get_monitor_geometry(monitorIndex); + return global.display.get_monitor_geometry(monitorIndex); }, vfunc_gesture_prepare(action, actor) { diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js index 3087cefa5..8b1f02177 100644 --- a/js/ui/keyboard.js +++ b/js/ui/keyboard.js @@ -568,7 +568,7 @@ var Keyboard = new Lang.Class({ this._updateCaretPositionId = GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE, () => { this._updateCaretPositionId = 0; - let currentWindow = global.screen.get_display().focus_window; + let currentWindow = global.display.focus_window; if (!currentWindow) { this.setCursorLocation(null); return GLib.SOURCE_REMOVE; @@ -1131,7 +1131,7 @@ var Keyboard = new Lang.Class({ return; if (this._oskFocusWindow) { - let display = global.screen.get_display(); + let display = global.display; if (display.get_grab_op() == Meta.GrabOp.NONE || display.get_focus_window() != this._oskFocusWindow) diff --git a/js/ui/layout.js b/js/ui/layout.js index dcffe479c..210fb667a 100644 --- a/js/ui/layout.js +++ b/js/ui/layout.js @@ -109,7 +109,7 @@ var MonitorConstraint = new Lang.Class({ if (!this._workareasChangedId) { this._workareasChangedId = - global.screen.connect('workareas-changed', () => { + global.display.connect('workareas-changed', () => { if (this._workArea) this.actor.queue_relayout(); }); @@ -120,7 +120,7 @@ var MonitorConstraint = new Lang.Class({ this._monitorsChangedId = 0; if (this._workareasChangedId) - global.screen.disconnect(this._workareasChangedId); + global.display.disconnect(this._workareasChangedId); this._workareasChangedId = 0; } @@ -142,7 +142,8 @@ var MonitorConstraint = new Lang.Class({ let rect; if (this._workArea) { - let ws = global.screen.get_workspace_by_index(0); + let workspaceManager = global.workspace_manager; + let ws = workspaceManager.get_workspace_by_index(0); rect = ws.get_work_area_for_monitor(index); } else { rect = Main.layoutManager.monitors[index]; @@ -164,7 +165,7 @@ var Monitor = new Lang.Class({ }, get inFullscreen() { - return global.screen.get_monitor_in_fullscreen(this.index); + return global.display.get_monitor_in_fullscreen(this.index); } }) @@ -259,7 +260,7 @@ var LayoutManager = new Lang.Class({ global.stage.remove_actor(global.top_window_group); this.uiGroup.add_actor(global.top_window_group); - let feedbackGroup = Meta.get_feedback_group_for_screen(global.screen); + let feedbackGroup = Meta.get_feedback_group_for_display(global.display); global.stage.remove_actor(feedbackGroup); this.uiGroup.add_actor(feedbackGroup); @@ -269,14 +270,19 @@ var LayoutManager = new Lang.Class({ this._bgManagers = []; // Need to update struts on new workspaces when they are added - global.screen.connect('notify::n-workspaces', - this._queueUpdateRegions.bind(this)); - global.screen.connect('restacked', - this._windowsRestacked.bind(this)); - global.screen.connect('monitors-changed', - this._monitorsChanged.bind(this)); - global.screen.connect('in-fullscreen-changed', - this._updateFullscreen.bind(this)); + let workspaceManager = global.workspace_manager; + workspaceManager.connect('notify::n-workspaces', + this._queueUpdateRegions.bind(this)); + + let display = global.display; + display.connect('restacked', + this._windowsRestacked.bind(this)); + display.connect('in-fullscreen-changed', + this._updateFullscreen.bind(this)); + + let monitorManager = Meta.MonitorManager.get(); + monitorManager.connect('monitors-changed', + this._monitorsChanged.bind(this)); this._monitorsChanged(); // NVIDIA drivers don't preserve FBO contents across @@ -319,12 +325,12 @@ var LayoutManager = new Lang.Class({ }, _updateMonitors() { - let screen = global.screen; + let display = global.display; this.monitors = []; - let nMonitors = screen.get_n_monitors(); + let nMonitors = display.get_n_monitors(); for (let i = 0; i < nMonitors; i++) - this.monitors.push(new Monitor(i, screen.get_monitor_geometry(i))); + this.monitors.push(new Monitor(i, display.get_monitor_geometry(i))); if (nMonitors == 0) { this.primaryIndex = this.bottomIndex = -1; @@ -333,7 +339,7 @@ var LayoutManager = new Lang.Class({ } else { // If there are monitors below the primary, then we need // to split primary from bottom. - this.primaryIndex = this.bottomIndex = screen.get_primary_monitor(); + this.primaryIndex = this.bottomIndex = display.get_primary_monitor(); for (let i = 0; i < this.monitors.length; i++) { let monitor = this.monitors[i]; if (this._isAboveOrBelowPrimary(monitor)) { @@ -538,7 +544,7 @@ var LayoutManager = new Lang.Class({ }, get currentMonitor() { - let index = global.screen.get_current_monitor(); + let index = global.display.get_current_monitor(); return this.monitors[index]; }, @@ -911,7 +917,8 @@ var LayoutManager = new Lang.Class({ getWorkAreaForMonitor(monitorIndex) { // Assume that all workspaces will have the same // struts and pick the first one. - let ws = global.screen.get_workspace_by_index(0); + let workspaceManager = global.workspace_manager; + let ws = workspaceManager.get_workspace_by_index(0); return ws.get_work_area_for_monitor(monitorIndex); }, @@ -921,7 +928,7 @@ var LayoutManager = new Lang.Class({ let [x, y] = actor.get_transformed_position(); let [w, h] = actor.get_transformed_size(); let rect = new Meta.Rectangle({ x: x, y: y, width: w, height: h }); - return global.screen.get_monitor_index_for_rect(rect); + return global.display.get_monitor_index_for_rect(rect); }, findMonitorForActor(actor) { @@ -1054,9 +1061,9 @@ var LayoutManager = new Lang.Class({ global.set_stage_input_region(rects); this._isPopupWindowVisible = isPopupMenuVisible; - let screen = global.screen; - for (let w = 0; w < screen.n_workspaces; w++) { - let workspace = screen.get_workspace_by_index(w); + let workspaceManager = global.workspace_manager; + for (let w = 0; w < workspaceManager.n_workspaces; w++) { + let workspace = workspaceManager.get_workspace_by_index(w); workspace.set_builtin_struts(struts); } diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js index 3103630ca..11f00088d 100644 --- a/js/ui/magnifier.js +++ b/js/ui/magnifier.js @@ -61,7 +61,7 @@ var Magnifier = new Lang.Class({ this._zoomRegions = []; // Create small clutter tree for the magnified mouse. - let cursorTracker = Meta.CursorTracker.get_for_screen(global.screen); + let cursorTracker = Meta.CursorTracker.get_for_display(global.display); this._mouseSprite = new Clutter.Texture(); Shell.util_cursor_tracker_to_clutter(cursorTracker, this._mouseSprite); this._cursorRoot = new Clutter.Actor(); @@ -116,10 +116,10 @@ var Magnifier = new Lang.Class({ if (isActive != activate) { if (activate) { - Meta.disable_unredirect_for_screen(global.screen); + Meta.disable_unredirect_for_display(global.display); this.startTrackingMouse(); } else { - Meta.enable_unredirect_for_screen(global.screen); + Meta.enable_unredirect_for_display(global.display); this.stopTrackingMouse(); } } diff --git a/js/ui/main.js b/js/ui/main.js index d86cf9e81..e107de744 100644 --- a/js/ui/main.js +++ b/js/ui/main.js @@ -429,7 +429,7 @@ function pushModal(actor, params) { log('pushModal: invocation of begin_modal failed'); return false; } - Meta.disable_unredirect_for_screen(global.screen); + Meta.disable_unredirect_for_display(global.display); } modalCount += 1; @@ -528,7 +528,7 @@ function popModal(actor, timestamp) { layoutManager.modalEnded(); global.end_modal(timestamp); - Meta.enable_unredirect_for_screen(global.screen); + Meta.enable_unredirect_for_display(global.display); actionMode = Shell.ActionMode.NORMAL; } @@ -556,14 +556,15 @@ function openRunDialog() { * and switching out of the overview if it's currently active */ function activateWindow(window, time, workspaceNum) { - let activeWorkspaceNum = global.screen.get_active_workspace_index(); + let workspaceManager = global.workspace_manager; + let activeWorkspaceNum = workspaceManager.get_active_workspace_index(); let windowWorkspaceNum = (workspaceNum !== undefined) ? workspaceNum : window.get_workspace().index(); if (!time) time = global.get_current_time(); if (windowWorkspaceNum != activeWorkspaceNum) { - let workspace = global.screen.get_workspace_by_index(windowWorkspaceNum); + let workspace = workspaceManager.get_workspace_by_index(windowWorkspaceNum); workspace.activate_with_focus(window, time); } else { window.activate(time); diff --git a/js/ui/messageList.js b/js/ui/messageList.js index 6ba5be858..3b3c2b6df 100644 --- a/js/ui/messageList.js +++ b/js/ui/messageList.js @@ -96,10 +96,10 @@ var URLHighlighter = new Lang.Class({ let urlId = this._findUrlAtPos(event); if (urlId != -1 && !this._cursorChanged) { - global.screen.set_cursor(Meta.Cursor.POINTING_HAND); + global.display.set_cursor(Meta.Cursor.POINTING_HAND); this._cursorChanged = true; } else if (urlId == -1) { - global.screen.set_cursor(Meta.Cursor.DEFAULT); + global.display.set_cursor(Meta.Cursor.DEFAULT); this._cursorChanged = false; } return Clutter.EVENT_PROPAGATE; @@ -110,7 +110,7 @@ var URLHighlighter = new Lang.Class({ if (this._cursorChanged) { this._cursorChanged = false; - global.screen.set_cursor(Meta.Cursor.DEFAULT); + global.display.set_cursor(Meta.Cursor.DEFAULT); } return Clutter.EVENT_PROPAGATE; }); diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index 463d40ecf..75740c6c0 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -917,7 +917,7 @@ var MessageTray = new Lang.Class({ Main.layoutManager.addChrome(this.actor, { affectsInputRegion: false }); Main.layoutManager.trackChrome(this._bannerBin, { affectsInputRegion: true }); - global.screen.connect('in-fullscreen-changed', this._updateState.bind(this)); + global.display.connect('in-fullscreen-changed', this._updateState.bind(this)); Main.sessionMode.connect('updated', this._sessionUpdated.bind(this)); diff --git a/js/ui/modalDialog.js b/js/ui/modalDialog.js index 19c5eda3a..aff894fd5 100644 --- a/js/ui/modalDialog.js +++ b/js/ui/modalDialog.js @@ -116,7 +116,7 @@ var ModalDialog = new Lang.Class({ if (onPrimary) this._monitorConstraint.primary = true; else - this._monitorConstraint.index = global.screen.get_current_monitor(); + this._monitorConstraint.index = global.display.get_current_monitor(); this.state = State.OPENING; diff --git a/js/ui/osdMonitorLabeler.js b/js/ui/osdMonitorLabeler.js index 961844f1e..9abd6ec83 100644 --- a/js/ui/osdMonitorLabeler.js +++ b/js/ui/osdMonitorLabeler.js @@ -32,7 +32,7 @@ var OsdMonitorLabel = new Lang.Class({ Main.uiGroup.set_child_above_sibling(this._actor, null); this._position(); - Meta.disable_unredirect_for_screen(global.screen); + Meta.disable_unredirect_for_display(global.display); }, _position() { @@ -48,7 +48,7 @@ var OsdMonitorLabel = new Lang.Class({ destroy() { this._actor.destroy(); - Meta.enable_unredirect_for_screen(global.screen); + Meta.enable_unredirect_for_display(global.display); } }); diff --git a/js/ui/osdWindow.js b/js/ui/osdWindow.js index a73912413..5bd91c7fa 100644 --- a/js/ui/osdWindow.js +++ b/js/ui/osdWindow.js @@ -145,7 +145,7 @@ var OsdWindow = new Lang.Class({ return; if (!this.actor.visible) { - Meta.disable_unredirect_for_screen(global.screen); + Meta.disable_unredirect_for_display(global.display); this.actor.show(); this.actor.opacity = 0; this.actor.get_parent().set_child_above_sibling(this.actor, null); @@ -179,7 +179,7 @@ var OsdWindow = new Lang.Class({ transition: 'easeOutQuad', onComplete: () => { this._reset(); - Meta.enable_unredirect_for_screen(global.screen); + Meta.enable_unredirect_for_display(global.display); } }); return GLib.SOURCE_REMOVE; diff --git a/js/ui/overview.js b/js/ui/overview.js index 224057640..487c0c4aa 100644 --- a/js/ui/overview.js +++ b/js/ui/overview.js @@ -157,7 +157,7 @@ var Overview = new Lang.Class({ Main.xdndHandler.connect('drag-begin', this._onDragBegin.bind(this)); Main.xdndHandler.connect('drag-end', this._onDragEnd.bind(this)); - global.screen.connect('restacked', this._onRestacked.bind(this)); + global.display.connect('restacked', this._onRestacked.bind(this)); this._windowSwitchTimeoutId = 0; this._windowSwitchTimestamp = 0; @@ -286,7 +286,8 @@ var Overview = new Lang.Class({ DND.addDragMonitor(this._dragMonitor); // Remember the workspace we started from - this._lastActiveWorkspaceIndex = global.screen.get_active_workspace_index(); + let workspaceManager = global.workspace_manager; + this._lastActiveWorkspaceIndex = workspaceManager.get_active_workspace_index(); }, _onDragEnd(time) { @@ -296,7 +297,8 @@ var Overview = new Lang.Class({ // we have to go back to where we started and hide // the overview if (this._shown) { - global.screen.get_workspace_by_index(this._lastActiveWorkspaceIndex).activate(time); + let workspaceManager = global.workspace_manager; + workspaceManager.get_workspace_by_index(this._lastActiveWorkspaceIndex).activate(time); this.hide(); } this._resetWindowSwitchTimeout(); @@ -317,9 +319,9 @@ var Overview = new Lang.Class({ let display = Gdk.Display.get_default(); let deviceManager = display.get_device_manager(); let pointer = deviceManager.get_client_pointer(); - let [screen, pointerX, pointerY] = pointer.get_position(); + let [gdkScreen, pointerX, pointerY] = pointer.get_position(); - pointer.warp(screen, pointerX, pointerY); + pointer.warp(gdkScreen, pointerX, pointerY); }, _onDragMotion(dragEvent) { @@ -550,7 +552,7 @@ var Overview = new Lang.Class({ this.visibleTarget = true; this._activationTime = GLib.get_monotonic_time() / GLib.USEC_PER_SEC; - Meta.disable_unredirect_for_screen(global.screen); + Meta.disable_unredirect_for_display(global.display); this.viewSelector.show(); this._overview.opacity = 0; @@ -635,7 +637,7 @@ var Overview = new Lang.Class({ _hideDone() { // Re-enable unredirection - Meta.enable_unredirect_for_screen(global.screen); + Meta.enable_unredirect_for_display(global.display); this.viewSelector.hide(); this._desktopFade.hide(); diff --git a/js/ui/panel.js b/js/ui/panel.js index 2f593247d..8537cb51a 100644 --- a/js/ui/panel.js +++ b/js/ui/panel.js @@ -265,7 +265,8 @@ var AppMenuButton = new Lang.Class({ }, _findTargetApp() { - let workspace = global.screen.get_active_workspace(); + let workspaceManager = global.workspace_manager; + let workspace = workspaceManager.get_active_workspace(); let tracker = Shell.WindowTracker.get_default(); let focusedApp = tracker.focus_app; if (focusedApp && focusedApp.is_on_workspace(workspace)) @@ -818,7 +819,7 @@ var Panel = new Lang.Class({ global.window_group.connect('actor-removed', this._onWindowActorRemoved.bind(this)); global.window_manager.connect('switch-workspace', this._updateSolidStyle.bind(this)); - global.screen.connect('workareas-changed', () => { this.actor.queue_relayout(); }); + global.display.connect('workareas-changed', () => { this.actor.queue_relayout(); }); this._updatePanel(); }, @@ -961,8 +962,7 @@ var Panel = new Lang.Class({ if (!allowDrag) return Clutter.EVENT_PROPAGATE; - global.display.begin_grab_op(global.screen, - dragWindow, + global.display.begin_grab_op(dragWindow, Meta.GrabOp.MOVING, false, /* pointer grab */ true, /* frame action */ @@ -977,7 +977,7 @@ var Panel = new Lang.Class({ _onKeyPress(actor, event) { let symbol = event.get_key_symbol(); if (symbol == Clutter.KEY_Escape) { - global.screen.focus_default_window(event.get_time()); + global.display.focus_default_window(event.get_time()); return Clutter.EVENT_STOP; } @@ -1075,7 +1075,8 @@ var Panel = new Lang.Class({ return; /* Get all the windows in the active workspace that are in the primary monitor and visible */ - let activeWorkspace = global.screen.get_active_workspace(); + let workspaceManager = global.workspace_manager; + let activeWorkspace = workspaceManager.get_active_workspace(); let windows = activeWorkspace.list_windows().filter(metaWindow => { return metaWindow.is_on_primary_monitor() && metaWindow.showing_on_its_workspace() && diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js index 2d8d9b3f6..dee290b36 100644 --- a/js/ui/screenShield.js +++ b/js/ui/screenShield.js @@ -570,7 +570,7 @@ var ScreenShield = new Lang.Class({ this._shortLightbox.connect('shown', this._onShortLightboxShown.bind(this)); this.idleMonitor = Meta.IdleMonitor.get_core(); - this._cursorTracker = Meta.CursorTracker.get_for_screen(global.screen); + this._cursorTracker = Meta.CursorTracker.get_for_display(global.display); this._syncInhibitor(); }, diff --git a/js/ui/screencast.js b/js/ui/screencast.js index d1b2d2ad8..bf5d954c8 100644 --- a/js/ui/screencast.js +++ b/js/ui/screencast.js @@ -56,7 +56,7 @@ var ScreencastService = new Lang.Class({ let recorder = this._recorders.get(sender); if (!recorder) { recorder = new Shell.Recorder({ stage: global.stage, - screen: global.screen }); + display: global.display }); recorder._watchNameId = Gio.bus_watch_name(Gio.BusType.SESSION, sender, 0, null, this._onNameVanished.bind(this)); diff --git a/js/ui/screenshot.js b/js/ui/screenshot.js index 0ce6a6650..6e99568a3 100644 --- a/js/ui/screenshot.js +++ b/js/ui/screenshot.js @@ -261,7 +261,7 @@ var SelectArea = new Lang.Class({ onUngrab: this._onUngrab.bind(this) })) return; - global.screen.set_cursor(Meta.Cursor.CROSSHAIR); + global.display.set_cursor(Meta.Cursor.CROSSHAIR); Main.uiGroup.set_child_above_sibling(this._group, null); this._group.visible = true; }, @@ -330,7 +330,7 @@ var SelectArea = new Lang.Class({ }, _onUngrab() { - global.screen.set_cursor(Meta.Cursor.DEFAULT); + global.display.set_cursor(Meta.Cursor.DEFAULT); this.emit('finished', this._result); GLib.idle_add(GLib.PRIORITY_DEFAULT, () => { diff --git a/js/ui/status/keyboard.js b/js/ui/status/keyboard.js index 3dce2c9f9..a17e9c43b 100644 --- a/js/ui/status/keyboard.js +++ b/js/ui/status/keyboard.js @@ -398,7 +398,7 @@ var InputSourceManager = new Lang.Class({ return true; }, - _switchInputSource(display, screen, window, binding) { + _switchInputSource(display, window, binding) { if (this._mruSources.length < 2) return; diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js index d6bfe6ac1..bab93a03e 100644 --- a/js/ui/windowManager.js +++ b/js/ui/windowManager.js @@ -200,12 +200,18 @@ var WorkspaceTracker = new Lang.Class({ let tracker = Shell.WindowTracker.get_default(); tracker.connect('startup-sequence-changed', this._queueCheckWorkspaces.bind(this)); - global.screen.connect('notify::n-workspaces', this._nWorkspacesChanged.bind(this)); - global.window_manager.connect('switch-workspace', this._queueCheckWorkspaces.bind(this)); + let workspaceManager = global.workspace_manager; + workspaceManager.connect('notify::n-workspaces', + this._nWorkspacesChanged.bind(this)); + global.window_manager.connect('switch-workspace', + this._queueCheckWorkspaces.bind(this)); - global.screen.connect('window-entered-monitor', this._windowEnteredMonitor.bind(this)); - global.screen.connect('window-left-monitor', this._windowLeftMonitor.bind(this)); - global.screen.connect('restacked', this._windowsRestacked.bind(this)); + global.display.connect('window-entered-monitor', + this._windowEnteredMonitor.bind(this)); + global.display.connect('window-left-monitor', + this._windowLeftMonitor.bind(this)); + global.display.connect('restacked', + this._windowsRestacked.bind(this)); this._workspaceSettings = this._getWorkspaceSettings(); this._workspaceSettings.connect('changed::dynamic-workspaces', this._queueCheckWorkspaces.bind(this)); @@ -230,6 +236,7 @@ var WorkspaceTracker = new Lang.Class({ }, _checkWorkspaces() { + let workspaceManager = global.workspace_manager; let i; let emptyWorkspaces = []; @@ -257,7 +264,7 @@ var WorkspaceTracker = new Lang.Class({ let sequences = Shell.WindowTracker.get_default().get_startup_sequences(); for (i = 0; i < sequences.length; i++) { let index = sequences[i].get_workspace(); - if (index >= 0 && index <= global.screen.n_workspaces) + if (index >= 0 && index <= workspaceManager.n_workspaces) emptyWorkspaces[index] = false; } @@ -275,17 +282,17 @@ var WorkspaceTracker = new Lang.Class({ // If we don't have an empty workspace at the end, add one if (!emptyWorkspaces[emptyWorkspaces.length -1]) { - global.screen.append_new_workspace(false, global.get_current_time()); + workspaceManager.append_new_workspace(false, global.get_current_time()); emptyWorkspaces.push(false); } - let activeWorkspaceIndex = global.screen.get_active_workspace_index(); + let activeWorkspaceIndex = workspaceManager.get_active_workspace_index(); emptyWorkspaces[activeWorkspaceIndex] = false; // Delete other empty workspaces; do it from the end to avoid index changes for (i = emptyWorkspaces.length - 2; i >= 0; i--) { if (emptyWorkspaces[i]) - global.screen.remove_workspace(this._workspaces[i], global.get_current_time()); + workspaceManager.remove_workspace(this._workspaces[i], global.get_current_time()); } this._checkWorkspacesId = 0; @@ -317,14 +324,14 @@ var WorkspaceTracker = new Lang.Class({ GLib.Source.set_name_by_id(id, '[gnome-shell] this._queueCheckWorkspaces'); }, - _windowLeftMonitor(metaScreen, monitorIndex, metaWin) { + _windowLeftMonitor(metaDisplay, monitorIndex, metaWin) { // If the window left the primary monitor, that // might make that workspace empty if (monitorIndex == Main.layoutManager.primaryIndex) this._queueCheckWorkspaces(); }, - _windowEnteredMonitor(metaScreen, monitorIndex, metaWin) { + _windowEnteredMonitor(metaDisplay, monitorIndex, metaWin) { // If the window entered the primary monitor, that // might make that workspace non-empty if (monitorIndex == Main.layoutManager.primaryIndex) @@ -344,8 +351,9 @@ var WorkspaceTracker = new Lang.Class({ }, _nWorkspacesChanged() { + let workspaceManager = global.workspace_manager; let oldNumWorkspaces = this._workspaces.length; - let newNumWorkspaces = global.screen.n_workspaces; + let newNumWorkspaces = workspaceManager.n_workspaces; if (oldNumWorkspaces == newNumWorkspaces) return false; @@ -356,7 +364,7 @@ var WorkspaceTracker = new Lang.Class({ // Assume workspaces are only added at the end for (w = oldNumWorkspaces; w < newNumWorkspaces; w++) - this._workspaces[w] = global.screen.get_workspace_by_index(w); + this._workspaces[w] = workspaceManager.get_workspace_by_index(w); for (w = oldNumWorkspaces; w < newNumWorkspaces; w++) { let workspace = this._workspaces[w]; @@ -370,7 +378,7 @@ var WorkspaceTracker = new Lang.Class({ let removedIndex; let removedNum = oldNumWorkspaces - newNumWorkspaces; for (let w = 0; w < oldNumWorkspaces; w++) { - let workspace = global.screen.get_workspace_by_index(w); + let workspace = workspaceManager.get_workspace_by_index(w); if (this._workspaces[w] != workspace) { removedIndex = w; break; @@ -714,7 +722,7 @@ var WindowManager = new Lang.Class({ this._shellwm.connect('confirm-display-change', this._confirmDisplayChange.bind(this)); this._shellwm.connect('create-close-dialog', this._createCloseDialog.bind(this)); this._shellwm.connect('create-inhibit-shortcuts-dialog', this._createInhibitShortcutsDialog.bind(this)); - global.screen.connect('restacked', this._syncStacking.bind(this)); + global.display.connect('restacked', this._syncStacking.bind(this)); this._workspaceSwitcherPopup = null; this._tilePreview = null; @@ -970,8 +978,8 @@ var WindowManager = new Lang.Class({ if (Main.sessionMode.hasWorkspaces) this._workspaceTracker = new WorkspaceTracker(this); - global.screen.override_workspace_layout(Meta.ScreenCorner.TOPLEFT, - false, -1, 1); + global.workspace_manager.override_workspace_layout(Meta.DisplayCorner.TOPLEFT, + false, -1, 1); let gesture = new WorkspaceSwitchAction(); gesture.connect('activated', this._actionSwitchWorkspace.bind(this)); @@ -1001,7 +1009,9 @@ var WindowManager = new Lang.Class({ }, _actionSwitchWorkspace(action, direction) { - let newWs = global.screen.get_active_workspace().get_neighbor(direction); + let workspaceManager = global.workspace_manager; + let activeWorkspace = workspaceManager.get_active_workspace(); + let newWs = activeWorkspace.get_neighbor(direction); this.actionMoveWorkspace(newWs); }, @@ -1017,8 +1027,10 @@ var WindowManager = new Lang.Class({ _switchApp() { let windows = global.get_window_actors().filter(actor => { let win = actor.metaWindow; + let workspaceManager = global.workspace_manager; + let activeWorkspace = workspaceManager.get_active_workspace(); return (!win.is_override_redirect() && - win.located_on_workspace(global.screen.get_active_workspace())); + win.located_on_workspace(activeWorkspace)); }); if (windows.length == 0) @@ -1042,10 +1054,12 @@ var WindowManager = new Lang.Class({ }, insertWorkspace(pos) { + let workspaceManager = global.workspace_manager; + if (!Meta.prefs_get_dynamic_workspaces()) return; - global.screen.append_new_workspace(false, global.get_current_time()); + workspaceManager.append_new_workspace(false, global.get_current_time()); let windows = global.get_window_actors().map(a => a.meta_window); @@ -1069,9 +1083,9 @@ var WindowManager = new Lang.Class({ // If the new workspace was inserted before the active workspace, // activate the workspace to which its windows went - let activeIndex = global.screen.get_active_workspace_index(); + let activeIndex = workspaceManager.get_active_workspace_index(); if (activeIndex >= pos) { - let newWs = global.screen.get_workspace_by_index(activeIndex + 1); + let newWs = workspaceManager.get_workspace_by_index(activeIndex + 1); this._blockAnimations = true; newWs.activate(global.get_current_time()); this._blockAnimations = false; @@ -1829,7 +1843,7 @@ var WindowManager = new Lang.Class({ this._windowMenuManager.showWindowMenuForWindow(window, menu, rect); }, - _startSwitcher(display, screen, window, binding) { + _startSwitcher(display, window, binding) { let constructor = null; switch (binding.get_name()) { case 'switch-applications': @@ -1868,15 +1882,15 @@ var WindowManager = new Lang.Class({ tabPopup.destroy(); }, - _startA11ySwitcher(display, screen, window, binding) { + _startA11ySwitcher(display, window, binding) { Main.ctrlAltTabManager.popup(binding.is_reversed(), binding.get_name(), binding.get_mask()); }, - _toggleAppMenu(display, screen, window, event, binding) { + _toggleAppMenu(display, window, event, binding) { Main.panel.toggleAppMenu(); }, - _toggleCalendar(display, screen, window, event, binding) { + _toggleCalendar(display, window, event, binding) { Main.panel.toggleCalendar(); }, @@ -1889,11 +1903,13 @@ var WindowManager = new Lang.Class({ OrigTweener.resumeAllTweens(); }, - _showWorkspaceSwitcher(display, screen, window, binding) { + _showWorkspaceSwitcher(display, window, binding) { + let workspaceManager = display.get_workspace_manager(); + if (!Main.sessionMode.hasWorkspaces) return; - if (screen.n_workspaces == 1) + if (workspaceManager.n_workspaces == 1) return; let [action,,,target] = binding.get_name().split('-'); @@ -1912,22 +1928,22 @@ var WindowManager = new Lang.Class({ if (target == 'last') { direction = Meta.MotionDirection.DOWN; - newWs = screen.get_workspace_by_index(screen.n_workspaces - 1); + newWs = workspaceManager.get_workspace_by_index(workspaceManager.n_workspaces - 1); } else if (isNaN(target)) { // Prepend a new workspace dynamically - if (screen.get_active_workspace_index() == 0 && + if (workspaceManager.get_active_workspace_index() == 0 && action == 'move' && target == 'up' && this._isWorkspacePrepended == false) { this.insertWorkspace(0); this._isWorkspacePrepended = true; } direction = Meta.MotionDirection[target.toUpperCase()]; - newWs = screen.get_active_workspace().get_neighbor(direction); + newWs = workspaceManager.get_active_workspace().get_neighbor(direction); } else if (target > 0) { target--; - newWs = screen.get_workspace_by_index(target); + newWs = workspaceManager.get_workspace_by_index(target); - if (screen.get_active_workspace().index() > target) + if (workspaceManager.get_active_workspace().index() > target) direction = Meta.MotionDirection.UP; else direction = Meta.MotionDirection.DOWN; @@ -1960,7 +1976,8 @@ var WindowManager = new Lang.Class({ if (!Main.sessionMode.hasWorkspaces) return; - let activeWorkspace = global.screen.get_active_workspace(); + let workspaceManager = global.workspace_manager; + let activeWorkspace = workspaceManager.get_active_workspace(); if (activeWorkspace != workspace) workspace.activate(global.get_current_time()); @@ -1970,7 +1987,8 @@ var WindowManager = new Lang.Class({ if (!Main.sessionMode.hasWorkspaces) return; - let activeWorkspace = global.screen.get_active_workspace(); + let workspaceManager = global.workspace_manager; + let activeWorkspace = workspaceManager.get_active_workspace(); if (activeWorkspace != workspace) { // This won't have any effect for "always sticky" windows diff --git a/js/ui/windowMenu.js b/js/ui/windowMenu.js index d4411d015..32e3be698 100644 --- a/js/ui/windowMenu.js +++ b/js/ui/windowMenu.js @@ -126,15 +126,15 @@ var WindowMenu = new Lang.Class({ } } - let screen = global.screen; - let nMonitors = screen.get_n_monitors(); + let display = global.display; + let nMonitors = display.get_n_monitors(); let monitorIndex = window.get_monitor(); if (nMonitors > 1 && monitorIndex >= 0) { this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); let dir = Meta.ScreenDirection.UP; let upMonitorIndex = - screen.get_monitor_neighbor_index(monitorIndex, dir); + display.get_monitor_neighbor_index(monitorIndex, dir); if (upMonitorIndex != -1) { this.addAction(_("Move to Monitor Up"), () => { window.move_to_monitor(upMonitorIndex); @@ -143,7 +143,7 @@ var WindowMenu = new Lang.Class({ dir = Meta.ScreenDirection.DOWN; let downMonitorIndex = - screen.get_monitor_neighbor_index(monitorIndex, dir); + display.get_monitor_neighbor_index(monitorIndex, dir); if (downMonitorIndex != -1) { this.addAction(_("Move to Monitor Down"), () => { window.move_to_monitor(downMonitorIndex); @@ -152,7 +152,7 @@ var WindowMenu = new Lang.Class({ dir = Meta.ScreenDirection.LEFT; let leftMonitorIndex = - screen.get_monitor_neighbor_index(monitorIndex, dir); + display.get_monitor_neighbor_index(monitorIndex, dir); if (leftMonitorIndex != -1) { this.addAction(_("Move to Monitor Left"), () => { window.move_to_monitor(leftMonitorIndex); @@ -161,7 +161,7 @@ var WindowMenu = new Lang.Class({ dir = Meta.ScreenDirection.RIGHT; let rightMonitorIndex = - screen.get_monitor_neighbor_index(monitorIndex, dir); + display.get_monitor_neighbor_index(monitorIndex, dir); if (rightMonitorIndex != -1) { this.addAction(_("Move to Monitor Right"), () => { window.move_to_monitor(rightMonitorIndex); diff --git a/js/ui/workspace.js b/js/ui/workspace.js index 1ada50f8d..d9baef61d 100644 --- a/js/ui/workspace.js +++ b/js/ui/workspace.js @@ -1156,10 +1156,10 @@ var Workspace = new Lang.Class({ this._windowRemovedId = this.metaWorkspace.connect('window-removed', this._windowRemoved.bind(this)); } - this._windowEnteredMonitorId = global.screen.connect('window-entered-monitor', - this._windowEnteredMonitor.bind(this)); - this._windowLeftMonitorId = global.screen.connect('window-left-monitor', - this._windowLeftMonitor.bind(this)); + this._windowEnteredMonitorId = global.display.connect('window-entered-monitor', + this._windowEnteredMonitor.bind(this)); + this._windowLeftMonitorId = global.display.connect('window-left-monitor', + this._windowLeftMonitor.bind(this)); this._repositionWindowsId = 0; this.leavingOverview = false; @@ -1305,7 +1305,8 @@ var Workspace = new Lang.Class({ let area = padArea(this._actualGeometry, padding); let slots = strategy.computeWindowSlots(layout, area); - let currentWorkspace = global.screen.get_active_workspace(); + let workspaceManager = global.workspace_manager; + let currentWorkspace = workspaceManager.get_active_workspace(); let isOnCurrentWorkspace = this.metaWorkspace == null || this.metaWorkspace == currentWorkspace; for (let i = 0; i < slots.length; i++) { @@ -1568,13 +1569,13 @@ var Workspace = new Lang.Class({ this._doRemoveWindow(metaWin); }, - _windowEnteredMonitor(metaScreen, monitorIndex, metaWin) { + _windowEnteredMonitor(metaDisplay, monitorIndex, metaWin) { if (monitorIndex == this.monitorIndex) { this._doAddWindow(metaWin); } }, - _windowLeftMonitor(metaScreen, monitorIndex, metaWin) { + _windowLeftMonitor(metaDisplay, monitorIndex, metaWin) { if (monitorIndex == this.monitorIndex) { this._doRemoveWindow(metaWin); } @@ -1599,7 +1600,9 @@ var Workspace = new Lang.Class({ if (this._windows.length == 0) return; - if (this.metaWorkspace != null && this.metaWorkspace != global.screen.get_active_workspace()) + let workspaceManager = global.workspace_manager; + let activeWorkspace = workspaceManager.get_active_workspace(); + if (this.metaWorkspace != null && this.metaWorkspace != activeWorkspace) return; // Special case maximized windows, since it doesn't make sense @@ -1655,7 +1658,9 @@ var Workspace = new Lang.Class({ this._repositionWindowsId = 0; } - if (this.metaWorkspace != null && this.metaWorkspace != global.screen.get_active_workspace()) + let workspaceManager = global.workspace_manager; + let activeWorkspace = workspaceManager.get_active_workspace(); + if (this.metaWorkspace != null && this.metaWorkspace != activeWorkspace) return; // Special case maximized windows, since it doesn't make sense @@ -1725,7 +1730,8 @@ var Workspace = new Lang.Class({ }, zoomFromOverview() { - let currentWorkspace = global.screen.get_active_workspace(); + let workspaceManager = global.workspace_manager; + let currentWorkspace = workspaceManager.get_active_workspace(); this.leavingOverview = true; @@ -1793,8 +1799,8 @@ var Workspace = new Lang.Class({ this.metaWorkspace.disconnect(this._windowAddedId); this.metaWorkspace.disconnect(this._windowRemovedId); } - global.screen.disconnect(this._windowEnteredMonitorId); - global.screen.disconnect(this._windowLeftMonitorId); + global.display.disconnect(this._windowEnteredMonitorId); + global.display.disconnect(this._windowLeftMonitorId); if (this._repositionWindowsId > 0) { Mainloop.source_remove(this._repositionWindowsId); @@ -2015,7 +2021,8 @@ var Workspace = new Lang.Class({ if (metaWindow.get_monitor() != this.monitorIndex) metaWindow.move_to_monitor(this.monitorIndex); - let index = this.metaWorkspace ? this.metaWorkspace.index() : global.screen.get_active_workspace_index(); + let workspaceManager = global.workspace_manager; + let index = this.metaWorkspace ? this.metaWorkspace.index() : workspaceManager.get_active_workspace_index(); metaWindow.change_workspace_by_index(index, false); return true; } else if (source.shellWorkspaceLaunch) { diff --git a/js/ui/workspaceSwitcherPopup.js b/js/ui/workspaceSwitcherPopup.js index 12bff85d9..351a9074c 100644 --- a/js/ui/workspaceSwitcherPopup.js +++ b/js/ui/workspaceSwitcherPopup.js @@ -47,9 +47,12 @@ var WorkspaceSwitcherPopup = new Lang.Class({ this.actor.hide(); - this._globalSignals = []; - this._globalSignals.push(global.screen.connect('workspace-added', this._redisplay.bind(this))); - this._globalSignals.push(global.screen.connect('workspace-removed', this._redisplay.bind(this))); + let workspaceManager = global.workspace_manager; + this._workspaceManagerSignals = []; + this._workspaceManagerSignals.push(workspaceManager.connect('workspace-added', + this._redisplay.bind(this))); + this._workspaceManagerSignals.push(workspaceManager.connect('workspace-removed', + this._redisplay.bind(this))); }, _getPreferredHeight(actor, forWidth, alloc) { @@ -68,11 +71,12 @@ var WorkspaceSwitcherPopup = new Lang.Class({ height += childNaturalHeight * workArea.width / workArea.height; } - let spacing = this._itemSpacing * (global.screen.n_workspaces - 1); + let workspaceManager = global.workspace_manager; + let spacing = this._itemSpacing * (workspaceManager.n_workspaces - 1); height += spacing; height = Math.min(height, availHeight); - this._childHeight = (height - spacing) / global.screen.n_workspaces; + this._childHeight = (height - spacing) / workspaceManager.n_workspaces; alloc.min_size = height; alloc.natural_size = height; @@ -104,9 +108,11 @@ var WorkspaceSwitcherPopup = new Lang.Class({ }, _redisplay() { + let workspaceManager = global.workspace_manager; + this._list.destroy_all_children(); - for (let i = 0; i < global.screen.n_workspaces; i++) { + for (let i = 0; i < workspaceManager.n_workspaces; i++) { let indicator = null; if (i == this._activeWorkspaceIndex && this._direction == Meta.MotionDirection.UP) @@ -164,8 +170,9 @@ var WorkspaceSwitcherPopup = new Lang.Class({ Mainloop.source_remove(this._timeoutId); this._timeoutId = 0; - for (let i = 0; i < this._globalSignals.length; i++) - global.screen.disconnect(this._globalSignals[i]); + let workspaceManager = global.workspace_manager; + for (let i = 0; i < this._workspaceManagerSignals.length; i++) + workspaceManager.disconnect(this._workspaceManagerSignals[i]); this.actor.destroy(); diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js index 569f43323..fe8a91a3d 100644 --- a/js/ui/workspaceThumbnail.js +++ b/js/ui/workspaceThumbnail.js @@ -304,9 +304,9 @@ var WorkspaceThumbnail = new Lang.Class({ this._windowAdded.bind(this)); this._windowRemovedId = this.metaWorkspace.connect('window-removed', this._windowRemoved.bind(this)); - this._windowEnteredMonitorId = global.screen.connect('window-entered-monitor', - this._windowEnteredMonitor.bind(this)); - this._windowLeftMonitorId = global.screen.connect('window-left-monitor', + this._windowEnteredMonitorId = global.display.connect('window-entered-monitor', + this._windowEnteredMonitor.bind(this)); + this._windowLeftMonitorId = global.display.connect('window-left-monitor', this._windowLeftMonitor.bind(this)); this.state = ThumbnailState.NORMAL; @@ -455,13 +455,13 @@ var WorkspaceThumbnail = new Lang.Class({ this._doRemoveWindow(metaWin); }, - _windowEnteredMonitor(metaScreen, monitorIndex, metaWin) { + _windowEnteredMonitor(metaDisplay, monitorIndex, metaWin) { if (monitorIndex == this.monitorIndex) { this._doAddWindow(metaWin); } }, - _windowLeftMonitor(metaScreen, monitorIndex, metaWin) { + _windowLeftMonitor(metaDisplay, monitorIndex, metaWin) { if (monitorIndex == this.monitorIndex) { this._doRemoveWindow(metaWin); } @@ -487,8 +487,8 @@ var WorkspaceThumbnail = new Lang.Class({ this.metaWorkspace.disconnect(this._windowAddedId); this.metaWorkspace.disconnect(this._windowRemovedId); - global.screen.disconnect(this._windowEnteredMonitorId); - global.screen.disconnect(this._windowLeftMonitorId); + global.display.disconnect(this._windowEnteredMonitorId); + global.display.disconnect(this._windowLeftMonitorId); for (let i = 0; i < this._allWindows.length; i++) this._allWindows[i].disconnect(this._minimizedChangedIds[i]); @@ -552,7 +552,9 @@ var WorkspaceThumbnail = new Lang.Class({ return; // a click on the already current workspace should go back to the main view - if (this.metaWorkspace == global.screen.get_active_workspace()) + let workspaceManager = global.workspace_manager; + let activeWorkspace = workspaceManager.get_active_workspace(); + if (this.metaWorkspace == activeWorkspace) Main.overview.hide(); else this.metaWorkspace.activate(time); @@ -682,9 +684,11 @@ var ThumbnailsBox = new Lang.Class({ }, _updateSwitcherVisibility() { + let workspaceManager = global.workspace_manager; + this.actor.visible = this._settings.get_boolean('dynamic-workspaces') || - global.screen.n_workspaces > 1; + workspaceManager.n_workspaces > 1; }, _activateThumbnailAtPoint(stageX, stageY, time) { @@ -842,7 +846,8 @@ var ThumbnailsBox = new Lang.Class({ // to open its first window within some time, as tracked by Shell.WindowTracker. // Here, we only add a very brief timeout to avoid the _immediate_ removal of the // workspace while we wait for the startup sequence to load. - Main.wm.keepWorkspaceAlive(global.screen.get_workspace_by_index(newWorkspaceIndex), + let workspaceManager = global.workspace_manager; + Main.wm.keepWorkspaceAlive(workspaceManager.get_workspace_by_index(newWorkspaceIndex), WORKSPACE_KEEP_ALIVE_TIME); } @@ -861,18 +866,21 @@ var ThumbnailsBox = new Lang.Class({ }, _createThumbnails() { + let workspaceManager = global.workspace_manager; + this._switchWorkspaceNotifyId = global.window_manager.connect('switch-workspace', this._activeWorkspaceChanged.bind(this)); this._nWorkspacesNotifyId = - global.screen.connect('notify::n-workspaces', - this._workspacesChanged.bind(this)); + workspaceManager.connect('notify::n-workspaces', + this._workspacesChanged.bind(this)); this._syncStackingId = Main.overview.connect('windows-restacked', this._syncStacking.bind(this)); this._workareasChangedId = - global.screen.connect('workareas-changed', this._rebuildThumbnails.bind(this)); + global.display.connect('workareas-changed', + this._rebuildThumbnails.bind(this)); this._targetScale = 0; this._scale = 0; @@ -883,7 +891,7 @@ var ThumbnailsBox = new Lang.Class({ for (let key in ThumbnailState) this._stateCounts[ThumbnailState[key]] = 0; - this.addThumbnails(0, global.screen.n_workspaces); + this.addThumbnails(0, workspaceManager.n_workspaces); this._updateSwitcherVisibility(); }, @@ -897,7 +905,8 @@ var ThumbnailsBox = new Lang.Class({ this._switchWorkspaceNotifyId = 0; } if (this._nWorkspacesNotifyId > 0) { - global.screen.disconnect(this._nWorkspacesNotifyId); + let workspaceManager = global.workspace_manager; + workspaceManager.disconnect(this._nWorkspacesNotifyId); this._nWorkspacesNotifyId = 0; } @@ -907,7 +916,7 @@ var ThumbnailsBox = new Lang.Class({ } if (this._workareasChangedId > 0) { - global.screen.disconnect(this._workareasChangedId); + global.display.disconnect(this._workareasChangedId); this._workareasChangedId = 0; } @@ -927,9 +936,10 @@ var ThumbnailsBox = new Lang.Class({ _workspacesChanged() { let validThumbnails = this._thumbnails.filter(t => t.state <= ThumbnailState.NORMAL); + let workspaceManager = global.workspace_manager; let oldNumWorkspaces = validThumbnails.length; - let newNumWorkspaces = global.screen.n_workspaces; - let active = global.screen.get_active_workspace_index(); + let newNumWorkspaces = workspaceManager.n_workspaces; + let active = workspaceManager.get_active_workspace_index(); if (newNumWorkspaces > oldNumWorkspaces) { this.addThumbnails(oldNumWorkspaces, newNumWorkspaces - oldNumWorkspaces); @@ -937,7 +947,7 @@ var ThumbnailsBox = new Lang.Class({ let removedIndex; let removedNum = oldNumWorkspaces - newNumWorkspaces; for (let w = 0; w < oldNumWorkspaces; w++) { - let metaWorkspace = global.screen.get_workspace_by_index(w); + let metaWorkspace = workspaceManager.get_workspace_by_index(w); if (this._thumbnails[w].metaWorkspace != metaWorkspace) { removedIndex = w; break; @@ -951,10 +961,12 @@ var ThumbnailsBox = new Lang.Class({ }, addThumbnails(start, count) { + let workspaceManager = global.workspace_manager; + if (!this._ensurePorthole()) return; for (let k = start; k < start + count; k++) { - let metaWorkspace = global.screen.get_workspace_by_index(k); + let metaWorkspace = workspaceManager.get_workspace_by_index(k); let thumbnail = new WorkspaceThumbnail(metaWorkspace); thumbnail.setPorthole(this._porthole.x, this._porthole.y, this._porthole.width, this._porthole.height); @@ -1140,10 +1152,11 @@ var ThumbnailsBox = new Lang.Class({ return; } + let workspaceManager = global.workspace_manager; let themeNode = this.actor.get_theme_node(); let spacing = themeNode.get_length('spacing'); - let nWorkspaces = global.screen.n_workspaces; + let nWorkspaces = workspaceManager.n_workspaces; let totalSpacing = (nWorkspaces - 1) * spacing; alloc.min_size = totalSpacing; @@ -1157,10 +1170,11 @@ var ThumbnailsBox = new Lang.Class({ return; } + let workspaceManager = global.workspace_manager; let themeNode = this.actor.get_theme_node(); let spacing = this.actor.get_theme_node().get_length('spacing'); - let nWorkspaces = global.screen.n_workspaces; + let nWorkspaces = workspaceManager.n_workspaces; let totalSpacing = (nWorkspaces - 1) * spacing; let avail = forHeight - totalSpacing; @@ -1191,6 +1205,7 @@ var ThumbnailsBox = new Lang.Class({ if (this._thumbnails.length == 0) // not visible return; + let workspaceManager = global.workspace_manager; let themeNode = this.actor.get_theme_node(); let portholeWidth = this._porthole.width; @@ -1198,7 +1213,7 @@ var ThumbnailsBox = new Lang.Class({ let spacing = themeNode.get_length('spacing'); // Compute the scale we'll need once everything is updated - let nWorkspaces = global.screen.n_workspaces; + let nWorkspaces = workspaceManager.n_workspaces; let totalSpacing = (nWorkspaces - 1) * spacing; let avail = (box.y2 - box.y1) - totalSpacing; @@ -1232,7 +1247,8 @@ var ThumbnailsBox = new Lang.Class({ let indicatorY1 = this._indicatorY; let indicatorY2; // when not animating, the workspace position overrides this._indicatorY - let indicatorWorkspace = !this._animatingIndicator ? global.screen.get_active_workspace() : null; + let activeWorkspace = workspaceManager.get_active_workspace(); + let indicatorWorkspace = !this._animatingIndicator ? activeWorkspace : null; let indicatorThemeNode = this._indicator.get_theme_node(); let indicatorTopFullBorder = indicatorThemeNode.get_padding(St.Side.TOP) + indicatorThemeNode.get_border_width(St.Side.TOP); @@ -1323,7 +1339,8 @@ var ThumbnailsBox = new Lang.Class({ _activeWorkspaceChanged(wm, from, to, direction) { let thumbnail; - let activeWorkspace = global.screen.get_active_workspace(); + let workspaceManager = global.workspace_manager; + let activeWorkspace = workspaceManager.get_active_workspace(); for (let i = 0; i < this._thumbnails.length; i++) { if (this._thumbnails[i].metaWorkspace == activeWorkspace) { thumbnail = this._thumbnails[i]; diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js index 563e43da4..4ba8db754 100644 --- a/js/ui/workspacesView.js +++ b/js/ui/workspacesView.js @@ -91,25 +91,29 @@ var WorkspacesView = new Lang.Class({ Extends: WorkspacesViewBase, _init(monitorIndex) { + let workspaceManager = global.workspace_manager; + this.parent(monitorIndex); this._animating = false; // tweening this._scrolling = false; // swipe-scrolling this._animatingScroll = false; // programatically updating the adjustment - let activeWorkspaceIndex = global.screen.get_active_workspace_index(); + let activeWorkspaceIndex = workspaceManager.get_active_workspace_index(); this.scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex, lower: 0, page_increment: 1, page_size: 1, step_increment: 0, - upper: global.screen.n_workspaces }); + upper: workspaceManager.n_workspaces }); this.scrollAdjustment.connect('notify::value', this._onScroll.bind(this)); this._workspaces = []; this._updateWorkspaces(); - this._updateWorkspacesId = global.screen.connect('notify::n-workspaces', this._updateWorkspaces.bind(this)); + this._updateWorkspacesId = + workspaceManager.connect('notify::n-workspaces', + this._updateWorkspaces.bind(this)); this._overviewShownId = Main.overview.connect('shown', () => { @@ -138,7 +142,8 @@ var WorkspacesView = new Lang.Class({ }, getActiveWorkspace() { - let active = global.screen.get_active_workspace_index(); + let workspaceManager = global.workspace_manager; + let active = workspaceManager.get_active_workspace_index(); return this._workspaces[active]; }, @@ -169,7 +174,8 @@ var WorkspacesView = new Lang.Class({ }, _scrollToActive() { - let active = global.screen.get_active_workspace_index(); + let workspaceManager = global.workspace_manager; + let active = workspaceManager.get_active_workspace_index(); this._updateWorkspaceActors(true); this._updateScrollAdjustment(active); @@ -178,7 +184,8 @@ var WorkspacesView = new Lang.Class({ // Update workspace actors parameters // @showAnimation: iff %true, transition between states _updateWorkspaceActors(showAnimation) { - let active = global.screen.get_active_workspace_index(); + let workspaceManager = global.workspace_manager; + let active = workspaceManager.get_active_workspace_index(); this._animating = showAnimation; @@ -214,7 +221,8 @@ var WorkspacesView = new Lang.Class({ }, _updateVisibility() { - let active = global.screen.get_active_workspace_index(); + let workspaceManager = global.workspace_manager; + let active = workspaceManager.get_active_workspace_index(); for (let w = 0; w < this._workspaces.length; w++) { let workspace = this._workspaces[w]; @@ -246,13 +254,14 @@ var WorkspacesView = new Lang.Class({ }, _updateWorkspaces() { - let newNumWorkspaces = global.screen.n_workspaces; + let workspaceManager = global.workspace_manager; + let newNumWorkspaces = workspaceManager.n_workspaces; this.scrollAdjustment.upper = newNumWorkspaces; let needsUpdate = false; for (let j = 0; j < newNumWorkspaces; j++) { - let metaWorkspace = global.screen.get_workspace_by_index(j); + let metaWorkspace = workspaceManager.get_workspace_by_index(j); let workspace; if (j >= this._workspaces.length) { /* added */ @@ -290,7 +299,8 @@ var WorkspacesView = new Lang.Class({ this.scrollAdjustment.run_dispose(); Main.overview.disconnect(this._overviewShownId); global.window_manager.disconnect(this._switchWorkspaceNotifyId); - global.screen.disconnect(this._updateWorkspacesId); + let workspaceManager = global.workspace_manager; + workspaceManager.disconnect(this._updateWorkspacesId); }, startSwipeScroll() { @@ -311,7 +321,8 @@ var WorkspacesView = new Lang.Class({ if (this._animatingScroll) return; - let active = global.screen.get_active_workspace_index(); + let workspaceManager = global.workspace_manager; + let active = workspaceManager.get_active_workspace_index(); let current = Math.round(adj.value); if (active != current) { @@ -593,7 +604,7 @@ var WorkspacesDisplay = new Lang.Class({ _getMonitorIndexForEvent(event) { let [x, y] = event.get_coords(); let rect = new Meta.Rectangle({ x: x, y: y, width: 1, height: 1 }); - return global.screen.get_monitor_index_for_rect(rect); + return global.display.get_monitor_index_for_rect(rect); }, _getPrimaryView() { @@ -679,7 +690,8 @@ var WorkspacesDisplay = new Lang.Class({ this._getMonitorIndexForEvent(event) != this._primaryIndex) return Clutter.EVENT_PROPAGATE; - let activeWs = global.screen.get_active_workspace(); + let workspaceManager = global.workspace_manager; + let activeWs = workspaceManager.get_active_workspace(); let ws; switch (event.get_scroll_direction()) { case Clutter.ScrollDirection.UP: @@ -698,7 +710,8 @@ var WorkspacesDisplay = new Lang.Class({ _onKeyPressEvent(actor, event) { if (!this.actor.mapped) return Clutter.EVENT_PROPAGATE; - let activeWs = global.screen.get_active_workspace(); + let workspaceManager = global.workspace_manager; + let activeWs = workspaceManager.get_active_workspace(); let ws; switch (event.get_key_symbol()) { case Clutter.KEY_Page_Up: diff --git a/meson.build b/meson.build index 9b4727893..9f7384fe3 100644 --- a/meson.build +++ b/meson.build @@ -6,7 +6,7 @@ project('gnome-shell', 'c', # We depend on a specific version of the libmutter API. The mutter variants of # the Cogl and Clutter libraries also use this API version. -mutter_api_version = '2' +mutter_api_version = '3' clutter_pc = 'mutter-clutter-' + mutter_api_version cogl_pc = 'mutter-cogl-' + mutter_api_version diff --git a/src/gnome-shell-plugin.c b/src/gnome-shell-plugin.c index a328d75e2..fa8410d40 100644 --- a/src/gnome-shell-plugin.c +++ b/src/gnome-shell-plugin.c @@ -167,22 +167,19 @@ gnome_shell_plugin_init (GnomeShellPlugin *shell_plugin) static gboolean gnome_shell_plugin_has_swap_event (GnomeShellPlugin *shell_plugin) { - MetaPlugin *plugin = META_PLUGIN (shell_plugin); CoglDisplay *cogl_display = cogl_context_get_display (shell_plugin->cogl_context); CoglRenderer *renderer = cogl_display_get_renderer (cogl_display); const char * (* query_extensions_string) (Display *dpy, int screen); Bool (* query_extension) (Display *dpy, int *error, int *event); - MetaScreen *screen; Display *xdisplay; + int screen_number; const char *glx_extensions; /* We will only get swap events if Cogl is using GLX */ if (cogl_renderer_get_winsys_id (renderer) != COGL_WINSYS_ID_GLX) return FALSE; - screen = meta_plugin_get_screen (plugin); - xdisplay = clutter_x11_get_default_display (); query_extensions_string = @@ -194,9 +191,8 @@ gnome_shell_plugin_has_swap_event (GnomeShellPlugin *shell_plugin) &shell_plugin->glx_error_base, &shell_plugin->glx_event_base); - glx_extensions = - query_extensions_string (xdisplay, - meta_screen_get_screen_number (screen)); + screen_number = XDefaultScreen (xdisplay); + glx_extensions = query_extensions_string (xdisplay, screen_number); return strstr (glx_extensions, "GLX_INTEL_swap_event") != NULL; } diff --git a/src/shell-app.c b/src/shell-app.c index dbf537ce9..7a7a4336a 100644 --- a/src/shell-app.c +++ b/src/shell-app.c @@ -7,6 +7,8 @@ #include #include +#include +#include #include "shell-app-private.h" #include "shell-enum-types.h" @@ -358,6 +360,17 @@ find_most_recent_transient_on_same_workspace (MetaDisplay *display, return result; } +static MetaWorkspace * +get_active_workspace (void) +{ + ShellGlobal *global = shell_global_get (); + MetaDisplay *display = shell_global_get_display (global); + MetaWorkspaceManager *workspace_manager = + meta_display_get_workspace_manager (display); + + return meta_workspace_manager_get_active_workspace (workspace_manager); +} + /** * shell_app_activate_window: * @app: a #ShellApp @@ -391,9 +404,8 @@ shell_app_activate_window (ShellApp *app, { GSList *windows_reversed, *iter; ShellGlobal *global = shell_global_get (); - MetaScreen *screen = shell_global_get_screen (global); - MetaDisplay *display = meta_screen_get_display (screen); - MetaWorkspace *active = meta_screen_get_active_workspace (screen); + MetaDisplay *display = shell_global_get_display (global); + MetaWorkspace *active = get_active_workspace (); MetaWorkspace *workspace = meta_window_get_workspace (window); guint32 last_user_timestamp = meta_display_get_last_user_time (display); MetaWindow *most_recent_transient; @@ -686,7 +698,7 @@ shell_app_get_windows (ShellApp *app) { CompareWindowsData data; data.app = app; - data.active_workspace = meta_screen_get_active_workspace (shell_global_get_screen (shell_global_get ())); + data.active_workspace = get_active_workspace (); app->running_state->windows = g_slist_sort_with_data (app->running_state->windows, shell_app_compare_windows, &data); app->running_state->window_sort_stale = FALSE; } @@ -922,11 +934,11 @@ shell_app_on_skip_taskbar_changed (MetaWindow *window, } static void -shell_app_on_ws_switch (MetaScreen *screen, - int from, - int to, - MetaMotionDirection direction, - gpointer data) +shell_app_on_ws_switch (MetaWorkspaceManager *workspace_manager, + int from, + int to, + MetaMotionDirection direction, + gpointer data) { ShellApp *app = SHELL_APP (data); @@ -1115,12 +1127,12 @@ _shell_app_handle_startup_sequence (ShellApp *app, */ if (starting && shell_app_get_state (app) == SHELL_APP_STATE_STOPPED) { - MetaScreen *screen = shell_global_get_screen (shell_global_get ()); - MetaDisplay *display = meta_screen_get_display (screen); + MetaDisplay *display = shell_global_get_display (shell_global_get ()); + MetaX11Display *x11_display = meta_display_get_x11_display (display); shell_app_state_transition (app, SHELL_APP_STATE_STARTING); - meta_display_focus_the_no_focus_window (display, screen, - sn_startup_sequence_get_timestamp (sequence)); + meta_x11_display_focus_the_no_focus_window (x11_display, + sn_startup_sequence_get_timestamp (sequence)); app->started_on_workspace = sn_startup_sequence_get_workspace (sequence); } @@ -1290,15 +1302,17 @@ shell_app_get_app_info (ShellApp *app) static void create_running_state (ShellApp *app) { - MetaScreen *screen; + MetaDisplay *display = shell_global_get_display (shell_global_get ()); + MetaWorkspaceManager *workspace_manager = + meta_display_get_workspace_manager (display); g_assert (app->running_state == NULL); - screen = shell_global_get_screen (shell_global_get ()); app->running_state = g_slice_new0 (ShellAppRunningState); app->running_state->refcount = 1; app->running_state->workspace_switch_id = - g_signal_connect (screen, "workspace-switched", G_CALLBACK(shell_app_on_ws_switch), app); + g_signal_connect (workspace_manager, "workspace-switched", + G_CALLBACK (shell_app_on_ws_switch), app); app->running_state->session = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL); g_assert (app->running_state->session != NULL); @@ -1349,7 +1363,9 @@ shell_app_update_app_menu (ShellApp *app, static void unref_running_state (ShellAppRunningState *state) { - MetaScreen *screen; + MetaDisplay *display = shell_global_get_display (shell_global_get ()); + MetaWorkspaceManager *workspace_manager = + meta_display_get_workspace_manager (display); g_assert (state->refcount > 0); @@ -1357,8 +1373,7 @@ unref_running_state (ShellAppRunningState *state) if (state->refcount > 0) return; - screen = shell_global_get_screen (shell_global_get ()); - g_signal_handler_disconnect (screen, state->workspace_switch_id); + g_signal_handler_disconnect (workspace_manager, state->workspace_switch_id); g_clear_object (&state->application_proxy); diff --git a/src/shell-global.c b/src/shell-global.c index c67ac4e4a..52b1f72a4 100644 --- a/src/shell-global.c +++ b/src/shell-global.c @@ -28,6 +28,8 @@ #include #include #include +#include +#include #ifdef HAVE_SYSTEMD #include @@ -60,9 +62,10 @@ struct _ShellGlobal { Window stage_xwindow; MetaDisplay *meta_display; + MetaWorkspaceManager *workspace_manager; GdkDisplay *gdk_display; + MetaX11Display *x11_display; Display *xdisplay; - MetaScreen *meta_screen; char *session_mode; @@ -96,8 +99,8 @@ enum { PROP_0, PROP_SESSION_MODE, - PROP_SCREEN, PROP_DISPLAY, + PROP_WORKSPACE_MANAGER, PROP_SCREEN_WIDTH, PROP_SCREEN_HEIGHT, PROP_STAGE, @@ -163,17 +166,17 @@ shell_global_get_property(GObject *object, case PROP_SESSION_MODE: g_value_set_string (value, shell_global_get_session_mode (global)); break; - case PROP_SCREEN: - g_value_set_object (value, global->meta_screen); - break; case PROP_DISPLAY: g_value_set_object (value, global->meta_display); break; + case PROP_WORKSPACE_MANAGER: + g_value_set_object (value, global->workspace_manager); + break; case PROP_SCREEN_WIDTH: { int width, height; - meta_screen_get_size (global->meta_screen, &width, &height); + meta_display_get_size (global->meta_display, &width, &height); g_value_set_int (value, width); } break; @@ -181,7 +184,7 @@ shell_global_get_property(GObject *object, { int width, height; - meta_screen_get_size (global->meta_screen, &width, &height); + meta_display_get_size (global->meta_display, &width, &height); g_value_set_int (value, height); } break; @@ -189,10 +192,10 @@ shell_global_get_property(GObject *object, g_value_set_object (value, global->stage); break; case PROP_WINDOW_GROUP: - g_value_set_object (value, meta_get_window_group_for_screen (global->meta_screen)); + g_value_set_object (value, meta_get_window_group_for_display (global->meta_display)); break; case PROP_TOP_WINDOW_GROUP: - g_value_set_object (value, meta_get_top_window_group_for_screen (global->meta_screen)); + g_value_set_object (value, meta_get_top_window_group_for_display (global->meta_display)); break; case PROP_WINDOW_MANAGER: g_value_set_object (value, global->wm); @@ -370,13 +373,6 @@ shell_global_class_init (ShellGlobalClass *klass) "The session mode to use", "user", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property (gobject_class, - PROP_SCREEN, - g_param_spec_object ("screen", - "Screen", - "Metacity screen object for the shell", - META_TYPE_SCREEN, - G_PARAM_READABLE)); g_object_class_install_property (gobject_class, PROP_SCREEN_WIDTH, @@ -401,6 +397,14 @@ shell_global_class_init (ShellGlobalClass *klass) META_TYPE_DISPLAY, G_PARAM_READABLE)); + g_object_class_install_property (gobject_class, + PROP_WORKSPACE_MANAGER, + g_param_spec_object ("workspace-manager", + "Workspace manager", + "Workspace manager", + META_TYPE_WORKSPACE_MANAGER, + G_PARAM_READABLE)); + g_object_class_install_property (gobject_class, PROP_STAGE, g_param_spec_object ("stage", @@ -564,7 +568,7 @@ focus_window_changed (MetaDisplay *display, /* If the stage window became unfocused, drop the key focus * on Clutter's side. */ - if (!meta_stage_is_focused (global->meta_screen)) + if (!meta_stage_is_focused (global->meta_display)) clutter_stage_set_key_focus (global->stage, NULL); } @@ -594,14 +598,14 @@ sync_stage_window_focus (ShellGlobal *global) actor = get_key_focused_actor (global); /* An actor got key focus and the stage needs to be focused. */ - if (actor != NULL && !meta_stage_is_focused (global->meta_screen)) - meta_focus_stage_window (global->meta_screen, + if (actor != NULL && !meta_stage_is_focused (global->meta_display)) + meta_focus_stage_window (global->meta_display, get_current_time_maybe_roundtrip (global)); /* An actor dropped key focus. Focus the default window. */ - else if (actor == NULL && meta_stage_is_focused (global->meta_screen)) - meta_screen_focus_default_window (global->meta_screen, - get_current_time_maybe_roundtrip (global)); + else if (actor == NULL && meta_stage_is_focused (global->meta_display)) + meta_display_focus_default_window (global->meta_display, + get_current_time_maybe_roundtrip (global)); } static void @@ -616,12 +620,12 @@ focus_actor_changed (ClutterStage *stage, static void sync_input_region (ShellGlobal *global) { - MetaScreen *screen = global->meta_screen; + MetaDisplay *display = global->meta_display; if (global->has_modal) - meta_set_stage_input_region (screen, None); + meta_set_stage_input_region (display, None); else - meta_set_stage_input_region (screen, global->input_region); + meta_set_stage_input_region (display, global->input_region); } /** @@ -675,17 +679,6 @@ shell_global_get_stage (ShellGlobal *global) return global->stage; } -/** - * shell_global_get_screen: - * - * Return value: (transfer none): The default #MetaScreen - */ -MetaScreen * -shell_global_get_screen (ShellGlobal *global) -{ - return global->meta_screen; -} - /** * shell_global_get_display: * @@ -712,7 +705,7 @@ shell_global_get_window_actors (ShellGlobal *global) g_return_val_if_fail (SHELL_IS_GLOBAL (global), NULL); - for (l = meta_get_window_actors (global->meta_screen); l; l = l->next) + for (l = meta_get_window_actors (global->meta_display); l; l = l->next) if (!meta_window_actor_is_destroyed (l->data)) filtered = g_list_prepend (filtered, l->data); @@ -838,13 +831,15 @@ entry_cursor_func (StEntry *entry, { ShellGlobal *global = user_data; - meta_screen_set_cursor (global->meta_screen, use_ibeam ? META_CURSOR_IBEAM : META_CURSOR_DEFAULT); + meta_display_set_cursor (global->meta_display, + use_ibeam ? META_CURSOR_IBEAM : META_CURSOR_DEFAULT); } void _shell_global_set_plugin (ShellGlobal *global, MetaPlugin *plugin) { + MetaDisplay *display; MetaBackend *backend; MetaSettings *settings; @@ -854,13 +849,15 @@ _shell_global_set_plugin (ShellGlobal *global, global->plugin = plugin; global->wm = shell_wm_new (plugin); - global->meta_screen = meta_plugin_get_screen (plugin); - global->meta_display = meta_screen_get_display (global->meta_screen); - global->xdisplay = meta_display_get_xdisplay (global->meta_display); + display = meta_plugin_get_display (plugin); + global->meta_display = display; + global->workspace_manager = meta_display_get_workspace_manager (display); + global->x11_display = meta_display_get_x11_display (display); + global->xdisplay = meta_x11_display_get_xdisplay (global->x11_display); global->gdk_display = gdk_x11_lookup_xdisplay (global->xdisplay); - global->stage = CLUTTER_STAGE (meta_get_stage_for_screen (global->meta_screen)); + global->stage = CLUTTER_STAGE (meta_get_stage_for_display (display)); if (meta_is_wayland_compositor ()) { @@ -972,13 +969,13 @@ shell_global_end_modal (ShellGlobal *global, /* If the stage window is unfocused, ensure that there's no * actor focused on Clutter's side. */ - if (!meta_stage_is_focused (global->meta_screen)) + if (!meta_stage_is_focused (global->meta_display)) clutter_stage_set_key_focus (global->stage, NULL); /* An actor dropped key focus. Focus the default window. */ - else if (get_key_focused_actor (global) && meta_stage_is_focused (global->meta_screen)) - meta_screen_focus_default_window (global->meta_screen, - get_current_time_maybe_roundtrip (global)); + else if (get_key_focused_actor (global) && meta_stage_is_focused (global->meta_display)) + meta_display_focus_default_window (global->meta_display, + get_current_time_maybe_roundtrip (global)); sync_input_region (global); } @@ -1159,9 +1156,8 @@ shell_global_reexec_self (ShellGlobal *global) */ pre_exec_close_fds (); - meta_display_unmanage_screen (shell_global_get_display (global), - shell_global_get_screen (global), - shell_global_get_current_time (global)); + meta_display_close (shell_global_get_display (global), + shell_global_get_current_time (global)); execvp (arr->pdata[0], (char**)arr->pdata); g_warning ("failed to reexec: %s", g_strerror (errno)); @@ -1246,7 +1242,7 @@ shell_global_notify_error (ShellGlobal *global, */ void shell_global_init_xdnd (ShellGlobal *global) { - Window output_window = meta_get_overlay_window (global->meta_screen); + Window output_window = meta_get_overlay_window (global->meta_display); long xdnd_version = 5; XChangeProperty (global->xdisplay, global->stage_xwindow, @@ -1284,7 +1280,7 @@ shell_global_get_pointer (ShellGlobal *global, ClutterModifierType raw_mods; MetaCursorTracker *tracker; - tracker = meta_cursor_tracker_get_for_screen (global->meta_screen); + tracker = meta_cursor_tracker_get_for_display (global->meta_display); meta_cursor_tracker_get_pointer (tracker, x, y, &raw_mods); *mods = raw_mods & CLUTTER_MODIFIER_MASK; @@ -1432,7 +1428,12 @@ shell_global_create_app_launch_context (ShellGlobal *global, gdk_app_launch_context_set_timestamp (context, timestamp); if (workspace < 0) - workspace = meta_screen_get_active_workspace_index (global->meta_screen); + { + MetaWorkspaceManager *workspace_manager = global->workspace_manager; + + workspace = + meta_workspace_manager_get_active_workspace_index (workspace_manager); + } gdk_app_launch_context_set_desktop (context, workspace); return (GAppLaunchContext *)context; diff --git a/src/shell-global.h b/src/shell-global.h index 82756f8ba..ce03fb51f 100644 --- a/src/shell-global.h +++ b/src/shell-global.h @@ -16,7 +16,6 @@ G_DECLARE_FINAL_TYPE (ShellGlobal, shell_global, SHELL, GLOBAL, GObject) ShellGlobal *shell_global_get (void); ClutterStage *shell_global_get_stage (ShellGlobal *global); -MetaScreen *shell_global_get_screen (ShellGlobal *global); MetaDisplay *shell_global_get_display (ShellGlobal *global); GList *shell_global_get_window_actors (ShellGlobal *global); GSettings *shell_global_get_settings (ShellGlobal *global); diff --git a/src/shell-recorder.c b/src/shell-recorder.c index 03b9d8253..a80a00a23 100644 --- a/src/shell-recorder.c +++ b/src/shell-recorder.c @@ -15,8 +15,8 @@ #include #include -#include #include +#include #include #include "shell-global.h" @@ -112,7 +112,7 @@ static void recorder_remove_redraw_timeout (ShellRecorder *recorder); enum { PROP_0, - PROP_SCREEN, + PROP_DISPLAY, PROP_STAGE, PROP_FRAMERATE, PROP_PIPELINE, @@ -670,12 +670,12 @@ recorder_set_stage (ShellRecorder *recorder, } static void -recorder_set_screen (ShellRecorder *recorder, - MetaScreen *screen) +recorder_set_display (ShellRecorder *recorder, + MetaDisplay *display) { MetaCursorTracker *tracker; - tracker = meta_cursor_tracker_get_for_screen (screen); + tracker = meta_cursor_tracker_get_for_display (display); if (tracker == recorder->cursor_tracker) return; @@ -760,8 +760,8 @@ shell_recorder_set_property (GObject *object, switch (prop_id) { - case PROP_SCREEN: - recorder_set_screen (recorder, g_value_get_object (value)); + case PROP_DISPLAY: + recorder_set_display (recorder, g_value_get_object (value)); break; case PROP_STAGE: recorder_set_stage (recorder, g_value_get_object (value)); @@ -825,11 +825,11 @@ shell_recorder_class_init (ShellRecorderClass *klass) gobject_class->set_property = shell_recorder_set_property; g_object_class_install_property (gobject_class, - PROP_SCREEN, - g_param_spec_object ("screen", - "Screen", - "Screen to record", - META_TYPE_SCREEN, + PROP_DISPLAY, + g_param_spec_object ("display", + "Display", + "Display to record", + META_TYPE_DISPLAY, G_PARAM_WRITABLE)); g_object_class_install_property (gobject_class, @@ -1551,7 +1551,7 @@ shell_recorder_record (ShellRecorder *recorder, recorder_add_update_pointer_timeout (recorder); /* Disable unredirection while we are recoring */ - meta_disable_unredirect_for_screen (shell_global_get_screen (shell_global_get ())); + meta_disable_unredirect_for_display (shell_global_get_display (shell_global_get ())); /* Set up repaint hook */ recorder->repaint_hook_id = clutter_threads_add_repaint_func(recorder_repaint_hook, recorder->stage, NULL); @@ -1602,7 +1602,7 @@ shell_recorder_close (ShellRecorder *recorder) recorder->state = RECORDER_STATE_CLOSED; /* Reenable after the recording */ - meta_enable_unredirect_for_screen (shell_global_get_screen (shell_global_get ())); + meta_enable_unredirect_for_display (shell_global_get_display (shell_global_get ())); /* Release the refcount we took when we started recording */ g_object_unref (recorder); diff --git a/src/shell-screenshot.c b/src/shell-screenshot.c index 85d531304..e0b765d53 100644 --- a/src/shell-screenshot.c +++ b/src/shell-screenshot.c @@ -76,7 +76,7 @@ on_screenshot_written (GObject *source, g_clear_pointer (&priv->filename_used, g_free); g_clear_pointer (&priv->datetime, g_date_time_unref); - meta_enable_unredirect_for_screen (shell_global_get_screen (priv->global)); + meta_enable_unredirect_for_display (shell_global_get_display (priv->global)); } /* called in an I/O thread */ @@ -315,19 +315,19 @@ static void grab_screenshot (ClutterActor *stage, ShellScreenshot *screenshot) { - MetaScreen *screen; + MetaDisplay *display; MetaCursorTracker *tracker; int width, height; GTask *result; GSettings *settings; ShellScreenshotPrivate *priv = screenshot->priv; - screen = shell_global_get_screen (priv->global); - meta_screen_get_size (screen, &width, &height); + display = shell_global_get_display (priv->global); + meta_display_get_size (display, &width, &height); do_grab_screenshot (screenshot, CLUTTER_STAGE (stage), 0, 0, width, height); - if (meta_screen_get_n_monitors (screen) > 1) + if (meta_display_get_n_monitors (display) > 1) { cairo_region_t *screen_region = cairo_region_create (); cairo_region_t *stage_region; @@ -336,10 +336,11 @@ grab_screenshot (ClutterActor *stage, int i; cairo_t *cr; - for (i = meta_screen_get_n_monitors (screen) - 1; i >= 0; i--) + for (i = meta_display_get_n_monitors (display) - 1; i >= 0; i--) { - meta_screen_get_monitor_geometry (screen, i, &monitor_rect); - cairo_region_union_rectangle (screen_region, (const cairo_rectangle_int_t *) &monitor_rect); + meta_display_get_monitor_geometry (display, i, &monitor_rect); + cairo_region_union_rectangle (screen_region, + (const cairo_rectangle_int_t *) &monitor_rect); } stage_rect.x = 0; @@ -374,7 +375,7 @@ grab_screenshot (ClutterActor *stage, if (priv->include_cursor && !g_settings_get_boolean (settings, MAGNIFIER_ACTIVE_KEY)) { - tracker = meta_cursor_tracker_get_for_screen (screen); + tracker = meta_cursor_tracker_get_for_display (display); _draw_cursor_image (tracker, priv->image, priv->screenshot_area); } g_object_unref (settings); @@ -413,9 +414,8 @@ grab_window_screenshot (ClutterActor *stage, ShellScreenshotPrivate *priv = screenshot->priv; GTask *result; GSettings *settings; - MetaScreen *screen = shell_global_get_screen (priv->global); + MetaDisplay *display = shell_global_get_display (priv->global); MetaCursorTracker *tracker; - MetaDisplay *display = meta_screen_get_display (screen); MetaWindow *window = meta_display_get_focus_window (display); ClutterActor *window_actor; gfloat actor_x, actor_y; @@ -446,7 +446,7 @@ grab_window_screenshot (ClutterActor *stage, settings = g_settings_new (A11Y_APPS_SCHEMA); if (priv->include_cursor && !g_settings_get_boolean (settings, MAGNIFIER_ACTIVE_KEY)) { - tracker = meta_cursor_tracker_get_for_screen (screen); + tracker = meta_cursor_tracker_get_for_display (display); _draw_cursor_image (tracker, priv->image, priv->screenshot_area); } g_object_unref (settings); @@ -490,7 +490,7 @@ shell_screenshot_screenshot (ShellScreenshot *screenshot, stage = CLUTTER_ACTOR (shell_global_get_stage (priv->global)); - meta_disable_unredirect_for_screen (shell_global_get_screen (priv->global)); + meta_disable_unredirect_for_display (shell_global_get_display (priv->global)); g_signal_connect_after (stage, "paint", G_CALLBACK (grab_screenshot), (gpointer)screenshot); @@ -539,7 +539,7 @@ shell_screenshot_screenshot_area (ShellScreenshot *screenshot, stage = CLUTTER_ACTOR (shell_global_get_stage (priv->global)); - meta_disable_unredirect_for_screen (shell_global_get_screen (shell_global_get ())); + meta_disable_unredirect_for_display (shell_global_get_display (shell_global_get ())); g_signal_connect_after (stage, "paint", G_CALLBACK (grab_area_screenshot), (gpointer)screenshot); @@ -567,9 +567,8 @@ shell_screenshot_screenshot_window (ShellScreenshot *screenshot, ShellScreenshotCallback callback) { ShellScreenshotPrivate *priv = screenshot->priv; - MetaScreen *screen = shell_global_get_screen (priv->global); + MetaDisplay *display = shell_global_get_display (priv->global); ClutterActor *stage; - MetaDisplay *display = meta_screen_get_display (screen); MetaWindow *window = meta_display_get_focus_window (display); if (priv->filename != NULL || !window) { @@ -585,7 +584,7 @@ shell_screenshot_screenshot_window (ShellScreenshot *screenshot, stage = CLUTTER_ACTOR (shell_global_get_stage (priv->global)); - meta_disable_unredirect_for_screen (shell_global_get_screen (shell_global_get ())); + meta_disable_unredirect_for_display (shell_global_get_display (shell_global_get ())); g_signal_connect_after (stage, "paint", G_CALLBACK (grab_window_screenshot), (gpointer)screenshot); diff --git a/src/shell-tray-manager.c b/src/shell-tray-manager.c index c58e9519c..bce79bbd7 100644 --- a/src/shell-tray-manager.c +++ b/src/shell-tray-manager.c @@ -210,16 +210,13 @@ shell_tray_manager_style_changed (StWidget *theme_widget, void shell_tray_manager_manage_screen (ShellTrayManager *manager, - MetaScreen *screen, StWidget *theme_widget) { GdkDisplay *display; GdkScreen *gdk_screen; - int screen_number; display = gdk_display_get_default (); - screen_number = meta_screen_get_screen_number (screen); - gdk_screen = gdk_display_get_screen (display, screen_number); + gdk_screen = gdk_display_get_default_screen (display); na_tray_manager_manage_screen (manager->priv->na_manager, gdk_screen); diff --git a/src/shell-tray-manager.h b/src/shell-tray-manager.h index efc40decf..2e4c0f7bb 100644 --- a/src/shell-tray-manager.h +++ b/src/shell-tray-manager.h @@ -14,7 +14,6 @@ G_DECLARE_FINAL_TYPE (ShellTrayManager, shell_tray_manager, ShellTrayManager *shell_tray_manager_new (void); void shell_tray_manager_manage_screen (ShellTrayManager *manager, - MetaScreen *screen, StWidget *theme_widget); G_END_DECLS diff --git a/src/shell-window-tracker.c b/src/shell-window-tracker.c index 85c787096..cd3528fd2 100644 --- a/src/shell-window-tracker.c +++ b/src/shell-window-tracker.c @@ -13,6 +13,7 @@ #include #include #include +#include #define SN_API_NOT_YET_FROZEN 1 #include @@ -587,13 +588,16 @@ shell_window_tracker_on_window_removed (MetaWorkspace *workspace, static void load_initial_windows (ShellWindowTracker *tracker) { - GList *workspaces, *iter; - MetaScreen *screen = shell_global_get_screen (shell_global_get ()); - workspaces = meta_screen_get_workspaces (screen); + MetaDisplay *display = shell_global_get_display (shell_global_get ()); + MetaWorkspaceManager *workspace_manager = + meta_display_get_workspace_manager (display); + GList *workspaces; + GList *l; - for (iter = workspaces; iter; iter = iter->next) + workspaces = meta_workspace_manager_get_workspaces (workspace_manager); + for (l = workspaces; l; l = l->next) { - MetaWorkspace *workspace = iter->data; + MetaWorkspace *workspace = l->data; GList *windows = meta_workspace_list_windows (workspace); GList *window_iter; @@ -608,18 +612,18 @@ load_initial_windows (ShellWindowTracker *tracker) } static void -shell_window_tracker_on_n_workspaces_changed (MetaScreen *screen, - GParamSpec *pspec, - gpointer user_data) +shell_window_tracker_on_n_workspaces_changed (MetaWorkspaceManager *workspace_manager, + GParamSpec *pspec, + gpointer user_data) { ShellWindowTracker *self = SHELL_WINDOW_TRACKER (user_data); - GList *workspaces, *iter; + GList *workspaces; + GList *l; - workspaces = meta_screen_get_workspaces (screen); - - for (iter = workspaces; iter; iter = iter->next) + workspaces = meta_workspace_manager_get_workspaces (workspace_manager); + for (l = workspaces; l; l = l->next) { - MetaWorkspace *workspace = iter->data; + MetaWorkspace *workspace = l->data; /* This pair of disconnect/connect is idempotent if we were * already connected, while ensuring we get connected for @@ -642,20 +646,20 @@ shell_window_tracker_on_n_workspaces_changed (MetaScreen *screen, static void init_window_tracking (ShellWindowTracker *self) { - MetaDisplay *display; - MetaScreen *screen = shell_global_get_screen (shell_global_get ()); + MetaDisplay *display = shell_global_get_display (shell_global_get ()); + MetaWorkspaceManager *workspace_manager = + meta_display_get_workspace_manager (display); - g_signal_connect (screen, "notify::n-workspaces", + g_signal_connect (workspace_manager, "notify::n-workspaces", G_CALLBACK (shell_window_tracker_on_n_workspaces_changed), self); - display = meta_screen_get_display (screen); g_signal_connect (display, "notify::focus-window", G_CALLBACK (on_focus_window_changed), self); - shell_window_tracker_on_n_workspaces_changed (screen, NULL, self); + shell_window_tracker_on_n_workspaces_changed (workspace_manager, NULL, self); } static void -on_startup_sequence_changed (MetaScreen *screen, +on_startup_sequence_changed (MetaDisplay *display, SnStartupSequence *sequence, ShellWindowTracker *self) { @@ -671,14 +675,13 @@ on_startup_sequence_changed (MetaScreen *screen, static void shell_window_tracker_init (ShellWindowTracker *self) { - MetaScreen *screen; + MetaDisplay *display = shell_global_get_display (shell_global_get ()); self->window_to_app = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) g_object_unref); - screen = shell_global_get_screen (shell_global_get ()); - g_signal_connect (G_OBJECT (screen), "startup-sequence-changed", + g_signal_connect (display, "startup-sequence-changed", G_CALLBACK (on_startup_sequence_changed), self); load_initial_windows (self); @@ -795,8 +798,9 @@ GSList * shell_window_tracker_get_startup_sequences (ShellWindowTracker *self) { ShellGlobal *global = shell_global_get (); - MetaScreen *screen = shell_global_get_screen (global); - return meta_screen_get_startup_sequences (screen); + MetaDisplay *display = shell_global_get_display (global); + + return meta_display_get_startup_sequences (display); } /* sn_startup_sequence_ref returns void, so make a