/*
 * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */
package sun.awt.X11;

import java.awt.*;
import java.awt.peer.*;

import sun.awt.AWTAccessor;
import sun.awt.AWTAccessor.ComponentAccessor;
import sun.awt.SunGraphicsCallback;

public class XPanelPeer extends XCanvasPeer implements PanelPeer {

    XEmbeddingContainer embedder = null; //new XEmbeddingContainer();
    
Embeds the given window into container using XEmbed protocol
/** * Embeds the given window into container using XEmbed protocol */
public void xembed(long window) { if (embedder != null) { embedder.add(window); } } XPanelPeer() {} XPanelPeer(XCreateWindowParams params) { super(params); } XPanelPeer(Component target) { super(target); } void postInit(XCreateWindowParams params) { super.postInit(params); if (embedder != null) { embedder.install(this); } } public Insets getInsets() { return new Insets(0, 0, 0, 0); } public void paint(Graphics g) { super.paint(g); SunGraphicsCallback.PaintHeavyweightComponentsCallback.getInstance(). runComponents(((Container)target).getComponents(), g, SunGraphicsCallback.LIGHTWEIGHTS | SunGraphicsCallback.HEAVYWEIGHTS); } public void print(Graphics g) { super.print(g); SunGraphicsCallback.PrintHeavyweightComponentsCallback.getInstance(). runComponents(((Container)target).getComponents(), g, SunGraphicsCallback.LIGHTWEIGHTS | SunGraphicsCallback.HEAVYWEIGHTS); } public void setBackground(Color c) { Component comp; int i; Container cont = (Container) target; final ComponentAccessor acc = AWTAccessor.getComponentAccessor(); synchronized(target.getTreeLock()) { int n = cont.getComponentCount(); for(i=0; i < n; i++) { comp = cont.getComponent(i); ComponentPeer peer = acc.getPeer(comp); if (peer != null) { Color color = comp.getBackground(); if (color == null || color.equals(c)) { peer.setBackground(c); } } } } super.setBackground(c); } public void setForeground(Color c) { setForegroundForHierarchy((Container) target, c); } private void setForegroundForHierarchy(Container cont, Color c) { synchronized(target.getTreeLock()) { final ComponentAccessor acc = AWTAccessor.getComponentAccessor(); int n = cont.getComponentCount(); for(int i=0; i < n; i++) { Component comp = cont.getComponent(i); Color color = comp.getForeground(); if (color == null || color.equals(c)) { ComponentPeer cpeer = acc.getPeer(comp); if (cpeer != null) { cpeer.setForeground(c); } if (cpeer instanceof LightweightPeer && comp instanceof Container) { setForegroundForHierarchy((Container) comp, c); } } } } } public void dispose() { if (embedder != null) { embedder.deinstall(); } super.dispose(); } protected boolean shouldFocusOnClick() { // Return false if this container has children so in that case it won't // be focused. Return true otherwise. return ((Container)target).getComponentCount() == 0; } }