medenagan / window-corner-preview

GNOME Shell extension showing a video preview on the corner of the screen
https://extensions.gnome.org/extension/1227/window-corner-preview/
MIT License
135 stars 26 forks source link

Extension doesn't work in 3.30.0 #5

Closed peeyush-sharma closed 6 years ago

peeyush-sharma commented 6 years ago

Describe the bug The Extension fails to display anything on Gnome 3.30.0 on ArchLinux

Potential Fix Attaching git diff here that fixed the problem for me.

diff --git a/window-corner-preview@fabiomereu.it/extension.js b/window-corner-preview@fabiomereu.it/extension.js
index 35bd6a6..bef8d54 100644
--- a/window-corner-preview@fabiomereu.it/extension.js
+++ b/window-corner-preview@fabiomereu.it/extension.js
@@ -93,10 +93,10 @@ function deNormalizeRange(normal, min, max, step) {
 function getWorkspaceWindowsArray() {
     let array = [];

-    let wsActive = global.screen.get_active_workspace_index();
+    let wsActive = global.workspace_manager.get_active_workspace_index();

-    for (let i = 0; i < global.screen.n_workspaces; i++) {
-        let workspace = global.screen.get_workspace_by_index(i);
+    for (let i = 0; i < global.workspace_manager.n_workspaces; i++) {
+        let workspace = global.workspace_manager.get_workspace_by_index(i);
         let windows = workspace.list_windows();
         if (windows.length) array.push({
             workspace: workspace,
@@ -479,7 +479,7 @@ function CWindowPreview() {
     self._setPosition = function() {
         let _posX, _posY;

-        let rectMonitor = Main.layoutManager.getWorkAreaForMonitor(global.screen.get_current_monitor());
+        let rectMonitor = Main.layoutManager.getWorkAreaForMonitor(global.display.get_current_monitor());

         let rectChrome = {
             x1: rectMonitor.x,
@@ -553,7 +553,7 @@ function CWindowPreview() {

         // To mantain a similar thumbnail size whenever the user selects a different window to preview,
         // instead of zooming out based on the window size itself, it takes the window screen as a standard unit (= 100%)
-        let rectMonitor = Main.layoutManager.getWorkAreaForMonitor(global.screen.get_current_monitor());
+        let rectMonitor = Main.layoutManager.getWorkAreaForMonitor(global.display.get_current_monitor());
         let targetRatio = rectMonitor.width * self.zoom / windowWidth;

         // No magnification allowed (KNOWN ISSUE: there's no height control if used, it still needs optimizing)

To Reproduce Steps to reproduce the behavior:

  1. Install Gnome 3.30.0
  2. Install Extension
  3. Try to use extension.
  4. Nothing displays, the mini window doesn't pop up.

Expected behavior A preview window should've popped up.

Desktop (please complete the following information):

ilovesusu commented 6 years ago

fixed the problem for me

sagitta1618 commented 6 years ago

Got the same issue with Debian Buster with Gnome 3.30 using wayland. Found a solution to maintain compatibility between the old and new version of gnome here : https://github.com/micheleg/dash-to-dock/commit/8398d41c6c122e654daec8c1bf5615c918f99f15

Here is the patch I applied:

--- extension.js    2018-09-28 21:38:26.888714283 +0100
+++ extension.js.orig   2017-09-26 14:35:40.000000000 +0100
@@ -74,22 +74,6 @@
 // Settings feature is under development, for now use SETTING_* constants
 const SETTING_MAGNIFICATION_ALLOWED = false;

-
-
-// This is wrapper to maintain compatibility with GNOME-Shell 3.30+ as well as
-// previous versions.
-var DisplayWrapper = {
-    getScreen: function() {
-        return global.screen || global.display;
-    },
-    getWorkspaceManager: function() {
-        return global.screen || global.workspace_manager;
-    },
-    getMonitorManager: function() {
-        return global.screen || Meta.MonitorManager.get();
-    }
-};
-
 // Utilities
 function normalizeRange(denormal, min, max, step) {
     if (step !== undefined) denormal = Math.round(denormal / step) * step;  
@@ -109,10 +93,10 @@
 function getWorkspaceWindowsArray() {
     let array = [];

-    let wsActive = DisplayWrapper.getWorkspaceManager().get_active_workspace_index();
+    let wsActive = global.screen.get_active_workspace_index();

-    for (let i = 0; i < DisplayWrapper.getWorkspaceManager().n_workspaces; i++) {
-        let workspace = DisplayWrapper.getWorkspaceManager().get_workspace_by_index(i);
+    for (let i = 0; i < global.screen.n_workspaces; i++) {
+        let workspace = global.screen.get_workspace_by_index(i);
         let windows = workspace.list_windows();
         if (windows.length) array.push({
             workspace: workspace,
@@ -495,7 +479,7 @@
     self._setPosition = function() {
         let _posX, _posY;

-        let rectMonitor = Main.layoutManager.getWorkAreaForMonitor(DisplayWrapper.getScreen().get_current_monitor());
+        let rectMonitor = Main.layoutManager.getWorkAreaForMonitor(global.screen.get_current_monitor());

         let rectChrome = {
             x1: rectMonitor.x,
@@ -569,7 +553,7 @@

         // To mantain a similar thumbnail size whenever the user selects a different window to preview,
         // instead of zooming out based on the window size itself, it takes the window screen as a standard unit (= 100%)
-        let rectMonitor = Main.layoutManager.getWorkAreaForMonitor(DisplayWrapper.getScreen().get_current_monitor());
+        let rectMonitor = Main.layoutManager.getWorkAreaForMonitor(global.screen.get_current_monitor());
         let targetRatio = rectMonitor.width * self.zoom / windowWidth;

         // No magnification allowed (KNOWN ISSUE: there's no height control if used, it still needs optimizing)
tYYGH commented 6 years ago

@sagitta1618’s patch seems to work for me

medenagan commented 6 years ago

Merged in testing