src/solaris/classes/sun/awt/X11/XWM.java

Print this page




 266              */
 267             final long default_screen_number =
 268                 XlibWrapper.DefaultScreen(XToolkit.getDisplay());
 269             final String selection_name = "WM_S" + default_screen_number;
 270 
 271             long selection_owner =
 272                 XlibWrapper.XGetSelectionOwner(XToolkit.getDisplay(),
 273                                                XAtom.get(selection_name).getAtom());
 274             if (insLog.isLoggable(PlatformLogger.FINE)) {
 275                 insLog.finer("selection owner of " + selection_name
 276                              + " is " + selection_owner);
 277             }
 278 
 279             if (selection_owner != XConstants.None) {
 280                 return false;
 281             }
 282 
 283             winmgr_running = false;
 284             substruct.set_event_mask(XConstants.SubstructureRedirectMask);
 285 
 286             XToolkit.WITH_XERROR_HANDLER(detectWMHandler);
 287             XlibWrapper.XChangeWindowAttributes(XToolkit.getDisplay(),
 288                                                 XToolkit.getDefaultRootWindow(),
 289                                                 XConstants.CWEventMask,
 290                                                 substruct.pData);
 291             XToolkit.RESTORE_XERROR_HANDLER();
 292 
 293             /*
 294              * If no WM is running then our selection for SubstructureRedirect
 295              * succeeded and needs to be undone (hey we are *not* a WM ;-).
 296              */
 297             if (!winmgr_running) {
 298                 substruct.set_event_mask(0);
 299                 XlibWrapper.XChangeWindowAttributes(XToolkit.getDisplay(),
 300                                                     XToolkit.getDefaultRootWindow(),
 301                                                     XConstants.CWEventMask,
 302                                                     substruct.pData);
 303                 if (insLog.isLoggable(PlatformLogger.FINE)) {
 304                     insLog.finer("It looks like there is no WM thus NO_WM");
 305                 }
 306             }
 307 
 308             return !winmgr_running;
 309         } finally {
 310             substruct.dispose();
 311         }


 600      */
 601     static final XAtom XA_ICEWM_WINOPTHINT = new XAtom("_ICEWM_WINOPTHINT", false);
 602     static final char opt[] = {
 603         'A','W','T','_','I','C','E','W','M','_','T','E','S','T','\0',
 604         'a','l','l','W','o','r','k','s','p','a','c','e','s','\0',
 605         '0','\0'
 606     };
 607     static boolean prepareIsIceWM() {
 608         /*
 609          * Choose something innocuous: "AWT_ICEWM_TEST allWorkspaces 0".
 610          * IceWM expects "class\0option\0arg\0" with zero bytes as delimiters.
 611          */
 612 
 613         if (!XA_ICEWM_WINOPTHINT.isInterned()) {
 614             log.finer("{0} is not interned", XA_ICEWM_WINOPTHINT);
 615             return false;
 616         }
 617 
 618         XToolkit.awtLock();
 619         try {
 620             XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
 621             XlibWrapper.XChangePropertyS(XToolkit.getDisplay(), XToolkit.getDefaultRootWindow(),
 622                                          XA_ICEWM_WINOPTHINT.getAtom(),
 623                                          XA_ICEWM_WINOPTHINT.getAtom(),
 624                                          8, XConstants.PropModeReplace,
 625                                          new String(opt));
 626             XToolkit.RESTORE_XERROR_HANDLER();
 627 
 628             if (XToolkit.saved_error != null && XToolkit.saved_error.get_error_code() != XConstants.Success) {

 629                 log.finer("Erorr getting XA_ICEWM_WINOPTHINT property");
 630                 return false;
 631             }
 632             log.finer("Prepared for IceWM detection");
 633             return true;
 634         } finally {
 635             XToolkit.awtUnlock();
 636         }
 637     }
 638 
 639     /*
 640      * Is IceWM running?
 641      *
 642      * Note well: Only call this if awt_wm_prepareIsIceWM succeeded, or a
 643      * false positive will be reported.
 644      */
 645     static boolean isIceWM() {
 646         if (!XA_ICEWM_WINOPTHINT.isInterned()) {
 647             log.finer("{0} is not interned", XA_ICEWM_WINOPTHINT);
 648             return false;




 266              */
 267             final long default_screen_number =
 268                 XlibWrapper.DefaultScreen(XToolkit.getDisplay());
 269             final String selection_name = "WM_S" + default_screen_number;
 270 
 271             long selection_owner =
 272                 XlibWrapper.XGetSelectionOwner(XToolkit.getDisplay(),
 273                                                XAtom.get(selection_name).getAtom());
 274             if (insLog.isLoggable(PlatformLogger.FINE)) {
 275                 insLog.finer("selection owner of " + selection_name
 276                              + " is " + selection_owner);
 277             }
 278 
 279             if (selection_owner != XConstants.None) {
 280                 return false;
 281             }
 282 
 283             winmgr_running = false;
 284             substruct.set_event_mask(XConstants.SubstructureRedirectMask);
 285 
 286             XErrorHandlerUtil.WITH_XERROR_HANDLER(detectWMHandler);
 287             XlibWrapper.XChangeWindowAttributes(XToolkit.getDisplay(),
 288                                                 XToolkit.getDefaultRootWindow(),
 289                                                 XConstants.CWEventMask,
 290                                                 substruct.pData);
 291             XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
 292 
 293             /*
 294              * If no WM is running then our selection for SubstructureRedirect
 295              * succeeded and needs to be undone (hey we are *not* a WM ;-).
 296              */
 297             if (!winmgr_running) {
 298                 substruct.set_event_mask(0);
 299                 XlibWrapper.XChangeWindowAttributes(XToolkit.getDisplay(),
 300                                                     XToolkit.getDefaultRootWindow(),
 301                                                     XConstants.CWEventMask,
 302                                                     substruct.pData);
 303                 if (insLog.isLoggable(PlatformLogger.FINE)) {
 304                     insLog.finer("It looks like there is no WM thus NO_WM");
 305                 }
 306             }
 307 
 308             return !winmgr_running;
 309         } finally {
 310             substruct.dispose();
 311         }


 600      */
 601     static final XAtom XA_ICEWM_WINOPTHINT = new XAtom("_ICEWM_WINOPTHINT", false);
 602     static final char opt[] = {
 603         'A','W','T','_','I','C','E','W','M','_','T','E','S','T','\0',
 604         'a','l','l','W','o','r','k','s','p','a','c','e','s','\0',
 605         '0','\0'
 606     };
 607     static boolean prepareIsIceWM() {
 608         /*
 609          * Choose something innocuous: "AWT_ICEWM_TEST allWorkspaces 0".
 610          * IceWM expects "class\0option\0arg\0" with zero bytes as delimiters.
 611          */
 612 
 613         if (!XA_ICEWM_WINOPTHINT.isInterned()) {
 614             log.finer("{0} is not interned", XA_ICEWM_WINOPTHINT);
 615             return false;
 616         }
 617 
 618         XToolkit.awtLock();
 619         try {
 620             XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
 621             XlibWrapper.XChangePropertyS(XToolkit.getDisplay(), XToolkit.getDefaultRootWindow(),
 622                                          XA_ICEWM_WINOPTHINT.getAtom(),
 623                                          XA_ICEWM_WINOPTHINT.getAtom(),
 624                                          8, XConstants.PropModeReplace,
 625                                          new String(opt));
 626             XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
 627 
 628             if ((XErrorHandlerUtil.saved_error != null) &&
 629                 (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
 630                 log.finer("Erorr getting XA_ICEWM_WINOPTHINT property");
 631                 return false;
 632             }
 633             log.finer("Prepared for IceWM detection");
 634             return true;
 635         } finally {
 636             XToolkit.awtUnlock();
 637         }
 638     }
 639 
 640     /*
 641      * Is IceWM running?
 642      *
 643      * Note well: Only call this if awt_wm_prepareIsIceWM succeeded, or a
 644      * false positive will be reported.
 645      */
 646     static boolean isIceWM() {
 647         if (!XA_ICEWM_WINOPTHINT.isInterned()) {
 648             log.finer("{0} is not interned", XA_ICEWM_WINOPTHINT);
 649             return false;