diff options
| author | graydon <graydon@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-05-27 06:17:44 +0000 |
|---|---|---|
| committer | graydon <graydon@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-05-27 06:17:44 +0000 |
| commit | 7be583b48b04633a592ab530473b7f995955b160 (patch) | |
| tree | 2ffcb4d3889f27364cadf6d34acb5b88d5881e8a /libjava/jni | |
| parent | 765f486dfed484416d8afd28184f4cddb742a7d9 (diff) | |
| download | ppe42-gcc-7be583b48b04633a592ab530473b7f995955b160.tar.gz ppe42-gcc-7be583b48b04633a592ab530473b7f995955b160.zip | |
2004-05-25 David Jee <djee@redhat.com>
* java/awt/Container.java
(remove): Set component's parent to null only after we removed the
component from its parent's layout manager.
2004-05-25 David Jee <djee@redhat.com>
* gnu/java/awt/peer/gtk/GtkComponentPeer.java
(GtkComponentPeer): Set bounds regardless of whether awtComponent
is valid.
* gnu/java/awt/peer/gtk/GtkListPeer.java
(getSize): Change native method declaration.
(minimumSize): Pass visible row count into getSize().
(preferredSize): Likewise.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
(Java_gnu_java_awt_peer_gtk_GtkListPeer_getSize): Use scroll window's
natural size. Use visible row count to determine the final height
value to return.
2004-05-21 Graydon Hoare <graydon@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics2D.java
(setClip): Minor correction to order of operations.
* javax/swing/JScrollPane.java: Extend sketchy implementation.
* javax/swing/ScrollPaneLayout.java: Likewise.
* javax/swing/JViewPort.java: Likewise.
* javax/swing/ViewportLayout.java: Likewise.
* javax/swing/JComponent.java: Rewrite.
* javax/swing/RepaintManager.java: Likewise.
* javax/swing/JLayeredPane.java: Change validate() to revalidate().
* javax/swing/JList.java
(setSelectedIndices):
(getSelectedIndices):
(getSelectedValues): New functions.
(getPreferredScrollableViewportSize): Return preferred size.
(getScrollableUnitIncrement):
(getScrollableBlockIncrement): Initial implementations.
* javax/swing/JRootPane.java: Clean up slightly.
(getUI):
(setUI):
(updateUI):
(getUIClassID):
(isValidateRoot): Add overrides from JComponent.
* javax/swing/JScrollBar.java: Set default orientation to VERTICAL.
* javax/swing/UIManager.java (getDimension): Return the dimension.
* javax/swing/plaf/basic/BasicButtonUI.java: Set component opaque.
* javax/swing/plaf/basic/BasicLabelUI.java: Likewise.
* javax/swing/plaf/basic/BasicMenuItemUI.java: Likewise.
* javax/swing/plaf/basic/BasicProgressBarUI.java: Likewise.
* javax/swing/plaf/basic/BasicSeparatorUI.java: Likewise.
* javax/swing/plaf/basic/BasicSliderUI.java: Likewise.
* javax/swing/plaf/basic/BasicTabbedPaneUI.java: Likewise.
* javax/swing/plaf/basic/BasicRootPaneUI.java:
Likewise, and set background.
* javax/swing/plaf/basic/BasicListUI.java:
Likewise, and improve a bit.
* javax/swing/plaf/basic/BasicScrollBarUI.java:
Likewise, and adjust calculations.
* javax/swing/plaf/basic/BasicViewportUI.java:
Likewise, and improve a bit.
* javax/swing/plaf/basic/BasicLookAndFeel.java
(Button.margin): Shrink.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c:
Hack to set horizontal always, workaround pango.
* jni/gtk-peer/gtkcairopeer.h: Change to match pattern API.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c:
Synchronize more often, check cairo status after ops,
handle changes to cairo pattern API, check for disposal.
2004-05-21 Olga Rodimina <rodimina@redhat.com>
* javax/swing/plaf/basic/BasicMenuItemUI.java:
(BasicMenuItemUI): Create propertyChangeListener.
(getPath):Implemented.
(installListeners): Add propertyChangeListener to menuItem.
(uninstallListeners): Remove propertyChangeListener from menuItem.
(update): Implemented.
* javax/swing/plaf/basic/BasicMenuUI.MouseInputHandler:
(mouseEntered): Take insets of popup menu into account when
calculating position of popup menu.
2004-05-18 Olga Rodimina <rodimina@redhat.com>
* Makefile.am: Added new file.
* Makefile.in: Regenerate.
* javax/swing/JMenuBar.java:
Started implementation.
* javax/swing/JPopupMenu.java:
(setVisible): Fixed location of lightweight/mediumweight
popup menu.
(show): Fixed location of PopupMenu.
* javax/swing/plaf/basic/BasicMenuBarUI.java:
New file. UI Delegate for JMenuBar.
* javax/swing/plaf/basic/BasicMenuUI.MouseInputHandler:
(mouseEntered): Corrected position of the submenu.
2004-05-18 Thomas Fitzsimmons <fitzsim@redhat.com>
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c: Remove calls
to _gtk_accel_group_attach.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c:
Likewise.
* gnu/java/awt/peer/gtk/GtkButtonPeer.java: Give gtkSetFont
package access. Don't override setFont.
* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java: Likewise.
* gnu/java/awt/peer/gtk/GtkComponentPeer.java: Give
gtkWidgetRequestFocus package access.
* gnu/java/awt/peer/gtk/GtkLabelPeer.java: Don't override
setFont.
* gnu/java/awt/peer/gtk/GtkListPeer.java: Override gtkSetFont.
Give gtkWidgetRequestFocus package access.
* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java: Give
gtkWidgetRequestFocus package access. Don't override setFont.
* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java: Don't override
setFont.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
(gtkSetLabel): Move call to gtk_bin_get_child into GDK critical
region.
(gtkSetFont): Likewise.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c (gtkSetFont):
Implement.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
(gtkSetFont): Whitespace fix.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
(gtkWidgetSetUsize): Remove method.
2004-05-18 David Jee <djee@redhat.com>
* java/awt/image/MemoryImageSource.java
(newPixels(int,int,int,int,boolean)): Set only the specified
rectangle of pixels.
(newPixels(byte[],ColorModel,int,int)): Implement.
(newPixels(int[],ColorModel,int,int)): Implement.
2004-05-18 Olga Rodimina <rodimina@redhat.com>
* Makefile.am: Added new file.
* Makefile.in: Regenerate.
* javax/swing/JMenu.java: Started
implementation.
* javax/swing/JPopupMenu.java:
(insert): If specified index is -1, then
add component at the end.
(isPopupTrigger): Reimplemented.
(JPopupMenu.LightWeightPopup): setBounds
of the lightWeightPopup before adding it
to the layeredPane.
(javax/swing/plaf/basic/BasicIconFactory.java):
(getMenuArrowIcon): Implemented.
* javax/swing/plaf/basic/BasicMenuItemUI.java:
(getPreferredSize): Add size of the arrow icon
if this menu item is instance of JMenu.
(paintMenuItem): Paint arrow icon if this
menu item is a submenu.
* javax/swing/plaf/basic/BasicMenuUI.java:
New File. UI Delegate for JMenu.
2004-05-17 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkComponentPeer.java (postKeyEvent):
Post KEY_TYPED events.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
(generates_key_typed_event): Remove function.
2004-05-17 Olga Rodimina <rodimina@redhat.com>
* javax/swing/JRootPane.java
(JRootPane.RootLayout): Reimplemented to
set bounds of contentPane and menuBar.
(setJMenuBar): Add menu bar to the layered pane.
(createLayeredPane): Set layout of layeredPane
to null.
* javax/swing/JLayeredPane.java:
(addImpl): Calculate index of the component in the
layeredPane according to the specified position within
the layer.
2004-05-17 David Jee <djee@redhat.com>
* gnu/java/awt/peer/gtk/GtkImagePainter.java
(setPixels): Change color model to the default model after
converting pixels.
* java/awt/image/MemoryImageSource.java
(newPixels): Set only the specified rectangle of pixels.
2004-05-13 Thomas Fitzsimmons <fitzsim@redhat.com>
* libgcj.spec.in (lib): Add -l-java-awt -l-java-applet
-l-java-beans -l-javax-accessibility -l-javax-swing.
* java/awt/AWTEvent.java (toString): Print source's name rather
than the source itself.
2004-05-12 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkToolkit.java (loadSystemColors): Make
native.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
(gdk_color_to_java_color): New function.
* jni/gtk-peer/gtkpeer.h: Add SystemColor defines.
2004-05-12 David Jee <djee@redhat.com>
* java/awt/image/RGBImageFilter.java:
Initialize origmodel as null.
(makeColor): Fix pixel component order.
(filterRGBPixels): Fix pixel iteration.
(setPixels): Add extra checks for index color model. Convert pixels
to default color model if necessary.
(convertColorModelToDefault): New override method for byte pixels.
(convertColorModelToDefault): For int pixels, fix pixel iteration.
(makeColorbyDefaultCM): New override method for byte pixels.
(makeColorbyDefaultCM): For int pixel, add color model as argument.
(makeColor): Fix pixel component order.
2004-05-11 Kim Ho <kho@redhat.com>
* javax/swing/Box.java:
Comment out more parts of Box.Filler.
2004-05-11 Kim Ho <kho@redhat.com>
* javax/swing/Box.java:
Remove reference to AccessibleAWTComponent so
it compiles again.
2004-05-10 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkListPeer.java,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c: Update
implementation of list peer to use GtkTreeView instead of
deprecated GtkCList.
2004-05-07 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkComponentPeer.java
(gtkWidgetDispatchKeyEvent): Remove keyChar parameter.
(handleEvent): Remove keyChar argument to
gtkWidgetDispatchKeyEvent calls.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Fix
compiler warnings.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Likewise.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c: Likewise.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c:
Likewise.
2004-05-06 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkComponentPeer.java
(gtkWidgetRequestFocus): Mark protected.
(GtkComponentPeer): Only set the peer's bounds if its component
is valid.
* java/awt/Component.java (static): Set the default keyboard
focus manager.
(requestFocus(), requestFocus(boolean), requestFocusInWindow(),
requestFocusInWindow(temporary)): Don't request focus if the
component is not showing. Get tree lock before traversing
component hierarchy.
* java/awt/DefaultKeyboardFocusManager.java (dispatchEvent):
Only set the global focus owner if it is not a Window.
(processKeyEvent): Consume keystrokes associated with the focus
traversal keystroke.
(focusPreviousComponent, focusNextComponent, upFocusCycle,
downFocusCycle): Call requestFocusInWindow instead of
requestFocus.
* java/awt/EventDispatchThread.java (run): Move setting of
default keyboard focus manager to Component.java.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
(awt_keycode_to_keysym): New function.
(gtkWidgetDispatchKeyEvent): Finish implementation.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
(pre_event_handler): Add FIXME comment.
* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
(gtkWidgetRequestFocus): New method.
* java/awt/TextArea.java (TextArea): Set focus traversal keys to
disable Tab and Shift-Tab keystrokes.
(addNotify, appendText, insertText, replaceText): Simplify peer
retrieval code.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
(connectSignals): Remove connections to "commit" signals.
Remove C++-style comments.
* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
(handleEvent): Activate GTK button when the space bar key is
pressed.
(gtkActivate): New method.
2004-05-06 David Jee <djee@redhat.com>
* java/awt/image/CropImageFilter.java
(setPixels): Implement for byte array pixels.
* java/awt/image/ReplicateScaleFilter.java
(setPixels): Implement for byte array pixels.
(replicatePixels): Overload for byte array pixels.
2004-05-06 Kim Ho <kho@redhat.com>
* javax/swing/Box.java:
(getAccessibleContext): Return an instance of the
correct class.
2004-05-05 David Jee <djee@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics.java
(drawImage): When component is null, use SystemColor.window as
the default bgcolor.
* gnu/java/awt/peer/gtk/GtkImage.java
(setPixels): We can avoid iterating through the pixel rows only
when height is 1.
* java/awt/Image.java
(getScaledInstance): Partially implement.
* java/awt/image/CropImageFilter.java
(setProperties): Fix "filter" property.
(setPixels): Implement.
* java/awt/image/ReplicateScaleFilter.java
(setDimensions): Use scaled dimensions.
(setPixels): Implement.
(replicatePixels): New method.
2004-05-05 David Jee <djee@redhat.com>
* gnu/java/awt/peer/gtk/GtkImagePainter.java
(convertPixels): If either pixels or model is null, return null.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c
(Java_gnu_java_awt_peer_gtk_GtkImagePainter_drawPixels): If jpixels
is null, do nothing and return.
2004-05-03 Kim Ho <kho@redhat.com>
* gnu/java/awt/peer/gtk/GtkDialogPeer.java:
(getGraphics): Like GtkFramePeer, the Graphics
object needs to be translate to account for
window decorations.
(postMouseEvent): New method. Account for
translation.
(postExposeEvent): ditto.
* javax/swing/Box.java: Stubbed.
* javax/swing/JDialog.java: Ran through jalopy
to fix indentation.
(JDialog): Call SwingUtilities' getOwnerFrame
for null owners.
(setLayout): Check isRootPaneCheckingEnabled
* javax/swing/JOptionPane.java: Re-implemented.
* javax/swing/SwingUtilities.java:
(getOwnerFrame): Static method to grab a default
owner frame for Dialogs that don't specify owners.
* javax/swing/event/SwingPropertyChangeSupport.java:
(firePropertyChange): Fix early exit condition.
* javax/swing/plaf/basic/BasicLabelUI.java:
(paint): Avoid painting text if it is null
or empty.
* javax/swing/plaf/basic/BasicOptionPaneUI.java:
Implement.
2004-05-03 Olga Rodimina <rodimina@redhat.com>
* Makefile.am: Added new file.
* Makefile.in: Regenerate.
* javax/swing/JPopupMenu.java:
Started implementation.
* javax/swing/JWindow.java
(JWindow): call super() if parent for window
is not specified.
* javax/swing/plaf/basic/BasicPopupMenuUI.java:
New File. UI Delegate for JPopupMenu.
2004-04-30 Olga Rodimina <rodimina@redhat.com>
* javax/swing/JApplet.java: Indicated that JApplet
implements RootPaneContainer and made method of this
interface public.
* javax/swing/JFrame.java: Ditto.
* javax/swing/JWindow.java: Ditto.
2004-04-29 Thomas Fitzsimmons <fitzsim@redhat.com>
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
(nativeSetBounds): Call gdk_window_move in addition to
gtk_window_move.
* java/applet/Applet.java (preferredSize): Call parent's
preferredSize if the applet stub is null.
(minimumSize): Likewise for parent's minimumSize.
2004-04-27 Olga Rodimina <rodimina@redhat.com>
* javax/swing/JMenuItem.java
(createActionPropertyChangeListener): Implemented.
(processMouseEvent): Ditto.
(fireMenuDragMouseEntered): Ditto.
(fireMenuDragMouseExited): Ditto.
(fireMenuDragMouseDragged): Ditto.
(fireMenuDragMouseReleased): Ditto.
(menuSelectionChanged): Ditto.
(getSubElements): Ditto.
(getComponent): Ditto.
(addMenuDragMouseListener): Ditto.
(removeMenuDragMouseListener):Ditto.
(addMenuKeyListener): Ditto.
(removeMenuKeyListener): Ditto.
* javax/swing/plaf/basic/BasicMenuItemUI.java
(doClick): Imlemented.
* javax/swing/plaf/basic/BasicMenuItemUI.MouseInputHandler:
Don't handle mouse events here. Pass them to
MenuSelectionManager.
2004-04-26 Olga Rodimina <rodimina@redhat.com>
Used correct version of jalopy configuration
file to fix style in the files below.
2004-04-26 Olga Rodimina <rodimina@redhat.com>
* javax/swing/JCheckBoxMenuItem.java:
Fixed style and removed unnecessary comments.
* javax/swing/JMenuItem.java: Ditto.
* javax/swing/JRadioButtonMenuItem.java: Ditto.
* javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java: Ditto.
* javax/swing/plaf/basic/BasicMenuItemUI.java: Ditto.
* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java: Ditto.
2004-04-23 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu_java_awt_peer_gtk_GtkWindowPeer.c: Change FIXME comment to
C-style.
* gnu_java_awt_peer_gtk_GtkWindowPeer.c: Add FIXME comment.
* java/awt/ContainerOrderFocusTraversalPolicy.java
(getComponentAfter): Start from current component and work up
the component hierarchy until an acceptable component is found.
Synchronize on tree lock.
(getComponentBefore): Likewise.
2004-04-22 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkComponentPeer.java: Remove
focus-related debugging messages.
* java/awt/DefaultKeyboardFocusManager.java: Likewise.
* java/awt/EventDispatchThread.java: Likewise.
* java/awt/KeyboardFocusManager.java: Likewise.
* java/awt/Window.java: Likewise.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Likewise.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Likewise.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Change
new C++-style comments to C-style comments.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Likewise.
* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
(handleEvent): Dispatch key press and key release events to
backing widget.
(requestFocus): Post a FOCUS_GAINED event to the event queue.
(gtkWidgetRequestFocus): New method.
(gtkWidgetDispatchKeyEvent): Likewise.
* java/awt/Component.java (requestFocus, requestFocus(boolean),
requestFocusInWindow, requestFocusInWindow(boolean),
getFocusCycleRootAncestor, nextFocus, transferFocus,
transferFocusBackward, transferFocusUpCycle, hasFocus,
isFocusOwner): Implement and document focus-handling methods.
(setFocusTraversalKeys): Inherit focus traversal keys when
keystrokes argument is null. Fix focus-handling documentation
throughout class.
* java/awt/Container.java (setFocusTraversalKeys,
getFocusTraversalKeys, areFocusTraversalKeysSet,
isFocusCycleRoot, setFocusTraversalPolicy,
getFocusTraversalPolicy, isFocusTraversalPolicySet,
setFocusCycleRoot, isFocusCycleRoot, transferFocusDownCycle):
Implement and document focus-handling methods.
(transferFocusBackward): Remove method.
(readObject, writeObject): Implement and document serialization
methods.
* java/awt/ContainerOrderFocusTraversalPolicy.java: Implement
and document.
* java/awt/DefaultFocusTraversalPolicy.java: Implement and
document.
* java/awt/DefaultKeyboardFocusManager.java: Implement and
partially document.
* java/awt/EventDispatchThread.java (run): Set default keyboard
focus manager. Attempt to dispatch each event to the keyboard
focus manager before normal dispatch.
* java/awt/KeyboardFocusManager.java: Implement and partially
document.
* java/awt/Window.java (Window): Set focusCycleRoot to true.
(show): Focus initial component when window is shown for the
first time.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
(pre_event_handler): Replace complex key press and key release
logic with simple callbacks into GtkComponentPeer.
* jni/gtk-peer/gtkpeer.h: Fix FOCUS_GAINED/FOCUS_LOST reversal.
2004-04-21 Olga Rodimina <rodimina@redhat.com>
* javax/swing/MenuSelectionManager.java
(componentForPoint): Added new method.
(defaultManager): New Method. Implemented.
(getSelectedPath): Ditto.
(isComponentPartOfCurrentMenu): Ditto.
(processKeyEvent): Added new method.
(processMouseEvent): New Method. Implemented.
(setSelectedPath): Ditto.
(getPath): Ditto.
2004-04-19 Kim Ho <kho@redhat.com>
* java/awt/Container.java:
(remove): Set the component's parent to null.
(getComponentAt): Implement.
* javax/swing/JComponent.java:
(JComponent): Initialize defaultLocale
(getDefaultLocale): Implement.
(setDefaultLocale): ditto.
* javax/swing/JSlider.java:
(JSlider): Fix calculation of value.
* javax/swing/JSplitPane.java: Implement.
* javax/swing/plaf/basic/BasicLookAndFeel.java:
Change SplitPane's default divider size.
* javax/swing/plaf/basic/BasicScrollBarUI.java:
(paint): Remove unused code.
* javax/swing/plaf/basic/BasicSplitPaneDivider.java:
Added comments and ran through jalopy.
(setBasicSplitPaneUI): Get reference to hidden divider
and set up one touch buttons if necessary.
(setBorder): Fire propertyChangeEvent only if
borders are different.
(getPreferredSize): Defer to layout manager.
(propertyChange): Implement.
(oneTouchExpandableChanged): ditto.
(createLeftOneTouchButton): Use BasicArrowButton.
(createRightOneTouchButton): ditto.
(moveDividerTo): New method. Moves the divider
to a set location based on the last divider location.
(BasicSplitPaneDivider::MouseHandler): Implement.
(BasicSplitPaneDivider::OneTouchButton): Removed.
(BasicSplitPaneDivider::DragController): Implement.
(BasicSplitPaneDivider::VerticalDragController):
ditto.
(BasicSplitPaneDivider::DividerLayout): ditto.
* javax/swing/plaf/basic/BasicSplitPaneUI.java: Reimplement.
* javax/swing/plaf/basic/BasicTabbedPaneUI.java:
(calculateLayoutInfo): Don't show component if it's
null.
(paintTab): Fix title paint logic.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@82314 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/jni')
16 files changed, 1269 insertions, 375 deletions
diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c index afb705bf6e1..a56e7d27d5b 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeer.c @@ -112,9 +112,10 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkClasspathFontPeer_setFont struct peerfont *pfont = NULL; PangoFontMap *map = NULL; char const *family_name = NULL; + enum java_awt_font_style style; gdk_threads_enter (); - enum java_awt_font_style style = (enum java_awt_font_style) style_int; + style = (enum java_awt_font_style) style_int; g_assert (self != NULL); pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, self); diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c index b05d76ecb53..5e8562455a4 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c @@ -636,9 +636,12 @@ JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_gtk_GdkGlyphVector_glyphIsHori gdk_threads_leave (); - return + return 1; + /* FIXME: Pango doesn't seem to have decided how it will deal + with vertical text. for the time being we inherit this limitation. ((dir == PANGO_DIRECTION_LTR) || (dir == PANGO_DIRECTION_RTL)); + */ } diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c index a161ba49992..733461dcfc1 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c @@ -67,7 +67,9 @@ struct state_table *native_graphics2d_state_table; JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initStaticState (JNIEnv *env, jclass clazz) { - NSA_G2D_INIT (env, clazz); + gdk_threads_enter(); + NSA_G2D_INIT (env, clazz); + gdk_threads_leave(); } /* these public final constants are part of the java2d public API, so we @@ -124,6 +126,32 @@ enum java_awt_rendering_hints_filter }; +static int +peer_is_disposed(JNIEnv *env, jobject obj) +{ + static jfieldID fid = NULL; + jclass cls; + jobject peer; + + return 0; + + if (fid == NULL) + { + cls = (*env)->GetObjectClass(env, obj); + fid = (*env)->GetFieldID(env, cls, "component", + "Lgnu/java/awt/peer/gtk/GtkComponentPeer;"); + } + g_assert(fid != NULL); + peer = (*env)->GetObjectField(env, obj, fid); + if (peer == NULL || NSA_GET_PTR (env, peer) != NULL) + return 0; + else + { + return 1; + } +} + + static void grab_current_drawable (GtkWidget *widget, GdkDrawable **draw, GdkWindow **win) { @@ -220,7 +248,7 @@ init_graphics2d_as_renderable (struct graphics2d *gr) static void begin_drawing_operation (struct graphics2d * gr) { - gdk_threads_enter (); + g_assert(cairo_status (gr->cr) == CAIRO_STATUS_SUCCESS); if (gr->drawbuf) { @@ -248,6 +276,7 @@ begin_drawing_operation (struct graphics2d * gr) static void end_drawing_operation (struct graphics2d * gr) { + g_assert(cairo_status (gr->cr) == CAIRO_STATUS_SUCCESS); if (gr->drawbuf) { gint drawable_width, drawable_height; @@ -268,7 +297,6 @@ end_drawing_operation (struct graphics2d * gr) if (gr->debug) printf ("copied (%d, %d) pixels from pixbuf to GDK drawable\n", width, height); } - gdk_threads_leave (); } @@ -288,7 +316,7 @@ update_pattern_transform (struct graphics2d *gr) mat = cairo_matrix_create (); g_assert (mat != NULL); cairo_matrix_set_affine (mat, a, b, c, d, tx, ty); - cairo_surface_set_matrix (gr->pattern, mat); + cairo_pattern_set_matrix (gr->pattern, mat); cairo_matrix_destroy (mat); } @@ -303,6 +331,7 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_copyState { struct graphics2d *g = NULL, *g_old = NULL; + gdk_threads_enter(); g = (struct graphics2d *) malloc (sizeof (struct graphics2d)); g_assert (g != NULL); memset (g, 0, sizeof(struct graphics2d)); @@ -315,7 +344,6 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_copyState g->drawable = g_old->drawable; g->debug = g_old->debug; - gdk_threads_enter (); g_object_ref (g->drawable); g->cr = cairo_create(); @@ -328,9 +356,8 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_copyState cairo_surface_set_filter (g->surface, CAIRO_FILTER_FAST); - gdk_threads_leave (); - NSA_SET_G2D_PTR (env, obj, g); + gdk_threads_leave(); } @@ -338,9 +365,8 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState__II (JNIEnv *env, jobject obj, jint width, jint height) { struct graphics2d *gr; - - gdk_threads_enter (); + gdk_threads_enter(); gr = (struct graphics2d *) malloc (sizeof (struct graphics2d)); g_assert (gr != NULL); memset (gr, 0, sizeof(struct graphics2d)); @@ -362,22 +388,23 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState__II else init_graphics2d_as_pixbuf (gr); - gdk_threads_leave (); if (gr->debug) printf ("constructed offscreen drawable of size (%d,%d)\n", width, height); NSA_SET_G2D_PTR (env, obj, gr); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_gdkDrawDrawable (JNIEnv *env, jobject self, jobject other, jint x, jint y) { - GdkRectangle clipRect; struct graphics2d *src = NULL, *dst = NULL; gint s_height, s_width, d_height, d_width, height, width; cairo_matrix_t *matrix; GdkGC *gc; cairo_operator_t tmp_op; + gdk_threads_enter(); + if (peer_is_disposed(env, self)) { gdk_threads_leave(); return; } src = (struct graphics2d *)NSA_GET_G2D_PTR (env, other); dst = (struct graphics2d *)NSA_GET_G2D_PTR (env, self); g_assert (src != NULL); @@ -385,14 +412,14 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_gdkDrawDrawable if (src->debug) printf ("copying from offscreen drawable\n"); - gdk_threads_enter (); + begin_drawing_operation(dst); + + gdk_flush(); + gdk_drawable_get_size (src->drawable, &s_width, &s_height); gdk_drawable_get_size (dst->drawable, &d_width, &d_height); width = min (s_width, d_width); height = min (s_height, d_height); - gdk_threads_leave (); - - begin_drawing_operation(dst); matrix = cairo_matrix_create (); cairo_surface_get_matrix (src->surface, matrix); @@ -408,14 +435,12 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_gdkDrawDrawable cairo_surface_set_matrix (src->surface, matrix); cairo_matrix_destroy (matrix); - end_drawing_operation(dst); + gdk_flush(); - gdk_threads_enter (); - gdk_flush (); - gdk_threads_leave (); + end_drawing_operation(dst); if (src->debug) printf ("copied %d x %d pixels from offscreen drawable\n", width, height); - + gdk_threads_leave(); } static jintArray @@ -454,9 +479,10 @@ JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState__ void *ptr = NULL; jintArray color; + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } ptr = NSA_GET_PTR (env, peer); g_assert (ptr != NULL); - gdk_threads_enter (); gr = (struct graphics2d *) malloc (sizeof (struct graphics2d)); g_assert (gr != NULL); @@ -480,8 +506,8 @@ JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState__ color = current_colors_of_widget (widget, env); - gdk_threads_leave (); NSA_SET_G2D_PTR (env, obj, gr); + gdk_threads_leave(); return color; } @@ -490,11 +516,13 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_dispose { struct graphics2d *gr = NULL; + gdk_threads_enter(); gr = (struct graphics2d *) NSA_DEL_G2D_PTR (env, obj); if (gr == NULL) - return; /* dispose has been called more than once */ - - gdk_threads_enter (); + { + gdk_threads_leave(); + return; /* dispose has been called more than once */ + } if (gr->surface) cairo_surface_destroy (gr->surface); @@ -507,15 +535,18 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_dispose g_object_unref (gr->drawable); if (gr->pattern) - cairo_surface_destroy (gr->pattern); + cairo_pattern_destroy (gr->pattern); + + if (gr->pattern_surface) + cairo_surface_destroy (gr->pattern_surface); if (gr->pattern_pixels) free (gr->pattern_pixels); if (gr->debug) printf ("disposed of graphics2d\n"); - free (gr); - gdk_threads_leave (); + free (gr); + gdk_threads_leave(); } @@ -533,6 +564,8 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setGradient gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } if (gr->debug) printf ("setGradient (%f,%f) -> (%f,%f); (%d,%d,%d,%d) -> (%d,%d,%d,%d)\n", x1, y1, x2, y2, @@ -623,19 +656,21 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setGradient /* cairo_surface_set_repeat (surf, cyclic ? 1 : 0); */ if (gr->pattern) - cairo_surface_destroy (gr->pattern); + cairo_pattern_destroy (gr->pattern); + + if (gr->pattern_surface) + cairo_surface_destroy (gr->pattern_surface); if (gr->pattern_pixels) - { - free (gr->pattern_pixels); - gr->pattern_pixels = NULL; - } - - gr->pattern = surf; + free (gr->pattern_pixels); + + gr->pattern_pixels = NULL; + gr->pattern_surface = surf; + gr->pattern = cairo_pattern_create_for_surface(surf); cairo_restore (gr->cr); cairo_set_pattern (gr->cr, gr->pattern); - + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setTexturePixels @@ -644,6 +679,8 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setTexturePixels struct graphics2d *gr = NULL; jint *jpixels = NULL; + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); @@ -651,12 +688,16 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setTexturePixels (*env)->GetArrayLength (env, jarr), w, h, stride); if (gr->pattern) - cairo_surface_destroy (gr->pattern); + cairo_pattern_destroy (gr->pattern); + + if (gr->pattern_surface) + cairo_surface_destroy (gr->pattern_surface); if (gr->pattern_pixels) free (gr->pattern_pixels); gr->pattern = NULL; + gr->pattern_surface = NULL; gr->pattern_pixels = NULL; gr->pattern_pixels = (char *) malloc (h * stride * 4); @@ -667,13 +708,15 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setTexturePixels memcpy (gr->pattern_pixels, jpixels, h * stride * 4); (*env)->ReleaseIntArrayElements (env, jarr, jpixels, 0); - gr->pattern = cairo_surface_create_for_image (gr->pattern_pixels, - CAIRO_FORMAT_ARGB32, - w, h, stride * 4); + gr->pattern_surface = cairo_surface_create_for_image (gr->pattern_pixels, + CAIRO_FORMAT_ARGB32, + w, h, stride * 4); + g_assert (gr->pattern_surface != NULL); + cairo_surface_set_repeat (gr->pattern_surface, 1); + gr->pattern = cairo_pattern_create_for_surface (gr->pattern_surface); g_assert (gr->pattern != NULL); - cairo_surface_set_repeat (gr->pattern, 1); cairo_set_pattern (gr->cr, gr->pattern); - + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_drawPixels @@ -684,6 +727,9 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_drawPixels jint *native_pixels = NULL; jdouble *native_matrix = NULL; + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); @@ -716,10 +762,11 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_drawPixels } end_drawing_operation (gr); - - (*env)->ReleaseIntArrayElements (env, java_pixels, native_pixels, 0); - (*env)->ReleaseDoubleArrayElements (env, java_matrix, native_matrix, 0); - + + (*env)->ReleaseIntArrayElements (env, java_pixels, native_pixels, 0); + (*env)->ReleaseDoubleArrayElements (env, java_matrix, native_matrix, 0); + + gdk_threads_leave(); } JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_getImagePixels @@ -735,6 +782,9 @@ JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_getImagePix gint total_channels = 4; jint i, px; + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); @@ -783,8 +833,8 @@ JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_getImagePix (jsize)0, (jsize) width*height, (jint*) native_pixels); + gdk_threads_leave(); return java_pixels; - } /* passthrough methods to cairo */ @@ -793,21 +843,31 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSave (JNIEnv *env, jobject obj) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_save\n"); cairo_save (gr->cr); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRestore (JNIEnv *env, jobject obj) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_restore\n"); cairo_restore (gr->cr); update_pattern_transform (gr); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMatrix @@ -816,6 +876,9 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMatrix struct graphics2d *gr = NULL; jdouble *native_matrix = NULL; + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); @@ -840,6 +903,7 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMatrix (*env)->ReleaseDoubleArrayElements (env, java_matrix, native_matrix, 0); update_pattern_transform (gr); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetFont @@ -850,14 +914,15 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetFont cairo_font_t *ft = NULL; FT_Face face = NULL; + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, font); g_assert (pfont != NULL); - gdk_threads_enter (); - face = pango_ft2_font_get_face (pfont->font); g_assert (face != NULL); @@ -873,8 +938,7 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetFont (double)PANGO_SCALE); cairo_font_destroy (ft); - - gdk_threads_leave (); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoShowGlyphs @@ -887,6 +951,9 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoShowGlyphs jint i; jint ncodes, nposns; + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); @@ -921,12 +988,17 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoShowGlyphs end_drawing_operation (gr); free(glyphs); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetOperator (JNIEnv *env, jobject obj, jint op) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_set_operator %d\n", op); @@ -980,12 +1052,17 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetOperator cairo_set_operator (gr->cr, CAIRO_OPERATOR_XOR); break; } + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetRGBColor (JNIEnv *env, jobject obj, jdouble r, jdouble g, jdouble b) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); @@ -1000,22 +1077,33 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetRGBColor cairo_set_rgb_color (gr->cr, b, g, r); else cairo_set_rgb_color (gr->cr, r, g, b); + + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetAlpha (JNIEnv *env, jobject obj, jdouble a) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_set_alpha %f\n", a); cairo_set_alpha (gr->cr, a); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetFillRule (JNIEnv *env, jobject obj, jint rule) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); if (gr->debug) printf ("cairo_set_fill_rule %d\n", rule); g_assert (gr != NULL); @@ -1028,22 +1116,32 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetFillRule cairo_set_fill_rule (gr->cr, CAIRO_FILL_RULE_EVEN_ODD); break; } + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineWidth (JNIEnv *env, jobject obj, jdouble width) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_set_line_width %f\n", width); cairo_set_line_width (gr->cr, width); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineCap (JNIEnv *env, jobject obj, jint cap) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_set_line_cap %d\n", cap); @@ -1061,12 +1159,17 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineCap cairo_set_line_cap (gr->cr, CAIRO_LINE_CAP_SQUARE); break; } + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineJoin (JNIEnv *env, jobject obj, jint join) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_set_line_join %d\n", join); @@ -1084,6 +1187,7 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineJoin cairo_set_line_join (gr->cr, CAIRO_LINE_JOIN_BEVEL); break; } + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetDash @@ -1091,6 +1195,10 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetDash { struct graphics2d *gr = NULL; jdouble *dasharr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_set_dash\n"); @@ -1098,16 +1206,22 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetDash g_assert (dasharr != NULL); cairo_set_dash (gr->cr, dasharr, ndash, offset); (*env)->ReleaseDoubleArrayElements (env, dashes, dasharr, 0); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMiterLimit (JNIEnv *env, jobject obj, jdouble miter) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_set_miter_limit %f\n", miter); cairo_set_miter_limit (gr->cr, miter); + gdk_threads_leave(); } @@ -1115,132 +1229,197 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoNewPath (JNIEnv *env, jobject obj) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_new_path\n"); cairo_new_path (gr->cr); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoMoveTo (JNIEnv *env, jobject obj, jdouble x, jdouble y) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_move_to (%f, %f)\n", x, y); cairo_move_to (gr->cr, x, y); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoLineTo (JNIEnv *env, jobject obj, jdouble x, jdouble y) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_line_to (%f, %f)\n", x, y); cairo_line_to (gr->cr, x, y); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoCurveTo (JNIEnv *env, jobject obj, jdouble x1, jdouble y1, jdouble x2, jdouble y2, jdouble x3, jdouble y3) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_curve_to (%f, %f), (%f, %f), (%f, %f)\n", x1, y1, x2, y2, x3, y3); cairo_curve_to (gr->cr, x1, y1, x2, y2, x3, y3); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRelMoveTo (JNIEnv *env, jobject obj, jdouble dx, jdouble dy) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_rel_move_to (%f, %f)\n", dx, dy); cairo_rel_move_to (gr->cr, dx, dy); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRelLineTo (JNIEnv *env, jobject obj, jdouble dx, jdouble dy) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_rel_line_to (%f, %f)\n", dx, dy); cairo_rel_line_to (gr->cr, dx, dy); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRelCurveTo (JNIEnv *env, jobject obj, jdouble dx1, jdouble dy1, jdouble dx2, jdouble dy2, jdouble dx3, jdouble dy3) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_rel_curve_to (%f, %f), (%f, %f), (%f, %f)\n", dx1, dy1, dx2, dy2, dx3, dy3); cairo_rel_curve_to (gr->cr, dx1, dy1, dx2, dy2, dx3, dy3); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRectangle (JNIEnv *env, jobject obj, jdouble x, jdouble y, jdouble width, jdouble height) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_rectangle (%f, %f) (%f, %f)\n", x, y, width, height); cairo_rectangle (gr->cr, x, y, width, height); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoClosePath (JNIEnv *env, jobject obj) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_close_path\n"); cairo_close_path (gr->cr); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoStroke (JNIEnv *env, jobject obj) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_stroke\n"); begin_drawing_operation (gr); cairo_stroke (gr->cr); end_drawing_operation (gr); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoFill (JNIEnv *env, jobject obj) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_fill\n"); begin_drawing_operation (gr); cairo_fill (gr->cr); end_drawing_operation (gr); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoClip (JNIEnv *env, jobject obj) { struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_clip\n"); - cairo_init_clip (gr->cr); - cairo_clip (gr->cr); + begin_drawing_operation (gr); + cairo_init_clip (gr->cr); + cairo_clip (gr->cr); + end_drawing_operation (gr); + gdk_threads_leave(); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSurfaceSetFilter (JNIEnv *env, jobject obj, jint filter) { - struct graphics2d *gr = NULL; + + gdk_threads_enter(); + if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_surface_set_filter %d\n", filter); @@ -1262,4 +1441,5 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSurfaceSetF cairo_surface_set_filter (gr->surface, CAIRO_FILTER_BEST); break; } + gdk_threads_leave(); } diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c index 7f5d44a2d7c..9877a45fe58 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c @@ -96,11 +96,14 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkSetLabel void *ptr; ptr = NSA_GET_PTR (env, obj); - label = gtk_bin_get_child (GTK_BIN(ptr)); + text = (*env)->GetStringUTFChars (env, jtext, NULL); gdk_threads_enter (); + + label = gtk_bin_get_child (GTK_BIN (ptr)); gtk_label_set_text (GTK_LABEL(label), text); + gdk_threads_leave (); (*env)->ReleaseStringUTFChars (env, jtext, text); @@ -112,22 +115,20 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkSetFont { const char *font_name; void *ptr; - GtkWidget *button; GtkWidget *label; PangoFontDescription *font_desc; ptr = NSA_GET_PTR (env, obj); - button = GTK_WIDGET (ptr); - label = gtk_bin_get_child (GTK_BIN(button)); - - if (!label) - return; - font_name = (*env)->GetStringUTFChars (env, name, NULL); gdk_threads_enter(); + label = gtk_bin_get_child (GTK_BIN (ptr)); + + if (!label) + return; + font_desc = pango_font_description_from_string (font_name); pango_font_description_set_size (font_desc, size * PANGO_SCALE); @@ -173,3 +174,18 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetSetForeground gdk_threads_leave (); } + +JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkActivate + (JNIEnv *env, jobject obj) +{ + void *ptr; + + ptr = NSA_GET_PTR (env, obj); + + gdk_threads_enter (); + + gtk_widget_activate (GTK_WIDGET (ptr)); + + gdk_threads_leave (); +} diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c index fecaff48243..e8a918f9666 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c @@ -39,9 +39,370 @@ exception statement from your version. */ #include "gtkpeer.h" #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h" #include <gtk/gtkprivate.h> +#include <gdk/gdkkeysyms.h> static GtkWidget *find_fg_color_widget (GtkWidget *widget); static GtkWidget *find_bg_color_widget (GtkWidget *widget); +static gboolean focus_in_cb (GtkWidget *widget, + GdkEventFocus *event, + jobject peer); +static gboolean focus_out_cb (GtkWidget *widget, + GdkEventFocus *event, + jobject peer); +/* + * This method returns a GDK keyval that corresponds to one of the + * keysyms in the X keymap table. The return value is only used to + * determine the keyval's corresponding hardware keycode, and doesn't + * reflect an accurate translation of a Java virtual key value to a + * GDK keyval. + */ +#ifdef __GNUC__ +__inline +#endif +static guint +awt_keycode_to_keysym (jint keyCode, jint keyLocation) +{ + /* GDK_A through GDK_Z */ + if (keyCode >= VK_A && keyCode <= VK_Z) + return gdk_keyval_to_lower (keyCode); + + /* GDK_0 through GDK_9 */ + if (keyCode >= VK_0 && keyCode <= VK_9) + return keyCode; + + switch (keyCode) + { + case VK_ENTER: + return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Enter : GDK_Return; + case VK_BACK_SPACE: + return GDK_BackSpace; + case VK_TAB: + return GDK_Tab; + case VK_CANCEL: + return GDK_Cancel; + case VK_CLEAR: + return GDK_Clear; + case VK_SHIFT: + return keyLocation == AWT_KEY_LOCATION_LEFT ? GDK_Shift_L : GDK_Shift_R; + case VK_CONTROL: + return keyLocation == AWT_KEY_LOCATION_LEFT ? GDK_Control_L : GDK_Control_R; + case VK_ALT: + return keyLocation == AWT_KEY_LOCATION_LEFT ? GDK_Alt_L : GDK_Alt_R; + case VK_PAUSE: + return GDK_Pause; + case VK_CAPS_LOCK: + return GDK_Caps_Lock; + case VK_ESCAPE: + return GDK_Escape; + case VK_SPACE: + return GDK_space; + case VK_PAGE_UP: + return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Page_Up : GDK_Page_Up; + case VK_PAGE_DOWN: + return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Page_Down : GDK_Page_Down; + case VK_END: + return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_End : GDK_End; + case VK_HOME: + return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Home : GDK_Home; + case VK_LEFT: + return GDK_Left; + case VK_UP: + return GDK_Up; + case VK_RIGHT: + return GDK_Right; + case VK_DOWN: + return GDK_Down; + case VK_COMMA: + return GDK_comma; + case VK_MINUS: + return GDK_minus; + case VK_PERIOD: + return GDK_period; + case VK_SLASH: + return GDK_slash; + /* + case VK_0: + case VK_1: + case VK_2: + case VK_3: + case VK_4: + case VK_5: + case VK_6: + case VK_7: + case VK_8: + case VK_9: + */ + case VK_SEMICOLON: + return GDK_semicolon; + case VK_EQUALS: + return GDK_equal; + /* + case VK_A: + case VK_B: + case VK_C: + case VK_D: + case VK_E: + case VK_F: + case VK_G: + case VK_H: + case VK_I: + case VK_J: + case VK_K: + case VK_L: + case VK_M: + case VK_N: + case VK_O: + case VK_P: + case VK_Q: + case VK_R: + case VK_S: + case VK_T: + case VK_U: + case VK_V: + case VK_W: + case VK_X: + case VK_Y: + case VK_Z: + */ + case VK_OPEN_BRACKET: + return GDK_bracketleft; + case VK_BACK_SLASH: + return GDK_backslash; + case VK_CLOSE_BRACKET: + return GDK_bracketright; + case VK_NUMPAD0: + return GDK_KP_0; + case VK_NUMPAD1: + return GDK_KP_1; + case VK_NUMPAD2: + return GDK_KP_2; + case VK_NUMPAD3: + return GDK_KP_3; + case VK_NUMPAD4: + return GDK_KP_4; + case VK_NUMPAD5: + return GDK_KP_5; + case VK_NUMPAD6: + return GDK_KP_6; + case VK_NUMPAD7: + return GDK_KP_7; + case VK_NUMPAD8: + return GDK_KP_8; + case VK_NUMPAD9: + return GDK_KP_9; + case VK_MULTIPLY: + return GDK_KP_Multiply; + case VK_ADD: + return GDK_KP_Add; + /* + case VK_SEPARATER: + */ + case VK_SEPARATOR: + return GDK_KP_Separator; + case VK_SUBTRACT: + return GDK_KP_Subtract; + case VK_DECIMAL: + return GDK_KP_Decimal; + case VK_DIVIDE: + return GDK_KP_Divide; + case VK_DELETE: + return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Delete : GDK_Delete; + case VK_NUM_LOCK: + return GDK_Num_Lock; + case VK_SCROLL_LOCK: + return GDK_Scroll_Lock; + case VK_F1: + return GDK_F1; + case VK_F2: + return GDK_F2; + case VK_F3: + return GDK_F3; + case VK_F4: + return GDK_F4; + case VK_F5: + return GDK_F5; + case VK_F6: + return GDK_F6; + case VK_F7: + return GDK_F7; + case VK_F8: + return GDK_F8; + case VK_F9: + return GDK_F9; + case VK_F10: + return GDK_F10; + case VK_F11: + return GDK_F11; + case VK_F12: + return GDK_F12; + case VK_F13: + return GDK_F13; + case VK_F14: + return GDK_F14; + case VK_F15: + return GDK_F15; + case VK_F16: + return GDK_F16; + case VK_F17: + return GDK_F17; + case VK_F18: + return GDK_F18; + case VK_F19: + return GDK_F19; + case VK_F20: + return GDK_F20; + case VK_F21: + return GDK_F21; + case VK_F22: + return GDK_F22; + case VK_F23: + return GDK_F23; + case VK_F24: + return GDK_F24; + case VK_PRINTSCREEN: + return GDK_Print; + case VK_INSERT: + return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Insert : GDK_Insert; + case VK_HELP: + return GDK_Help; + case VK_META: + return keyLocation == AWT_KEY_LOCATION_LEFT ? GDK_Meta_L : GDK_Meta_R; + case VK_BACK_QUOTE: + return GDK_grave; + case VK_QUOTE: + return GDK_apostrophe; + case VK_KP_UP: + return GDK_KP_Up; + case VK_KP_DOWN: + return GDK_KP_Down; + case VK_KP_LEFT: + return GDK_KP_Left; + case VK_KP_RIGHT: + return GDK_KP_Right; + case VK_DEAD_GRAVE: + return GDK_dead_grave; + case VK_DEAD_ACUTE: + return GDK_dead_acute; + case VK_DEAD_CIRCUMFLEX: + return GDK_dead_circumflex; + case VK_DEAD_TILDE: + return GDK_dead_tilde; + case VK_DEAD_MACRON: + return GDK_dead_macron; + case VK_DEAD_BREVE: + return GDK_dead_breve; + case VK_DEAD_ABOVEDOT: + return GDK_dead_abovedot; + case VK_DEAD_DIAERESIS: + return GDK_dead_diaeresis; + case VK_DEAD_ABOVERING: + return GDK_dead_abovering; + case VK_DEAD_DOUBLEACUTE: + return GDK_dead_doubleacute; + case VK_DEAD_CARON: + return GDK_dead_caron; + case VK_DEAD_CEDILLA: + return GDK_dead_cedilla; + case VK_DEAD_OGONEK: + return GDK_dead_ogonek; + case VK_DEAD_IOTA: + return GDK_dead_iota; + case VK_DEAD_VOICED_SOUND: + return GDK_dead_voiced_sound; + case VK_DEAD_SEMIVOICED_SOUND: + return GDK_dead_semivoiced_sound; + case VK_AMPERSAND: + return GDK_ampersand; + case VK_ASTERISK: + return GDK_asterisk; + case VK_QUOTEDBL: + return GDK_quotedbl; + case VK_LESS: + return GDK_less; + case VK_GREATER: + return GDK_greater; + case VK_BRACELEFT: + return GDK_braceleft; + case VK_BRACERIGHT: + return GDK_braceright; + case VK_AT: + return GDK_at; + case VK_COLON: + return GDK_colon; + case VK_CIRCUMFLEX: + return GDK_asciicircum; + case VK_DOLLAR: + return GDK_dollar; + case VK_EURO_SIGN: + return GDK_EuroSign; + case VK_EXCLAMATION_MARK: + return GDK_exclam; + case VK_INVERTED_EXCLAMATION_MARK: + return GDK_exclamdown; + case VK_LEFT_PARENTHESIS: + return GDK_parenleft; + case VK_NUMBER_SIGN: + return GDK_numbersign; + case VK_PLUS: + return GDK_plus; + case VK_RIGHT_PARENTHESIS: + return GDK_parenright; + case VK_UNDERSCORE: + return GDK_underscore; + /* + case VK_FINAL: + case VK_CONVERT: + case VK_NONCONVERT: + case VK_ACCEPT: + */ + case VK_MODECHANGE: + return GDK_Mode_switch; + /* + case VK_KANA: + */ + case VK_KANJI: + return GDK_Kanji; + /* + case VK_ALPHANUMERIC: + */ + case VK_KATAKANA: + return GDK_Katakana; + case VK_HIRAGANA: + return GDK_Hiragana; + /* + case VK_FULL_WIDTH: + case VK_HALF_WIDTH: + case VK_ROMAN_CHARACTERS: + case VK_ALL_CANDIDATES: + */ + case VK_PREVIOUS_CANDIDATE: + return GDK_PreviousCandidate; + case VK_CODE_INPUT: + return GDK_Codeinput; + /* + case VK_JAPANESE_KATAKANA: + case VK_JAPANESE_HIRAGANA: + case VK_JAPANESE_ROMAN: + */ + case VK_KANA_LOCK: + return GDK_Kana_Lock; + /* + case VK_INPUT_METHOD_ON_OFF: + case VK_CUT: + case VK_COPY: + case VK_PASTE: + case VK_UNDO: + case VK_AGAIN: + case VK_FIND: + case VK_PROPS: + case VK_STOP: + case VK_COMPOSE: + case VK_ALT_GRAPH: + */ + default: + return GDK_VoidSymbol; + } +} JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursor @@ -110,6 +471,137 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursor gdk_threads_leave (); } +JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetRequestFocus + (JNIEnv *env, jobject obj) +{ + void *ptr; + + ptr = NSA_GET_PTR (env, obj); + + gdk_threads_enter (); + gtk_widget_grab_focus (GTK_WIDGET (ptr)); + gdk_threads_leave (); +} + +/* + * Translate a Java KeyEvent object into a GdkEventKey event, then + * pass it to the GTK main loop for processing. + */ +JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetDispatchKeyEvent + (JNIEnv *env, jobject obj, jint id, jlong when, jint mods, + jint keyCode, jint keyLocation) +{ + void *ptr; + GdkEvent *event = NULL; + GdkKeymapKey *keymap_keys = NULL; + gint n_keys = 0; + guint lookup_keyval = 0; + + ptr = NSA_GET_PTR (env, obj); + + gdk_threads_enter (); + + if (id == AWT_KEY_PRESSED) + event = gdk_event_new (GDK_KEY_PRESS); + else if (id == AWT_KEY_RELEASED) + event = gdk_event_new (GDK_KEY_RELEASE); + else + { + gdk_threads_leave (); + /* Don't send AWT KEY_TYPED events to GTK. */ + return; + } + + if (GTK_IS_BUTTON (ptr)) + event->key.window = GTK_BUTTON (ptr)->event_window; + else if (GTK_IS_SCROLLED_WINDOW (ptr)) + event->key.window = GTK_WIDGET (GTK_SCROLLED_WINDOW (ptr)->container.child)->window; + else + event->key.window = GTK_WIDGET (ptr)->window; + + event->key.send_event = 0; + event->key.time = (guint32) when; + + if (mods & AWT_SHIFT_MASK) + event->key.state |= GDK_SHIFT_MASK; + if (mods & AWT_CTRL_MASK) + event->key.state |= GDK_CONTROL_MASK; + if (mods & AWT_ALT_MASK) + event->key.state |= GDK_MOD1_MASK; + + /* This hack is needed because the AWT has no notion of num lock. + It infers numlock state from the only Java virtual keys that are + affected by it. */ + if (keyCode == VK_NUMPAD9 + || keyCode == VK_NUMPAD8 + || keyCode == VK_NUMPAD7 + || keyCode == VK_NUMPAD6 + || keyCode == VK_NUMPAD5 + || keyCode == VK_NUMPAD4 + || keyCode == VK_NUMPAD3 + || keyCode == VK_NUMPAD2 + || keyCode == VK_NUMPAD1 + || keyCode == VK_NUMPAD0 + || keyCode == VK_DECIMAL) + event->key.state |= GDK_MOD2_MASK; + + /* These values don't need to be filled in since GTK doesn't use + them. */ + event->key.length = 0; + event->key.string = NULL; + + lookup_keyval = awt_keycode_to_keysym (keyCode, keyLocation); + + if (!gdk_keymap_get_entries_for_keyval (gdk_keymap_get_default (), + lookup_keyval, + &keymap_keys, + &n_keys)) + { + /* No matching keymap entry was found. */ + g_printerr ("No matching keymap entries were found\n"); + gdk_threads_leave (); + return; + } + + if (n_keys > 1) + g_printerr ("warning: using hardware keycode from first keymap entry, though multiple entries were found\n"); + + event->key.hardware_keycode = keymap_keys[0].keycode; + event->key.group = keymap_keys[0].group; + + g_free (keymap_keys); + + if (!gdk_keymap_translate_keyboard_state (gdk_keymap_get_default (), + event->key.hardware_keycode, + event->key.state, + event->key.group, + &event->key.keyval, + NULL, NULL, NULL)) + { + /* No matching keyval was found. */ + g_printerr ("No matching keyval was found\n"); + gdk_threads_leave (); + return; + } + + /* keyevent = (GdkEventKey *) event; */ + /* g_printerr ("generated event: sent: %d time: %d state: %d keyval: %d length: %d string: %s hardware_keycode: %d group: %d\n", keyevent->send_event, keyevent->time, keyevent->state, keyevent->keyval, keyevent->length, keyevent->string, keyevent->hardware_keycode, keyevent->group); */ + + /* We already received the original key event on the window itself, + so we don't want to resend it. */ + if (!GTK_IS_WINDOW (ptr)) + { + if (GTK_IS_SCROLLED_WINDOW (ptr)) + gtk_widget_event (GTK_WIDGET (GTK_SCROLLED_WINDOW (ptr)->container.child), event); + else + gtk_widget_event (GTK_WIDGET (ptr), event); + } + + gdk_threads_leave (); +} + /* * Find the origin of a widget's window. */ @@ -734,6 +1226,12 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignal g_signal_connect (GTK_OBJECT (ptr), "event", G_CALLBACK (pre_event_handler), *gref); + g_signal_connect (G_OBJECT (ptr), "focus-in-event", + G_CALLBACK (focus_in_cb), *gref); + + g_signal_connect (G_OBJECT (ptr), "focus-out-event", + G_CALLBACK (focus_out_cb), *gref); + gdk_threads_leave (); } @@ -772,3 +1270,26 @@ find_bg_color_widget (GtkWidget *widget) return bg_color_widget; } +static gboolean +focus_in_cb (GtkWidget *widget __attribute((unused)), + GdkEventFocus *event __attribute((unused)), + jobject peer) +{ + (*gdk_env)->CallVoidMethod (gdk_env, peer, + postFocusEventID, + AWT_FOCUS_GAINED, + JNI_FALSE); + return FALSE; +} + +static gboolean +focus_out_cb (GtkWidget *widget __attribute((unused)), + GdkEventFocus *event __attribute((unused)), + jobject peer) +{ + (*gdk_env)->CallVoidMethod (gdk_env, peer, + postFocusEventID, + AWT_FOCUS_LOST, + JNI_FALSE); + return FALSE; +} diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c index efee7c8f1a2..b3858fb3970 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c @@ -806,31 +806,6 @@ keyevent_to_awt_keychar (GdkEvent *event) } } -/* Checks if keyval triggers a KEY_TYPED event on the source widget. - This function identifies special keyvals that don't trigger - GtkIMContext "commit" signals, but that do trigger Java KEY_TYPED - events. */ -static int -generates_key_typed_event (GdkEvent *event, GtkWidget *source) -{ - guint keyval; - - if (!GTK_IS_ENTRY (source) - && !GTK_IS_TEXT_VIEW (source)) - return event->key.length ? 1 : 0; - - keyval = event->key.keyval; - - return (keyval == GDK_Escape - || keyval == GDK_BackSpace - || keyval == GDK_Delete - || keyval == GDK_KP_Delete - || keyval == GDK_Return - || keyval == GDK_KP_Enter - || (keyval == GDK_Tab - && GTK_IS_TEXT_VIEW(source))) ? 1 : 0; -} - void awt_event_handler (GdkEvent *event) { @@ -1055,104 +1030,53 @@ pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer) } } break; + case GDK_FOCUS_CHANGE: (*gdk_env)->CallVoidMethod (gdk_env, peer, postFocusEventID, - (jint) (event->focus_change.in) ? + (jint) (event->focus_change.in) ? AWT_FOCUS_GAINED : AWT_FOCUS_LOST, JNI_FALSE); break; case GDK_KEY_PRESS: - case GDK_KEY_RELEASE: - { - GdkWindow *obj_window; - jobject *focus_obj_ptr = NULL; - int generates_key_typed = 0; - - /* A widget with a grab will get key events */ - if (!GTK_IS_WINDOW (widget)) - focus_obj_ptr = &peer; - else - { - GtkWindow *window; - - /* Check if we have an enabled focused widget in this window. - If not don't handle the event. */ - window = GTK_WINDOW (widget); - if (!window->focus_widget - || !GTK_WIDGET_IS_SENSITIVE (window->focus_widget) - || !window->focus_widget->window) - return FALSE; - - /* TextArea peers are attached to the scrolled window - that contains the GtkTextView, not to the text view - itself. Same for List. */ - if (GTK_IS_TEXT_VIEW (window->focus_widget) - || GTK_IS_CLIST (window->focus_widget)) - { - obj_window = gtk_widget_get_parent (window->focus_widget)->window; - } - else if (GTK_IS_BUTTON (window->focus_widget)) - /* GtkButton events go to the "event_window" and this is what - we registered when the button was created. */ - obj_window = GTK_BUTTON (window->focus_widget)->event_window; - else - obj_window = window->focus_widget->window; - - gdk_property_get (obj_window, - gdk_atom_intern ("_GNU_GTKAWT_ADDR", FALSE), - gdk_atom_intern ("CARDINAL", FALSE), - 0, - sizeof (jobject), - FALSE, - NULL, - NULL, - NULL, - (guchar **)&focus_obj_ptr); - - /* If the window has no jobject attached we can't send anything */ - if (!focus_obj_ptr) - return FALSE; - - /* Should we generate an AWT_KEY_TYPED event? */ - generates_key_typed = generates_key_typed_event (event, window->focus_widget); - } - - if (event->type == GDK_KEY_PRESS) - { - (*gdk_env)->CallVoidMethod (gdk_env, *focus_obj_ptr, - postKeyEventID, - (jint) AWT_KEY_PRESSED, - (jlong) event->key.time, + if (GTK_IS_WINDOW (widget)) + { + /* GdkEventKey *keyevent = (GdkEventKey *) event; */ + /* g_printerr ("key press event: sent: %d time: %d state: %d keyval: %d length: %d string: %s hardware_keycode: %d group: %d\n", keyevent->send_event, keyevent->time, keyevent->state, keyevent->keyval, keyevent->length, keyevent->string, keyevent->hardware_keycode, keyevent->group); */ + + (*gdk_env)->CallVoidMethod (gdk_env, peer, + postKeyEventID, + (jint) AWT_KEY_PRESSED, + (jlong) event->key.time, keyevent_state_to_awt_mods (event), keysym_to_awt_keycode (event), keyevent_to_awt_keychar (event), keysym_to_awt_keylocation (event)); - - if (generates_key_typed) - { - (*gdk_env)->CallVoidMethod (gdk_env, *focus_obj_ptr, - postKeyEventID, - (jint) AWT_KEY_TYPED, - (jlong) event->key.time, - state_to_awt_mods (event->key.state), - VK_UNDEFINED, - keyevent_to_awt_keychar (event), - AWT_KEY_LOCATION_UNKNOWN); - } + /* FIXME: generation of key typed events needs to be moved + to GtkComponentPeer.postKeyEvent. If the key in a key + press event is not an "action" key + (KeyEvent.isActionKey) and is not a modifier key, then + it should generate a key typed event. */ + return TRUE; } - else /* GDK_KEY_RELEASE */ - { - (*gdk_env)->CallVoidMethod (gdk_env, *focus_obj_ptr, - postKeyEventID, - (jint) AWT_KEY_RELEASED, - (jlong) event->key.time, - keyevent_state_to_awt_mods (event), - keysym_to_awt_keycode (event), + else + return FALSE; + break; + case GDK_KEY_RELEASE: + if (GTK_IS_WINDOW (widget)) + { + (*gdk_env)->CallVoidMethod (gdk_env, peer, + postKeyEventID, + (jint) AWT_KEY_RELEASED, + (jlong) event->key.time, + keyevent_state_to_awt_mods (event), + keysym_to_awt_keycode (event), keyevent_to_awt_keychar (event), keysym_to_awt_keylocation (event)); - } - } + return TRUE; + } + else + return FALSE; break; default: break; diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c index f4e9c3599b3..13282e2be43 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c @@ -58,6 +58,9 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkImagePainter_drawPixels g = (struct graphics *) NSA_GET_PTR (env, gc_obj); + if (!jpixels) + return; + elems = (*env)->GetIntArrayElements (env, jpixels, NULL); num_pixels = (*env)->GetArrayLength (env, jpixels); diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c index 87ecafce991..9f8301bf7d5 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c @@ -1,76 +1,109 @@ /* gtklistpeer.c -- Native implementation of GtkListPeer Copyright (C) 1998, 1999, 2004 Free Software Foundation, Inc. -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath 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 for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -02111-1307 USA. - -Linking this library statically or dynamically with other modules is -making a combined work based on this library. Thus, the terms and -conditions of the GNU General Public License cover the whole -combination. - -As a special exception, the copyright holders of this library give you -permission to link this library with independent modules to produce an -executable, regardless of the license terms of these independent -modules, and to copy and distribute the resulting executable under -terms of your choice, provided that you also meet, for each linked -independent module, the terms and conditions of the license of that -module. An independent module is a module which is not derived from -or based on this library. If you modify this library, you may extend -this exception to your version of the library, but you are not -obligated to do so. If you do not wish to do so, delete this -exception statement from your version. */ - + This file is part of GNU Classpath. + + GNU Classpath is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU Classpath 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 for more details. + + You should have received a copy of the GNU General Public License + along with GNU Classpath; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. + + Linking this library statically or dynamically with other modules is + making a combined work based on this library. Thus, the terms and + conditions of the GNU General Public License cover the whole + combination. + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent + modules, and to copy and distribute the resulting executable under + terms of your choice, provided that you also meet, for each linked + independent module, the terms and conditions of the license of that + module. An independent module is a module which is not derived from + or based on this library. If you modify this library, you may extend + this exception to your version of the library, but you are not + obligated to do so. If you do not wish to do so, delete this + exception statement from your version. */ #include "gtkpeer.h" -#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h" #include "gnu_java_awt_peer_gtk_GtkListPeer.h" -static void item_select (GtkCList *list __attribute__((unused)), - int row, int col __attribute__((unused)), - GdkEventButton *event __attribute__((unused)), - jobject peer_obj); -static void item_unselect (GtkCList *list __attribute__((unused)), - int row, - int col __attribute__((unused)), - GdkEventButton *event __attribute__((unused)), - jobject peer_obj); +enum + { + COLUMN_STRING, + N_COLUMNS + }; -#define CLIST_FROM_SW(obj) (GTK_CLIST(GTK_SCROLLED_WINDOW (obj)->container.child)) +#define TREE_VIEW_FROM_SW(obj) \ + (GTK_TREE_VIEW (GTK_SCROLLED_WINDOW (obj)->container.child)) -JNIEXPORT void JNICALL +JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkListPeer_create - (JNIEnv *env, jobject obj) + (JNIEnv *env, jobject obj, jint rows) { - GtkWidget *list, *sw; + GtkWidget *sw; + GtkWidget *list; + GtkCellRenderer *renderer; + GtkTreeViewColumn *column; + GtkListStore *list_store; + GtkTreeIter iter; + GtkRequisition req; + gint i; /* Create global reference and save it for future use */ NSA_SET_GLOBAL_REF (env, obj); gdk_threads_enter (); - - list = gtk_clist_new (1); - gtk_widget_show (list); + + list_store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING); + /* Add the number of rows so that we can calculate the tree view's + size request. */ + for (i = 0; i < rows; i++) + { + gtk_list_store_append (list_store, &iter); + gtk_list_store_set (list_store, &iter, + COLUMN_STRING, "", + -1); + } + list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store)); + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes (NULL, + renderer, + "text", + COLUMN_STRING, + NULL); + sw = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + + gtk_tree_view_append_column (GTK_TREE_VIEW (list), column); + + gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (list), FALSE); + + gtk_widget_size_request (GTK_WIDGET (list), &req); + + gtk_widget_set_size_request (GTK_WIDGET (list), req.width, req.height); + gtk_container_add (GTK_CONTAINER (sw), list); + /* Remove the blank rows. */ + gtk_list_store_clear (list_store); + + gtk_widget_show (list); + gtk_widget_show (sw); + gdk_threads_leave (); NSA_SET_PTR (env, obj, sw); @@ -87,7 +120,6 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_connectJObject gdk_threads_enter (); gtk_widget_realize (GTK_WIDGET (ptr)); - connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window); gdk_threads_leave (); @@ -97,50 +129,98 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkListPeer_connectSignals (JNIEnv *env, jobject obj) { - GtkCList *list; - void *ptr = NSA_GET_PTR (env, obj); - jobject *gref = NSA_GET_GLOBAL_REF (env, obj); + void *ptr; + GtkTreeView *list; + jobject *gref; + + gref = NSA_GET_GLOBAL_REF (env, obj); g_assert (gref); + ptr = NSA_GET_PTR (env, obj); + gdk_threads_enter (); gtk_widget_realize (GTK_WIDGET (ptr)); + list = TREE_VIEW_FROM_SW (ptr); + g_signal_connect (G_OBJECT (list), "event", + G_CALLBACK (pre_event_handler), *gref); - /* connect selectable hook */ - - list = CLIST_FROM_SW (ptr); + gdk_threads_leave (); +} - g_signal_connect (G_OBJECT (list), "select_row", - GTK_SIGNAL_FUNC (item_select), *gref); +JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GtkListPeer_gtkSetFont + (JNIEnv *env, jobject obj, jstring name, jint style, jint size) +{ + const char *font_name; + void *ptr; + GtkWidget *list; + PangoFontDescription *font_desc; - g_signal_connect (G_OBJECT (list), "unselect_row", - GTK_SIGNAL_FUNC (item_unselect), *gref); + ptr = NSA_GET_PTR (env, obj); - /* Connect the superclass signals. */ - /* FIXME: Cannot do that here or it will get the sw and not the list. - We must a generic way of doing this. */ - /* Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, peer_obj); */ - g_signal_connect (GTK_OBJECT (list), "event", - G_CALLBACK (pre_event_handler), *gref); + gdk_threads_enter(); + + list = GTK_WIDGET (TREE_VIEW_FROM_SW (ptr)); + + font_name = (*env)->GetStringUTFChars (env, name, NULL); + + font_desc = pango_font_description_from_string (font_name); + pango_font_description_set_size (font_desc, size * PANGO_SCALE); + + if (style & AWT_STYLE_BOLD) + pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD); + + if (style & AWT_STYLE_ITALIC) + pango_font_description_set_style (font_desc, PANGO_STYLE_OBLIQUE); + + gtk_widget_modify_font (GTK_WIDGET (list), font_desc); + + pango_font_description_free (font_desc); + + (*env)->ReleaseStringUTFChars (env, name, font_name); + + gdk_threads_leave(); +} + +JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GtkListPeer_gtkWidgetRequestFocus + (JNIEnv *env, jobject obj) +{ + void *ptr; + GtkWidget *list; + + ptr = NSA_GET_PTR (env, obj); + + gdk_threads_enter (); + + list = GTK_WIDGET (TREE_VIEW_FROM_SW (ptr)); + gtk_widget_grab_focus (list); gdk_threads_leave (); } -JNIEXPORT void JNICALL -Java_gnu_java_awt_peer_gtk_GtkListPeer_append +JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GtkListPeer_append (JNIEnv *env, jobject obj, jobjectArray items) { void *ptr; - GtkCList *list; - jint count, i; + GtkTreeView *list; + GtkTreeIter iter; + GtkTreeModel *list_store; + jint count; + jint i; ptr = NSA_GET_PTR (env, obj); count = (*env)->GetArrayLength (env, items); gdk_threads_enter (); - list = CLIST_FROM_SW (ptr); - for (i = 0; i < count; i++) + + list = TREE_VIEW_FROM_SW (ptr); + list_store = gtk_tree_view_get_model (list); + + for (i = 0; i < count; i++) { const char *text; jobject item; @@ -148,11 +228,13 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_append item = (*env)->GetObjectArrayElement (env, items, i); text = (*env)->GetStringUTFChars (env, item, NULL); - gtk_clist_append (list, (char **)&text); + gtk_list_store_append (GTK_LIST_STORE (list_store), &iter); + gtk_list_store_set (GTK_LIST_STORE (list_store), &iter, + COLUMN_STRING, text, + -1); (*env)->ReleaseStringUTFChars (env, item, text); } - gtk_clist_columns_autosize (list); gdk_threads_leave (); } @@ -162,12 +244,26 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_add { void *ptr; const char *str; - + GtkTreeView *list; + GtkTreeIter iter; + GtkTreeModel *list_store; + ptr = NSA_GET_PTR (env, obj); str = (*env)->GetStringUTFChars (env, text, NULL); gdk_threads_enter (); - gtk_clist_insert (CLIST_FROM_SW (ptr), index, (char **)&str); + + list = TREE_VIEW_FROM_SW (ptr); + list_store = gtk_tree_view_get_model (list); + + if (index == -1) + gtk_list_store_append (GTK_LIST_STORE (list_store), &iter); + else + gtk_list_store_insert (GTK_LIST_STORE (list_store), &iter, index); + + gtk_list_store_set (GTK_LIST_STORE (list_store), &iter, + COLUMN_STRING, str, -1); + gdk_threads_leave (); (*env)->ReleaseStringUTFChars (env, text, str); @@ -179,22 +275,32 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_delItems (JNIEnv *env, jobject obj, jint start, jint end) { void *ptr; - GtkCList *list; + GtkTreeView *list; + GtkTreeIter iter; + GtkTreeModel *list_store; jint i; + jint num_items; ptr = NSA_GET_PTR (env, obj); gdk_threads_enter (); - list = CLIST_FROM_SW (ptr); - if (end == -1) /* special case for removing all rows */ - gtk_clist_clear (list); + list = TREE_VIEW_FROM_SW (ptr); + list_store = gtk_tree_view_get_model (list); + + /* Special case: remove all rows. */ + if (end == -1) + gtk_list_store_clear (GTK_LIST_STORE (list_store)); else { - gtk_clist_freeze (list); - for (i = end; i >= start; i--) - gtk_clist_remove (list, i); - gtk_clist_thaw (list); + i = 0; + num_items = end - start + 1; + gtk_tree_model_iter_nth_child (list_store, &iter, NULL, start); + while (i < num_items) + { + gtk_list_store_remove (GTK_LIST_STORE (list_store), &iter); + i++; + } } gdk_threads_leave (); @@ -205,11 +311,17 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_select (JNIEnv *env, jobject obj, jint index) { void *ptr; + GtkTreeView *list; + GtkTreePath *path; ptr = NSA_GET_PTR (env, obj); gdk_threads_enter (); - gtk_clist_select_row (CLIST_FROM_SW (ptr), index, 0); + + list = TREE_VIEW_FROM_SW (ptr); + path = gtk_tree_path_new_from_indices (index, -1); + gtk_tree_view_set_cursor (list, path, NULL, FALSE); + gdk_threads_leave (); } @@ -218,40 +330,61 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_deselect (JNIEnv *env, jobject obj, jint index) { void *ptr; + GtkTreeView *list; + GtkTreeSelection *selection; + GtkTreePath *path; ptr = NSA_GET_PTR (env, obj); gdk_threads_enter (); - gtk_clist_unselect_row (CLIST_FROM_SW (ptr), index, 0); + + list = TREE_VIEW_FROM_SW (ptr); + selection = gtk_tree_view_get_selection (list); + path = gtk_tree_path_new_from_indices (index, -1); + gtk_tree_selection_unselect_path (selection, path); + gdk_threads_leave (); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkListPeer_getSize - (JNIEnv *env, jobject obj, jint rows, jintArray jdims) + (JNIEnv *env, jobject obj, jint rows, jint visible_rows, jintArray jdims) { void *ptr; jint *dims; - GtkWidget *list; - GtkScrolledWindow *sw; - GtkRequisition myreq; + GtkRequisition current_req; + GtkRequisition natural_req; dims = (*env)->GetIntArrayElements (env, jdims, NULL); dims[0] = dims[1] = 0; - if (rows < 3) - rows = 3; - ptr = NSA_GET_PTR (env, obj); + gdk_threads_enter (); - list = GTK_WIDGET (CLIST_FROM_SW (ptr)); - sw = GTK_SCROLLED_WINDOW (ptr); + /* Save the widget's current size request. */ + gtk_widget_size_request (GTK_WIDGET (ptr), ¤t_req); + + /* Get the widget's "natural" size request. */ + gtk_widget_set_size_request (GTK_WIDGET (ptr), -1, -1); + gtk_widget_size_request (GTK_WIDGET (ptr), &natural_req); + + /* Reset the widget's size request. */ + gtk_widget_set_size_request (GTK_WIDGET (ptr), + current_req.width, current_req.height); + + dims[0] = natural_req.width; + + /* Calculate the final height, by comparing the number of rows + in the list to the number of rows requested by the caller. + FIXME: Is there a GTK method that counts the number of rows + in the list? If so, we don't need to bring visible_rows from + the Java peer. */ + if (rows == visible_rows) + dims[1] = natural_req.height; + else + dims[1] = natural_req.height / visible_rows * rows; - gtk_widget_size_request(GTK_WIDGET(sw), &myreq); - dims[1]=myreq.height; - dims[0]=myreq.width; - gdk_threads_leave (); (*env)->ReleaseIntArrayElements (env, jdims, dims, 0); @@ -263,31 +396,53 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_getSelectedIndexes (JNIEnv *env, jobject obj) { void *ptr; - GtkCList *list; - jintArray selection; - jint *sel; - GList *child; - jint count, i; + GtkTreeView *list; + GtkTreeSelection *selection; + jintArray result_array; + jint *result_array_iter; + GList *current_row; + GList *rows; + gint *indices; + jint count; + jint i; ptr = NSA_GET_PTR (env, obj); + gdk_threads_enter (); - list = CLIST_FROM_SW (ptr); - count = g_list_length (list->selection); + list = TREE_VIEW_FROM_SW (ptr); + selection = gtk_tree_view_get_selection (list); + count = gtk_tree_selection_count_selected_rows (selection); + if (count > 0) + { + current_row = rows = gtk_tree_selection_get_selected_rows (selection, NULL); - selection = (*env)->NewIntArray (env, count); - sel = (*env)->GetIntArrayElements (env, selection, NULL); + result_array = (*env)->NewIntArray (env, count); + result_array_iter = (*env)->GetIntArrayElements (env, result_array, NULL); - for (i = 0, child = list->selection; i < count; i++) - { - sel[i] = GPOINTER_TO_INT (child->data); - child = g_list_next (child); - } - gdk_threads_leave (); + for (i = 0; i < count; i++) + { + indices = gtk_tree_path_get_indices (current_row->data); + result_array_iter[i] = indices ? indices[0] : -1; + current_row = g_list_next (current_row); + } + + if (rows) + { + g_list_foreach (rows, (GFunc) gtk_tree_path_free, NULL); + g_list_free (rows); + } - (*env)->ReleaseIntArrayElements (env, selection, sel, 0); + gdk_threads_leave (); + + (*env)->ReleaseIntArrayElements (env, result_array, result_array_iter, 0); + + return result_array; + } + else + gdk_threads_leave (); - return selection; + return (jintArray) NULL; } JNIEXPORT void JNICALL @@ -295,11 +450,17 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_makeVisible (JNIEnv *env, jobject obj, jint index) { void *ptr; + GtkTreeView *list; + GtkTreePath *path; ptr = NSA_GET_PTR (env, obj); gdk_threads_enter (); - gtk_clist_moveto (CLIST_FROM_SW (ptr), index, 0, 0.5, 0.5); + + list = TREE_VIEW_FROM_SW (ptr); + path = gtk_tree_path_new_from_indices (index, -1); + gtk_tree_view_scroll_to_cell (list, path, NULL, FALSE, 0.0, 0.0); + gdk_threads_leave (); } @@ -308,38 +469,18 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_setMultipleMode (JNIEnv *env, jobject obj, jboolean mode) { void *ptr; - + GtkTreeView *list; + GtkTreeSelection *selection; + ptr = NSA_GET_PTR (env, obj); gdk_threads_enter (); - gtk_clist_set_selection_mode (CLIST_FROM_SW (ptr), - mode ? GTK_SELECTION_MULTIPLE : - GTK_SELECTION_SINGLE); - gdk_threads_leave (); -} -static void -item_select (GtkCList *list __attribute__((unused)), - int row, int col __attribute__((unused)), - GdkEventButton *event __attribute__((unused)), - jobject peer_obj) -{ - (*gdk_env)->CallVoidMethod (gdk_env, peer_obj, - postListItemEventID, - row, - (jint) AWT_ITEM_SELECTED); -} + list = TREE_VIEW_FROM_SW (ptr); + selection = gtk_tree_view_get_selection (list); + gtk_tree_selection_set_mode (selection, + mode ? GTK_SELECTION_MULTIPLE + : GTK_SELECTION_SINGLE); -static void -item_unselect (GtkCList *list __attribute__((unused)), - int row, - int col __attribute__((unused)), - GdkEventButton *event __attribute__((unused)), - jobject peer_obj) -{ - (*gdk_env)->CallVoidMethod (gdk_env, peer_obj, - postListItemEventID, - row, - (jint) AWT_ITEM_DESELECTED); + gdk_threads_leave (); } - diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c index e6a8851fcf2..0bb0ec52567 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c @@ -46,8 +46,11 @@ accel_attach (GtkMenuItem *menu_item, GtkAccelGroup *accel; accel = gtk_menu_get_accel_group (GTK_MENU (menu_item->submenu)); + /* FIXME: update this to use GTK-2.4 GtkActions. */ +#if 0 _gtk_accel_group_attach (accel, G_OBJECT (gtk_widget_get_toplevel (GTK_WIDGET(menu_item)))); +#endif } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuPeer_setupAccelGroup @@ -129,7 +132,7 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuPeer_addItem (JNIEnv *env, jobject obj, jobject menuitempeer, jint key, jboolean shift) { void *ptr1, *ptr2; - GtkMenu *menu; + GtkWidget *menu; ptr1 = NSA_GET_PTR (env, obj); ptr2 = NSA_GET_PTR (env, menuitempeer); @@ -142,7 +145,7 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuPeer_addItem if (key) { gtk_widget_add_accelerator (GTK_WIDGET (ptr2), "activate", - gtk_menu_get_accel_group (menu), key, + gtk_menu_get_accel_group (GTK_MENU (menu)), key, (GDK_CONTROL_MASK | ((shift) ? GDK_SHIFT_MASK : 0)), GTK_ACCEL_VISIBLE); diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c index ee12a7f77b1..2d271ea8f2b 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c @@ -93,7 +93,10 @@ Java_gnu_java_awt_peer_gtk_GtkPopupMenuPeer_setupAccelGroup gdk_threads_enter (); menu = GTK_MENU (GTK_MENU_ITEM (ptr1)->submenu); gtk_menu_set_accel_group (menu, gtk_accel_group_new ()); + /* FIXME: update this to use GTK-2.4 GtkActions. */ +#if 0 _gtk_accel_group_attach (gtk_menu_get_accel_group (menu), G_OBJECT (gtk_widget_get_toplevel (ptr2))); +#endif gdk_threads_leave (); } diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c index 704273c08a3..f9baa296459 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c @@ -164,7 +164,7 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkSetFont if (style & AWT_STYLE_ITALIC) pango_font_description_set_style (font_desc, PANGO_STYLE_OBLIQUE); - gtk_widget_modify_font (GTK_WIDGET(text), font_desc); + gtk_widget_modify_font (GTK_WIDGET (text), font_desc); pango_font_description_free (font_desc); @@ -173,6 +173,24 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkSetFont (*env)->ReleaseStringUTFChars (env, name, font_name); } +JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkWidgetRequestFocus + (JNIEnv *env, jobject obj) +{ + void *ptr; + GtkWidget *text; + + ptr = NSA_GET_PTR (env, obj); + + gdk_threads_enter (); + + text = GTK_WIDGET (TEXT_FROM_SW (ptr)); + + gtk_widget_grab_focus (text); + + gdk_threads_leave (); +} + JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getHScrollbarHeight (JNIEnv *env, jobject obj) diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c index 0d7d55562c5..2807e6b36fc 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c @@ -40,10 +40,6 @@ exception statement from your version. */ #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h" #include "gnu_java_awt_peer_gtk_GtkTextComponentPeer.h" -static void textcomponent_commit_cb (GtkIMContext *context, - const gchar *str, - jobject peer); - static void textcomponent_changed_cb (GtkEditable *editable, jobject peer); @@ -61,9 +57,6 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_connectSignals if (GTK_IS_ENTRY(ptr)) { - g_signal_connect (GTK_ENTRY (ptr)->im_context, "commit", - G_CALLBACK (textcomponent_commit_cb), *gref); - g_signal_connect (GTK_EDITABLE (ptr), "changed", G_CALLBACK (textcomponent_changed_cb), *gref); @@ -85,9 +78,6 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_connectSignals if (text) { - g_signal_connect (text->im_context, "commit", - G_CALLBACK (textcomponent_commit_cb), *gref); - buf = gtk_text_view_get_buffer (text); if (buf) g_signal_connect (buf, "changed", @@ -112,8 +102,8 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_getCaretPosition { void *ptr; int pos = 0; - GtkEditable *editable; /* type of GtkEntry (TextField) */ - GtkWidget *text = NULL; /* type of GtkTextView (TextArea) */ + GtkEditable *editable; + GtkWidget *text = NULL; GtkTextBuffer *buf; GtkTextMark *mark; GtkTextIter iter; @@ -157,8 +147,8 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_setCaretPosition (JNIEnv *env, jobject obj, jint pos) { void *ptr; - GtkEditable *editable; /* type of GtkEntry (TextField) */ - GtkWidget *text = NULL; /* type of GtkTextView (TextArea) */ + GtkEditable *editable; + GtkWidget *text = NULL; GtkTextBuffer *buf; GtkTextIter iter; @@ -198,8 +188,8 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_getSelectionStart { void *ptr; int pos = 0; - GtkEditable *editable; /* type of GtkEntry (TextField) */ - GtkWidget *text = NULL; /* type of GtkTextView (TextArea) */ + GtkEditable *editable; + GtkWidget *text = NULL; GtkTextBuffer *buf; GtkTextIter start; GtkTextIter end; @@ -255,8 +245,8 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_getSelectionEnd { void *ptr; int pos = 0; - GtkEditable *editable; /* type of GtkEntry (TextField) */ - GtkWidget *text = NULL; /* type of GtkTextView (TextArea) */ + GtkEditable *editable; + GtkWidget *text = NULL; GtkTextBuffer *buf; GtkTextIter start; GtkTextIter end; @@ -311,8 +301,8 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_select (JNIEnv *env, jobject obj, jint start, jint end) { void *ptr; - GtkEditable *editable; /* type of GtkEntry (TextField) */ - GtkWidget *text = NULL; /* type of GtkTextView (TextArea) */ + GtkEditable *editable; + GtkWidget *text = NULL; GtkTextBuffer *buf; GtkTextIter iter; @@ -357,8 +347,8 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_setEditable (JNIEnv *env, jobject obj, jboolean state) { void *ptr; - GtkEditable *editable; /* type of GtkEntry (TextField) */ - GtkWidget *text = NULL; /* type of GtkTextView (TextArea) */ + GtkEditable *editable; + GtkWidget *text = NULL; ptr = NSA_GET_PTR (env, obj); @@ -396,8 +386,8 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_getText void *ptr; char *contents = NULL; jstring jcontents; - GtkEditable *editable; /* type of GtkEntry (TextField) */ - GtkWidget *text = NULL; /* type of GtkTextView (TextArea) */ + GtkEditable *editable; + GtkWidget *text = NULL; GtkTextBuffer *buf; GtkTextIter start, end; @@ -444,7 +434,7 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_setText { void *ptr; const char *str; - GtkWidget *text = NULL; /* type of GtkTextView (TextArea) */ + GtkWidget *text = NULL; GtkTextBuffer *buf; ptr = NSA_GET_PTR (env, obj); @@ -480,28 +470,6 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_setText } static void -textcomponent_commit_cb (GtkIMContext *context __attribute__((unused)), - const gchar *str, - jobject peer) -{ - /* str is a \0-terminated UTF-8 encoded character. */ - gunichar2 *jc = g_utf8_to_utf16 (str, -1, NULL, NULL, NULL); - GdkEvent *event = gtk_get_current_event (); - - if (jc) - (*gdk_env)->CallVoidMethod (gdk_env, peer, - postKeyEventID, - (jint) AWT_KEY_TYPED, - (jlong) event->key.time, - keyevent_state_to_awt_mods (event), - VK_UNDEFINED, - (jchar) jc[0], - AWT_KEY_LOCATION_UNKNOWN); - g_free (jc); - gdk_event_free (event); -} - -static void textcomponent_changed_cb (GtkEditable *editable __attribute__((unused)), jobject peer) { diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c index 37c36906277..6234b29c913 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c @@ -39,6 +39,8 @@ exception statement from your version. */ #include "gtkpeer.h" #include "gnu_java_awt_peer_gtk_GtkToolkit.h" +static jint gdk_color_to_java_color (GdkColor color); + JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkToolkit_beep (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused))) @@ -88,3 +90,70 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_getScreenResolution return res; } +#define CONVERT(type, state) \ + gdk_color_to_java_color (style->type[GTK_STATE_ ## state]) + +JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GtkToolkit_loadSystemColors + (JNIEnv *env, jobject obj __attribute__((unused)), + jintArray jcolors) +{ + jint *colors; + GtkStyle *style; + + colors = (*env)->GetIntArrayElements (env, jcolors, 0); + + gdk_threads_enter (); + + style = gtk_widget_get_default_style (); + + colors[AWT_DESKTOP] = CONVERT (bg, SELECTED); + colors[AWT_ACTIVE_CAPTION] = CONVERT (bg, SELECTED); + colors[AWT_ACTIVE_CAPTION_TEXT] = CONVERT (text, SELECTED); + colors[AWT_ACTIVE_CAPTION_BORDER] = CONVERT (fg, NORMAL); + colors[AWT_INACTIVE_CAPTION] = CONVERT (base, INSENSITIVE); + colors[AWT_INACTIVE_CAPTION_TEXT] = CONVERT (fg, INSENSITIVE); + colors[AWT_INACTIVE_CAPTION_BORDER] = CONVERT (fg, INSENSITIVE); + colors[AWT_WINDOW] = CONVERT (bg, NORMAL); + colors[AWT_WINDOW_BORDER] = CONVERT (fg, NORMAL); + colors[AWT_WINDOW_TEXT] = CONVERT (fg, NORMAL); + colors[AWT_MENU] = CONVERT (bg, NORMAL); + colors[AWT_MENU_TEXT] = CONVERT (fg, NORMAL); + colors[AWT_TEXT] = CONVERT (bg, NORMAL); + colors[AWT_TEXT_TEXT] = CONVERT (fg, NORMAL); + colors[AWT_TEXT_HIGHLIGHT] = CONVERT (bg, SELECTED); + colors[AWT_TEXT_HIGHLIGHT_TEXT] = CONVERT (fg, SELECTED); + colors[AWT_TEXT_INACTIVE_TEXT] = CONVERT (bg, INSENSITIVE); + colors[AWT_CONTROL] = CONVERT (bg, NORMAL); + colors[AWT_CONTROL_TEXT] = CONVERT (fg, NORMAL); + colors[AWT_CONTROL_HIGHLIGHT] = CONVERT (base, ACTIVE); + colors[AWT_CONTROL_LT_HIGHLIGHT] = CONVERT (bg, PRELIGHT); + colors[AWT_CONTROL_SHADOW] = CONVERT (bg, ACTIVE); + colors[AWT_CONTROL_DK_SHADOW] = CONVERT (fg, INSENSITIVE); + colors[AWT_SCROLLBAR] = CONVERT (base, INSENSITIVE); + colors[AWT_INFO] = CONVERT (bg, NORMAL); + colors[AWT_INFO_TEXT] = CONVERT (fg, NORMAL); + + gdk_threads_leave (); + + (*env)->ReleaseIntArrayElements(env, jcolors, colors, 0); +} + +#undef CONVERT + +static jint +gdk_color_to_java_color (GdkColor gdk_color) +{ + guchar red; + guchar green; + guchar blue; + float factor; + + factor = 255.0 / 65535.0; + + red = (float) gdk_color.red * factor; + green = (float) gdk_color.green * factor; + blue = (float) gdk_color.blue * factor; + + return (jint) (0xff000000 | (red << 16) | (green << 8) | blue); +} diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c index 619b48d593a..c696a3fa6a2 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c @@ -357,6 +357,20 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBounds gdk_threads_enter (); gtk_window_move (GTK_WINDOW(ptr), x, y); + /* The call to gdk_window_move is needed in addition to the call to + gtk_window_move. If gdk_window_move isn't called, then the + following set of operations doesn't give the expected results: + + 1. show a window + 2. manually move it to another position on the screen + 3. hide the window + 4. reposition the window with Component.setLocation + 5. show the window + + Instead of being at the position set by setLocation, the window + is reshown at the position to which it was moved manually. */ + gdk_window_move (GTK_WIDGET (ptr)->window, x, y); + /* Need to change the widget's request size. */ gtk_widget_set_size_request (GTK_WIDGET(ptr), width, height); /* Also need to call gtk_window_resize. If the resize is requested diff --git a/libjava/jni/gtk-peer/gtkcairopeer.h b/libjava/jni/gtk-peer/gtkcairopeer.h index 90a148fa9fc..b4021f51ed9 100644 --- a/libjava/jni/gtk-peer/gtkcairopeer.h +++ b/libjava/jni/gtk-peer/gtkcairopeer.h @@ -71,7 +71,8 @@ struct graphics2d GdkWindow *win; GdkPixbuf *drawbuf; char *pattern_pixels; - cairo_surface_t *pattern; + cairo_surface_t *pattern_surface; + cairo_pattern_t *pattern; gboolean debug; }; diff --git a/libjava/jni/gtk-peer/gtkpeer.h b/libjava/jni/gtk-peer/gtkpeer.h index d552e687c9b..a913986c1db 100644 --- a/libjava/jni/gtk-peer/gtkpeer.h +++ b/libjava/jni/gtk-peer/gtkpeer.h @@ -361,8 +361,8 @@ struct graphics #define VK_ALT_GRAPH 65406 #define VK_UNDEFINED 0 -#define AWT_FOCUS_LOST 1004 -#define AWT_FOCUS_GAINED 1005 +#define AWT_FOCUS_GAINED 1004 +#define AWT_FOCUS_LOST 1005 #define AWT_WINDOW_OPENED 200 #define AWT_WINDOW_CLOSING 201 @@ -385,6 +385,35 @@ struct graphics #define AWT_STYLE_BOLD 1 #define AWT_STYLE_ITALIC 2 +/* From java.awt.SystemColor */ +#define AWT_DESKTOP 0 +#define AWT_ACTIVE_CAPTION 1 +#define AWT_ACTIVE_CAPTION_TEXT 2 +#define AWT_ACTIVE_CAPTION_BORDER 3 +#define AWT_INACTIVE_CAPTION 4 +#define AWT_INACTIVE_CAPTION_TEXT 5 +#define AWT_INACTIVE_CAPTION_BORDER 6 +#define AWT_WINDOW 7 +#define AWT_WINDOW_BORDER 8 +#define AWT_WINDOW_TEXT 9 +#define AWT_MENU 10 +#define AWT_MENU_TEXT 11 +#define AWT_TEXT 12 +#define AWT_TEXT_TEXT 13 +#define AWT_TEXT_HIGHLIGHT 14 +#define AWT_TEXT_HIGHLIGHT_TEXT 15 +#define AWT_TEXT_INACTIVE_TEXT 16 +#define AWT_CONTROL 17 +#define AWT_CONTROL_TEXT 18 +#define AWT_CONTROL_HIGHLIGHT 19 +#define AWT_CONTROL_LT_HIGHLIGHT 20 +#define AWT_CONTROL_SHADOW 21 +#define AWT_CONTROL_DK_SHADOW 22 +#define AWT_SCROLLBAR 23 +#define AWT_INFO 24 +#define AWT_INFO_TEXT 25 +#define AWT_NUM_COLORS 26 + extern jmethodID setBoundsCallbackID; extern jmethodID postActionEventID; |

