33 package sun.awt.X11; |
33 package sun.awt.X11; |
34 |
34 |
35 import java.util.*; |
35 import java.util.*; |
36 import java.awt.*; |
36 import java.awt.*; |
37 import sun.awt.XSettings; |
37 import sun.awt.XSettings; |
38 import java.util.logging.*; |
38 import sun.util.logging.PlatformLogger; |
39 |
|
40 |
39 |
41 |
40 |
42 class XAWTXSettings extends XSettings implements XMSelectionListener { |
41 class XAWTXSettings extends XSettings implements XMSelectionListener { |
43 |
42 |
44 private final XAtom xSettingsPropertyAtom = XAtom.get("_XSETTINGS_SETTINGS"); |
43 private final XAtom xSettingsPropertyAtom = XAtom.get("_XSETTINGS_SETTINGS"); |
45 |
44 |
46 private static Logger log = Logger.getLogger("sun.awt.X11.XAWTXSettings"); |
45 private static PlatformLogger log = PlatformLogger.getLogger("sun.awt.X11.XAWTXSettings"); |
47 |
46 |
48 /* The maximal length of the property data. */ |
47 /* The maximal length of the property data. */ |
49 public static final long MAX_LENGTH = 1000000; |
48 public static final long MAX_LENGTH = 1000000; |
50 |
49 |
51 XMSelection settings; |
50 XMSelection settings; |
54 initXSettings(); |
53 initXSettings(); |
55 |
54 |
56 } |
55 } |
57 |
56 |
58 void initXSettings() { |
57 void initXSettings() { |
59 if (log.isLoggable(Level.FINE)) log.fine("Initializing XAWT XSettings"); |
58 if (log.isLoggable(PlatformLogger.FINE)) log.fine("Initializing XAWT XSettings"); |
60 settings = new XMSelection("_XSETTINGS"); |
59 settings = new XMSelection("_XSETTINGS"); |
61 settings.addSelectionListener(this); |
60 settings.addSelectionListener(this); |
62 initPerScreenXSettings(); |
61 initPerScreenXSettings(); |
63 } |
62 } |
64 |
63 |
65 void dispose() { |
64 void dispose() { |
66 settings.removeSelectionListener(this); |
65 settings.removeSelectionListener(this); |
67 } |
66 } |
68 |
67 |
69 public void ownerDeath(int screen, XMSelection sel, long deadOwner) { |
68 public void ownerDeath(int screen, XMSelection sel, long deadOwner) { |
70 if (log.isLoggable(Level.FINE)) log.fine("Owner " + deadOwner + " died for selection " + sel + " screen "+ screen); |
69 if (log.isLoggable(PlatformLogger.FINE)) log.fine("Owner " + deadOwner + " died for selection " + sel + " screen "+ screen); |
71 } |
70 } |
72 |
71 |
73 |
72 |
74 public void ownerChanged(int screen, XMSelection sel, long newOwner, long data, long timestamp) { |
73 public void ownerChanged(int screen, XMSelection sel, long newOwner, long data, long timestamp) { |
75 if (log.isLoggable(Level.FINE)) log.fine("New Owner "+ newOwner + " for selection = " + sel + " screen " +screen ); |
74 if (log.isLoggable(PlatformLogger.FINE)) log.fine("New Owner "+ newOwner + " for selection = " + sel + " screen " +screen ); |
76 } |
75 } |
77 |
76 |
78 public void selectionChanged(int screen, XMSelection sel, long owner , XPropertyEvent event) { |
77 public void selectionChanged(int screen, XMSelection sel, long owner , XPropertyEvent event) { |
79 log.fine("Selection changed on sel " + sel + " screen = " + screen + " owner = " + owner + " event = " + event); |
78 log.fine("Selection changed on sel " + sel + " screen = " + screen + " owner = " + owner + " event = " + event); |
80 updateXSettings(screen,owner); |
79 updateXSettings(screen,owner); |
81 } |
80 } |
82 |
81 |
83 void initPerScreenXSettings() { |
82 void initPerScreenXSettings() { |
84 if (log.isLoggable(Level.FINE)) log.fine("Updating Per XSettings changes"); |
83 if (log.isLoggable(PlatformLogger.FINE)) log.fine("Updating Per XSettings changes"); |
85 |
84 |
86 /* |
85 /* |
87 * As toolkit cannot yet cope with per-screen desktop properties, |
86 * As toolkit cannot yet cope with per-screen desktop properties, |
88 * only report XSETTINGS changes on the default screen. This |
87 * only report XSETTINGS changes on the default screen. This |
89 * should be "good enough" for most cases. |
88 * should be "good enough" for most cases. |
127 false, xSettingsPropertyAtom.getAtom() ); |
126 false, xSettingsPropertyAtom.getAtom() ); |
128 try { |
127 try { |
129 int status = getter.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance()); |
128 int status = getter.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance()); |
130 |
129 |
131 if (status != XConstants.Success || getter.getData() == 0) { |
130 if (status != XConstants.Success || getter.getData() == 0) { |
132 if (log.isLoggable(Level.FINE)) log.fine("OH OH : getter failed status = " + status ); |
131 if (log.isLoggable(PlatformLogger.FINE)) log.fine("OH OH : getter failed status = " + status ); |
133 settings = null; |
132 settings = null; |
134 } |
133 } |
135 |
134 |
136 long ptr = getter.getData(); |
135 long ptr = getter.getData(); |
137 |
136 |
138 if (log.isLoggable(Level.FINE)) log.fine("noItems = " + getter.getNumberOfItems()); |
137 if (log.isLoggable(PlatformLogger.FINE)) log.fine("noItems = " + getter.getNumberOfItems()); |
139 byte array[] = Native.toBytes(ptr,getter.getNumberOfItems()); |
138 byte array[] = Native.toBytes(ptr,getter.getNumberOfItems()); |
140 if (array != null) { |
139 if (array != null) { |
141 settings = update(array); |
140 settings = update(array); |
142 } |
141 } |
143 } finally { |
142 } finally { |