--- old/src/java.desktop/unix/native/libawt_headless/awt/VDrawingArea.c 2016-04-14 12:54:36.940584691 -0700 +++ /dev/null 2016-02-16 10:24:22.091233905 -0800 @@ -1,344 +0,0 @@ -/* - * Copyright (c) 1997, 2012, 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. - */ - -#ifndef HEADLESS - -#include -#include "VDrawingAreaP.h" - -#endif /* !HEADLESS */ - -#include -#include - -#ifdef __linux__ -/* XXX: Shouldn't be necessary. */ -#include "awt_p.h" -#endif /* __linux__ */ - - -/****************************************************************** - * - * Provides Canvas widget which allows the X11 visual to be - * changed (the Motif DrawingArea restricts the visual to that - * of the parent widget). - * - ******************************************************************/ - - -/****************************************************************** - * - * VDrawingArea Widget Resources - * - ******************************************************************/ - -#ifndef HEADLESS -#define Offset(x) (XtOffsetOf(VDrawingAreaRec, x)) -static XtResource resources[]= -{ - { XtNvisual, XtCVisual, XtRVisual, sizeof(Visual*), - Offset(vdrawing_area.visual), XtRImmediate, CopyFromParent} -}; - - -static void Realize(); -static Boolean SetValues(); -static void Destroy (); - -static XmBaseClassExtRec baseClassExtRec = { - NULL, - NULLQUARK, - XmBaseClassExtVersion, - sizeof(XmBaseClassExtRec), - NULL, /* InitializePrehook */ - NULL, /* SetValuesPrehook */ - NULL, /* InitializePosthook */ - NULL, /* SetValuesPosthook */ - NULL, /* secondaryObjectClass */ - NULL, /* secondaryCreate */ - NULL, /* getSecRes data */ - { 0 }, /* fastSubclass flags */ - NULL, /* getValuesPrehook */ - NULL, /* getValuesPosthook */ - NULL, /* classPartInitPrehook */ - NULL, /* classPartInitPosthook*/ - NULL, /* ext_resources */ - NULL, /* compiled_ext_resources*/ - 0, /* num_ext_resources */ - FALSE, /* use_sub_resources */ - NULL, /* widgetNavigable */ - NULL, /* focusChange */ - NULL /* wrapper_data */ -}; - -VDrawingAreaClassRec vDrawingAreaClassRec = { -{ - /* Core class part */ - - /* superclass */ (WidgetClass)&xmDrawingAreaClassRec, - /* class_name */ "VDrawingArea", - /* widget_size */ sizeof(VDrawingAreaRec), - /* class_initialize */ NULL, - /* class_part_initialize*/ NULL, - /* class_inited */ FALSE, - /* initialize */ NULL, - /* initialize_hook */ NULL, - /* realize */ Realize, - /* actions */ NULL, - /* num_actions */ 0, - /* resources */ resources, - /* num_resources */ XtNumber(resources), - /* xrm_class */ NULLQUARK, - /* compress_motion */ FALSE, - /* compress_exposure */ FALSE, - /* compress_enterleave*/ FALSE, - /* visible_interest */ FALSE, - /* destroy */ Destroy, - /* resize */ XtInheritResize, - /* expose */ XtInheritExpose, - /* set_values */ SetValues, - /* set_values_hook */ NULL, - /* set_values_almost */ XtInheritSetValuesAlmost, - /* get_values_hook */ NULL, - /* accept_focus */ NULL, - /* version */ XtVersion, - /* callback_offsets */ NULL, - /* tm_table */ NULL, - /* query_geometry */ NULL, - /* display_accelerator */ NULL, - /* extension */ NULL - }, - - { /* composite_class fields */ - XtInheritGeometryManager, /* geometry_manager */ - XtInheritChangeManaged, /* change_managed */ - XtInheritInsertChild, /* insert_child */ - XtInheritDeleteChild, /* delete_child */ - NULL, /* extension */ - }, - - { /* constraint_class fields */ - NULL, /* resource list */ - 0, /* num resources */ - 0, /* constraint size */ - NULL, /* init proc */ - NULL, /* destroy proc */ - NULL, /* set values proc */ - NULL, /* extension */ - }, - - { /* manager_class fields */ - XtInheritTranslations, /* translations */ - NULL, /* syn_resources */ - 0, /* num_get_resources */ - NULL, /* syn_cont_resources */ - 0, /* num_get_cont_resources */ - XmInheritParentProcess, /* parent_process */ - NULL, /* extension */ - }, - - { /* drawingArea class */ - /* extension */ NULL - }, - - /* VDrawingArea class part */ - { - /* extension */ NULL - } -}; - -WidgetClass vDrawingAreaClass = (WidgetClass)&vDrawingAreaClassRec; - -static Boolean -SetValues(cw, rw, nw, args, num_args) - Widget cw; - Widget rw; - Widget nw; - ArgList args; - Cardinal *num_args; -{ - VDrawingAreaWidget current = (VDrawingAreaWidget)cw; - VDrawingAreaWidget new_w = (VDrawingAreaWidget)nw; - - if (new_w->vdrawing_area.visual != current->vdrawing_area.visual) { - new_w->vdrawing_area.visual = current->vdrawing_area.visual; -#ifdef DEBUG - fprintf(stdout, "VDrawingArea.SetValues: can't change visual from: visualID=%ld to visualID=%ld\n", - current->vdrawing_area.visual->visualid, - new_w->vdrawing_area.visual->visualid); -#endif - - } - - return (False); -} - -int -FindWindowInList (Window parentWindow, Window *colormap_windows, int count) -{ - int i; - - for (i = 0; i < count; i++) - if (colormap_windows [i] == parentWindow) - return i; - return -1; -} - -static void -Realize(w, value_mask, attributes) - Widget w; - XtValueMask *value_mask; - XSetWindowAttributes *attributes; -{ - Widget parent; - Status status; - Window *colormap_windows; - Window *new_colormap_windows; - int count; - int i; - VDrawingAreaWidget vd = (VDrawingAreaWidget)w; - -#ifdef DEBUG - fprintf(stdout, "VDrawingArea.Realize: visualID=%ld, depth=%d\n", - vd->vdrawing_area.visual->visualid, w->core.depth); -#endif - - /* 4328588: - * Since we have our own Realize() function, we don't execute the one for - * our super-super class, XmManager, and miss the code which checks that - * height and width != 0. I've added that here. -bchristi - */ - if (!XtWidth(w)) XtWidth(w) = 1 ; - if (!XtHeight(w)) XtHeight(w) = 1 ; - - w->core.window = XCreateWindow (XtDisplay (w), XtWindow (w->core.parent), - w->core.x, w->core.y, w->core.width, w->core.height, - 0, w->core.depth, InputOutput, - vd->vdrawing_area.visual, - *value_mask, attributes ); - - /* Need to add this window to the list of Colormap windows */ - parent = XtParent (w); - while ((parent != NULL) && (!(XtIsShell (parent)))) - parent = XtParent (parent); - if (parent == NULL) { - fprintf (stderr, "NO TopLevel widget?!\n"); - return; - } - - status = XGetWMColormapWindows (XtDisplay (w), XtWindow (parent), - &colormap_windows, &count); - - /* If status is zero, add this window and shell to the list - of colormap Windows */ - if (status == 0) { - new_colormap_windows = (Window *) calloc (2, sizeof (Window)); - new_colormap_windows [0] = XtWindow (w); - new_colormap_windows [1] = XtWindow (parent); - XSetWMColormapWindows (XtDisplay (w), XtWindow (parent), - new_colormap_windows, 2); - free (new_colormap_windows); - } else { - /* Check if parent is already in the list */ - int parent_entry = -1; - - if (count > 0) - parent_entry = FindWindowInList (XtWindow (parent), - colormap_windows, count); - if (parent_entry == -1) { /* Parent not in list */ - new_colormap_windows = (Window *) calloc (count + 2, - sizeof (Window)); - new_colormap_windows [0] = XtWindow (w); - new_colormap_windows [1] = XtWindow (parent); - for (i = 0; i < count; i++) - new_colormap_windows [i + 2] = colormap_windows [i]; - XSetWMColormapWindows (XtDisplay (w), XtWindow (parent), - new_colormap_windows, count + 2); - - } else { /* parent already in list, just add new window */ - new_colormap_windows = (Window *) calloc (count + 1, - sizeof (Window)); - new_colormap_windows [0] = XtWindow (w); - for (i = 0; i < count; i++) - new_colormap_windows [i + 1] = colormap_windows [i]; - XSetWMColormapWindows (XtDisplay (w), XtWindow (parent), - new_colormap_windows, count + 1); - } - free (new_colormap_windows); - XFree (colormap_windows); - } - - -} - -static void -Destroy(Widget widget) -{ - Status status; - Widget parent; - Window *colormap_windows; - Window *new_colormap_windows; - int count; - int listEntry; - int i; - int j; - - /* Need to get this window's parent shell first */ - parent = XtParent (widget); - while ((parent != NULL) && (!(XtIsShell (parent)))) - parent = XtParent (parent); - if (parent == NULL) { - fprintf (stderr, "NO TopLevel widget?!\n"); - return; - } - - status = XGetWMColormapWindows (XtDisplay (widget), XtWindow (parent), - &colormap_windows, &count); - - /* If status is zero, then there were no colormap windows for - the parent ?? */ - - if (status == 0) - return; - - /* Remove this window from the list of colormap windows */ - listEntry = FindWindowInList (XtWindow (widget), colormap_windows, - count); - - new_colormap_windows = (Window *) calloc (count - 1, sizeof (Window)); - j = 0; - for (i = 0; i < count; i++) { - if (i == listEntry) - continue; - new_colormap_windows [j] = colormap_windows [i]; - j++; - } - XSetWMColormapWindows (XtDisplay (widget), XtWindow (parent), - new_colormap_windows, count - 1); - free (new_colormap_windows); - XFree (colormap_windows); - -} -#endif /* !HEADLESS */