ui: WM detection / full screen on Linux restored
authorRoman Shevchenko <roman.shevchenko@jetbrains.com>
Wed, 12 Nov 2014 13:48:30 +0000 (14:48 +0100)
committerRoman Shevchenko <roman.shevchenko@jetbrains.com>
Wed, 12 Nov 2014 13:48:30 +0000 (14:48 +0100)
platform/platform-impl/src/com/intellij/openapi/wm/impl/X11UiUtil.java

index 120579bcb80942854c379275d8de564bcaa4a3d2..2df2582626b460593b70fa773ed3f19ffa67d82b 100644 (file)
@@ -125,9 +125,19 @@ public class X11UiUtil {
       return null;
     }
 
+    private long getRootWindow(long screen) throws Exception {
+      awtLock.invoke(null);
+      try {
+        return (Long)RootWindow.invoke(null, display, screen);
+      }
+      finally {
+        awtUnlock.invoke(null);
+      }
+    }
+
     @Nullable
     private Long getNetWmWindow() throws Exception {
-      long rootWindow = (Long)RootWindow.invoke(null, display, 0);
+      long rootWindow = getRootWindow(0);
       long[] values = getLongArrayProperty(rootWindow, NET_SUPPORTING_WM_CHECK, XA_WINDOW);
       return values != null && values.length > 0 ? values[0] : null;
     }
@@ -358,7 +368,7 @@ public class X11UiUtil {
       @SuppressWarnings("deprecation") ComponentPeer peer = frame.getPeer();
       long window = (Long)X11.getWindow.invoke(peer);
       long screen = (Long)X11.getScreenNumber.invoke(peer);
-      long rootWindow = (Long)X11.RootWindow.invoke(null, X11.display, screen);
+      long rootWindow = X11.getRootWindow(screen);
       X11.sendClientMessage(rootWindow, window, X11.NET_WM_STATE, NET_WM_STATE_TOGGLE, X11.NET_WM_STATE_FULLSCREEN);
     }
     catch (Throwable t) {