6690036: some code cleanup for insets-related code
Summary: all insets-related code from XWindowPeer, XFramePeer, and XDialogPeer has been moved to XDecoratedPeer.
Reviewed-by: anthony
--- a/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java Tue Apr 15 14:14:33 2008 +0400
+++ b/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java Fri Apr 18 11:38:32 2008 +0400
@@ -40,9 +40,7 @@
private static final Logger log = Logger.getLogger("sun.awt.X11.XDecoratedPeer");
private static final Logger insLog = Logger.getLogger("sun.awt.X11.insets.XDecoratedPeer");
private static final Logger focusLog = Logger.getLogger("sun.awt.X11.focus.XDecoratedPeer");
- private final static Logger iconLog = Logger.getLogger("sun.awt.X11.icon.XDecoratedPeer");
-
- private static XAtom resize_request = new XAtom("_SUN_AWT_RESIZE_REQUEST", false);
+ private static final Logger iconLog = Logger.getLogger("sun.awt.X11.icon.XDecoratedPeer");
// Set to true when we get the first ConfigureNotify after being
// reparented - indicates that WM has adopted the top-level.
@@ -73,14 +71,11 @@
void preInit(XCreateWindowParams params) {
super.preInit(params);
- if (!resize_request.isInterned()) {
- resize_request.intern(false);
- }
winAttr.initialFocus = true;
- currentInsets = new Insets(0,0,0,0); // replacemenet for wdata->top, left, bottom, right
+ currentInsets = new Insets(0,0,0,0);
+ applyGuessedInsets();
- applyGuessedInsets();
Rectangle bounds = (Rectangle)params.get(BOUNDS);
dimensions = new WindowDimensions(bounds, getRealInsets(), false);
params.put(BOUNDS, dimensions.getClientRect());
@@ -98,7 +93,10 @@
// happen after the X window is created.
initResizability();
updateSizeHints(dimensions);
+ XWM.requestWMExtents(getWindow());
+
content = XContentWindow.createContent(this);
+
if (warningWindow != null) {
warningWindow.toFront();
}
@@ -121,7 +119,6 @@
updateMinSizeHints();
}
-
private void updateMinSizeHints() {
if (isResizable()) {
Dimension minimumSize = getTargetMinimumSize();
@@ -238,23 +235,59 @@
return false;
}
- Insets difference(Insets i1, Insets i2) {
+ private static Insets difference(Insets i1, Insets i2) {
return new Insets(i1.top-i2.top, i1.left - i2.left, i1.bottom-i2.bottom, i1.right-i2.right);
}
- void add(Insets i1, Insets i2) {
- i1.left += i2.left;
- i1.top += i2.top;
- i1.right += i2.right;
- i1.bottom += i2.bottom;
- }
- boolean isNull(Insets i) {
+ private static boolean isNull(Insets i) {
return (i == null) || ((i.left | i.top | i.right | i.bottom) == 0);
}
- Insets copy(Insets i) {
+
+ private static Insets copy(Insets i) {
return new Insets(i.top, i.left, i.bottom, i.right);
}
+ // insets which we get from WM (e.g from _NET_FRAME_EXTENTS)
+ private Insets wm_set_insets;
+
+ private Insets getWMSetInsets(XAtom changedAtom) {
+ if (isEmbedded()) {
+ return null;
+ }
+
+ if (wm_set_insets != null) {
+ return wm_set_insets;
+ }
+
+ if (changedAtom == null) {
+ wm_set_insets = XWM.getInsetsFromExtents(getWindow());
+ } else {
+ wm_set_insets = XWM.getInsetsFromProp(getWindow(), changedAtom);
+ }
+
+ insLog.log(Level.FINER, "FRAME_EXTENTS: {0}", new Object[]{wm_set_insets});
+
+ if (wm_set_insets != null) {
+ wm_set_insets = copy(wm_set_insets);
+ }
+ return wm_set_insets;
+ }
+
+ private void resetWMSetInsets() {
+ wm_set_insets = null;
+ }
+
+ public void handlePropertyNotify(XEvent xev) {
+ super.handlePropertyNotify(xev);
+
+ XPropertyEvent ev = xev.get_xproperty();
+ if (ev.get_atom() == XWM.XA_KDE_NET_WM_FRAME_STRUT.getAtom()
+ || ev.get_atom() == XWM.XA_NET_FRAME_EXTENTS.getAtom())
+ {
+ getWMSetInsets(XAtom.get(ev.get_atom()));
+ }
+ }
+
long reparent_serial = 0;
public void handleReparentNotifyEvent(XEvent xev) {
@@ -337,34 +370,29 @@
Insets correction = difference(correctWM, currentInsets);
insLog.log(Level.FINEST, "Corrention {0}", new Object[] {correction});
if (!isNull(correction)) {
- /*
- * Actual insets account for menubar/warning label,
- * so we can't assign directly but must adjust them.
- */
- add(currentInsets, correction);
+ currentInsets = copy(correctWM);
applyGuessedInsets();
//Fix for 6318109: PIT: Min Size is not honored properly when a
//smaller size is specified in setSize(), XToolkit
//update minimum size hints
updateMinSizeHints();
-
- /*
- * If this window has been sized by a pack() we need
- * to keep the interior geometry intact. Since pack()
- * computed width and height with wrong insets, we
- * must adjust the target dimensions appropriately.
- */
}
if (insLog.isLoggable(Level.FINER)) insLog.finer("Dimensions before reparent: " + dimensions);
dimensions.setInsets(getRealInsets());
insets_corrected = true;
- if (isMaximized()) {
+ if (isMaximized() || isNull(correction)) {
return;
}
+ /*
+ * If this window has been sized by a pack() we need
+ * to keep the interior geometry intact. Since pack()
+ * computed width and height with wrong insets, we
+ * must adjust the target dimensions appropriately.
+ */
if ((getHints().get_flags() & (XUtilConstants.USPosition | XUtilConstants.PPosition)) != 0) {
reshape(dimensions, SET_BOUNDS, false);
} else {
@@ -384,10 +412,10 @@
protected Insets guessInsets() {
- if (isEmbedded()) {
+ if (isEmbedded() || isTargetUndecorated()) {
return new Insets(0, 0, 0, 0);
} else {
- if (currentInsets.top > 0) {
+ if (!isNull(currentInsets)) {
/* insets were set on wdata by System Properties */
return copy(currentInsets);
} else {
@@ -403,7 +431,6 @@
private void applyGuessedInsets() {
Insets guessed = guessInsets();
currentInsets = copy(guessed);
- insets = copy(currentInsets);
}
public void revalidate() {
@@ -416,16 +443,18 @@
}
Insets getRealInsets() {
- if (isNull(insets)) {
+ if (isNull(currentInsets)) {
applyGuessedInsets();
}
- return insets;
+ return currentInsets;
}
public Insets getInsets() {
Insets in = copy(getRealInsets());
in.top += getMenuBarHeight() + getWarningWindowHeight();
- if (insLog.isLoggable(Level.FINEST)) insLog.log(Level.FINEST, "Get insets returns {0}", new Object[] {in});
+ if (insLog.isLoggable(Level.FINEST)) {
+ insLog.log(Level.FINEST, "Get insets returns {0}", new Object[] {in});
+ }
return in;
}
@@ -835,7 +864,7 @@
public void setResizable(boolean resizable) {
int fs = winAttr.functions;
if (!isResizable() && resizable) {
- insets = currentInsets = new Insets(0, 0, 0, 0);
+ currentInsets = new Insets(0, 0, 0, 0);
resetWMSetInsets();
if (!isEmbedded()) {
setReparented(false);
@@ -849,7 +878,7 @@
winAttr.functions = fs;
XWM.setShellResizable(this);
} else if (isResizable() && !resizable) {
- insets = currentInsets = new Insets(0, 0, 0, 0);
+ currentInsets = new Insets(0, 0, 0, 0);
resetWMSetInsets();
if (!isEmbedded()) {
setReparented(false);
@@ -1004,10 +1033,6 @@
} else if (cl.get_data(0) == wm_take_focus.getAtom()) {
handleWmTakeFocus(cl);
}
- } else if (cl.get_message_type() == resize_request.getAtom()) {
- reshape((int)cl.get_data(0), (int)cl.get_data(1),
- (int)cl.get_data(2), (int)cl.get_data(3),
- (int)cl.get_data(4), true);
}
}
--- a/jdk/src/solaris/classes/sun/awt/X11/XDialogPeer.java Tue Apr 15 14:14:33 2008 +0400
+++ b/jdk/src/solaris/classes/sun/awt/X11/XDialogPeer.java Fri Apr 18 11:38:32 2008 +0400
@@ -80,14 +80,6 @@
super.setVisible(vis);
}
- protected Insets guessInsets() {
- if (isTargetUndecorated()) {
- return new Insets(0, 0, 0, 0);
- } else {
- return super.guessInsets();
- }
- }
-
@Override
boolean isTargetUndecorated() {
if (undecorated != null) {
--- a/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java Tue Apr 15 14:14:33 2008 +0400
+++ b/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java Fri Apr 18 11:38:32 2008 +0400
@@ -87,14 +87,6 @@
setupState(true);
}
- protected Insets guessInsets() {
- if (isTargetUndecorated()) {
- return new Insets(0, 0, 0, 0);
- } else {
- return super.guessInsets();
- }
- }
-
@Override
boolean isTargetUndecorated() {
if (undecorated != null) {
--- a/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java Tue Apr 15 14:14:33 2008 +0400
+++ b/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java Fri Apr 18 11:38:32 2008 +0400
@@ -65,7 +65,6 @@
static XAtom wm_delete_window;
static XAtom wm_take_focus;
- Insets insets = new Insets( 0, 0, 0, 0 );
XWindowAttributesData winAttr;
private boolean cachedFocusableWindow;
XWarningWindow warningWindow;
@@ -139,7 +138,6 @@
XA_NET_WM_STATE = XAtom.get("_NET_WM_STATE");
winAttr = new XWindowAttributesData();
- insets = new Insets(0,0,0,0);
params.put(OVERRIDE_REDIRECT, Boolean.valueOf(isOverrideRedirect()));
@@ -260,7 +258,6 @@
setSaveUnder(true);
- XWM.requestWMExtents(getWindow());
updateIconImages();
}
@@ -541,9 +538,7 @@
}
public Insets getInsets() {
- Insets in = (Insets)(insets.clone());
- in.top += getWarningWindowHeight();
- return in;
+ return new Insets(getWarningWindowHeight(), 0, 0, 0);
}
// NOTE: This method may be called by privileged threads.
@@ -1002,7 +997,8 @@
return ret;
}
- private boolean isDesktopWindow( long wi ) {
+
+ private static boolean isDesktopWindow( long wi ) {
return XWM.getWM().isDesktopWindow( wi );
}
@@ -1176,10 +1172,6 @@
// State has changed, invalidate saved value
stateChanged = true;
stateChanged(ev.get_time(), savedState, getWMState());
- } else if (ev.get_atom() == XWM.XA_KDE_NET_WM_FRAME_STRUT.getAtom()
- || ev.get_atom() == XWM.XA_NET_FRAME_EXTENTS.getAtom())
- {
- getWMSetInsets(XAtom.get(ev.get_atom()));
}
}
@@ -1887,37 +1879,6 @@
}
}
- private Insets wm_set_insets;
- public Insets getWMSetInsets(XAtom changedAtom) {
- if (isEmbedded()) {
- return null;
- }
-
- if (wm_set_insets != null) {
- return wm_set_insets;
- }
-
- if (changedAtom == null) {
- wm_set_insets = XWM.getInsetsFromExtents(getWindow());
- } else {
- wm_set_insets = XWM.getInsetsFromProp(getWindow(), changedAtom);
- }
-
- insLog.log(Level.FINER, "FRAME_EXTENTS: {0}", new Object[]{wm_set_insets});
-
- if (wm_set_insets != null) {
- handleWMSetInsets(wm_set_insets);
- }
- return wm_set_insets;
- }
-
- protected void handleWMSetInsets(Insets newInsets) {
- wm_set_insets = (Insets)newInsets.clone();
- }
-
- public void resetWMSetInsets() {
- wm_set_insets = null;
- }
protected synchronized void updateDropTarget() {
if (dropTargetCount > 0) {
long window = getWindow();