< prev index next >

src/java.desktop/unix/classes/sun/awt/X11/XWM.java

Print this page




  24  */
  25 
  26 
  27 /**
  28  * Ported from awt_wm.c, SCCS v1.11, author Valeriy Ushakov
  29  * Author: Denis Mikhalkin
  30  */
  31 package sun.awt.X11;
  32 
  33 import sun.awt.IconInfo;
  34 import jdk.internal.misc.Unsafe;
  35 import java.awt.Insets;
  36 import java.awt.Frame;
  37 import java.awt.Rectangle;
  38 import java.util.Collection;
  39 import java.util.HashMap;
  40 import java.util.LinkedList;
  41 import java.util.regex.Matcher;
  42 import java.util.regex.Pattern;
  43 import sun.util.logging.PlatformLogger;

  44 
  45 
  46 /**
  47  * Class incapsulating knowledge about window managers in general
  48  * Descendants should provide some information about specific window manager.
  49  */
  50 final class XWM
  51 {
  52 
  53     private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.X11.XWM");
  54     private static final PlatformLogger insLog = PlatformLogger.getLogger("sun.awt.X11.insets.XWM");
  55     private static final PlatformLogger stateLog = PlatformLogger.getLogger("sun.awt.X11.states.XWM");
  56 
  57     static final XAtom XA_MWM_HINTS = new XAtom();
  58 
  59     private static Unsafe unsafe = XlibWrapper.unsafe;
  60 
  61 
  62 /* Good old ICCCM */
  63     static XAtom XA_WM_STATE = new XAtom();


 513                 return false;
 514             }
 515 
 516             if (getter.getActualType() != XA_MOTIF_WM_INFO.getAtom()
 517                 || getter.getActualFormat() != 32
 518                 || getter.getNumberOfItems() != MWMConstants.PROP_MOTIF_WM_INFO_ELEMENTS
 519                 || getter.getBytesAfter() != 0)
 520             {
 521                 return false;
 522             }
 523 
 524             long wmwin = Native.getLong(getter.getData(), 1);
 525             if (wmwin != 0) {
 526                 if (XA_DT_WORKSPACE_CURRENT.isInterned()) {
 527                     /* Now check that this window has _DT_WORKSPACE_CURRENT */
 528                     XAtom[] curws = XA_DT_WORKSPACE_CURRENT.getAtomListProperty(wmwin);
 529                     if (curws.length == 0) {
 530                         return false;
 531                     }
 532                     return true;







 533                 } else {
 534                     // No DT_WORKSPACE, however in our tests MWM sometimes can be without desktop -
 535                     // and that is still MWM.  So simply check for the validity of this window
 536                     // (through WM_STATE property).
 537                     WindowPropertyGetter state_getter =
 538                         new WindowPropertyGetter(wmwin,
 539                                                  XA_WM_STATE,
 540                                                  0, 1, false,
 541                                                  XA_WM_STATE);
 542                     try {
 543                         if (state_getter.execute() == XConstants.Success &&
 544                             state_getter.getData() != 0 &&
 545                             state_getter.getActualType() == XA_WM_STATE.getAtom())
 546                         {
 547                             return true;
 548                         }
 549                     } finally {
 550                         state_getter.dispose();
 551                     }
 552                 }




  24  */
  25 
  26 
  27 /**
  28  * Ported from awt_wm.c, SCCS v1.11, author Valeriy Ushakov
  29  * Author: Denis Mikhalkin
  30  */
  31 package sun.awt.X11;
  32 
  33 import sun.awt.IconInfo;
  34 import jdk.internal.misc.Unsafe;
  35 import java.awt.Insets;
  36 import java.awt.Frame;
  37 import java.awt.Rectangle;
  38 import java.util.Collection;
  39 import java.util.HashMap;
  40 import java.util.LinkedList;
  41 import java.util.regex.Matcher;
  42 import java.util.regex.Pattern;
  43 import sun.util.logging.PlatformLogger;
  44 import sun.font.FontUtilities;
  45 
  46 
  47 /**
  48  * Class incapsulating knowledge about window managers in general
  49  * Descendants should provide some information about specific window manager.
  50  */
  51 final class XWM
  52 {
  53 
  54     private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.X11.XWM");
  55     private static final PlatformLogger insLog = PlatformLogger.getLogger("sun.awt.X11.insets.XWM");
  56     private static final PlatformLogger stateLog = PlatformLogger.getLogger("sun.awt.X11.states.XWM");
  57 
  58     static final XAtom XA_MWM_HINTS = new XAtom();
  59 
  60     private static Unsafe unsafe = XlibWrapper.unsafe;
  61 
  62 
  63 /* Good old ICCCM */
  64     static XAtom XA_WM_STATE = new XAtom();


 514                 return false;
 515             }
 516 
 517             if (getter.getActualType() != XA_MOTIF_WM_INFO.getAtom()
 518                 || getter.getActualFormat() != 32
 519                 || getter.getNumberOfItems() != MWMConstants.PROP_MOTIF_WM_INFO_ELEMENTS
 520                 || getter.getBytesAfter() != 0)
 521             {
 522                 return false;
 523             }
 524 
 525             long wmwin = Native.getLong(getter.getData(), 1);
 526             if (wmwin != 0) {
 527                 if (XA_DT_WORKSPACE_CURRENT.isInterned()) {
 528                     /* Now check that this window has _DT_WORKSPACE_CURRENT */
 529                     XAtom[] curws = XA_DT_WORKSPACE_CURRENT.getAtomListProperty(wmwin);
 530                     if (curws.length == 0) {
 531                         return false;
 532                     }
 533                     return true;
 534                 } else if (FontUtilities.isAIX) {
 535                     XQueryTree qt = new XQueryTree(wmwin);
 536                     try {
 537                         if (qt.execute() > 0) return true;
 538                     } finally {
 539                         qt.dispose();
 540                     }
 541                 } else {
 542                     // No DT_WORKSPACE, however in our tests MWM sometimes can be without desktop -
 543                     // and that is still MWM.  So simply check for the validity of this window
 544                     // (through WM_STATE property).
 545                     WindowPropertyGetter state_getter =
 546                         new WindowPropertyGetter(wmwin,
 547                                                  XA_WM_STATE,
 548                                                  0, 1, false,
 549                                                  XA_WM_STATE);
 550                     try {
 551                         if (state_getter.execute() == XConstants.Success &&
 552                             state_getter.getData() != 0 &&
 553                             state_getter.getActualType() == XA_WM_STATE.getAtom())
 554                         {
 555                             return true;
 556                         }
 557                     } finally {
 558                         state_getter.dispose();
 559                     }
 560                 }


< prev index next >