diff options
author | farshadmuhammad <farshadmuhammad@cmail.carleton.ca> | 2013-07-19 15:50:38 -0400 |
---|---|---|
committer | farshadmuhammad <farshadmuhammad@cmail.carleton.ca> | 2013-07-19 15:50:38 -0400 |
commit | b8b72a7bb7f3a822c7ba290f1b9aef386b80ccbf (patch) | |
tree | b10b95570105455e88e1356efee8ca6c54f3f283 /native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c | |
parent | 4c1b567bb1c279f343cd4b5188cd2172af960e3f (diff) | |
download | classpath-b8b72a7bb7f3a822c7ba290f1b9aef386b80ccbf.tar.gz |
GTK3 commit - Farshad Muhammad
Diffstat (limited to 'native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c')
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c | 119 |
1 files changed, 89 insertions, 30 deletions
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c index 5de5d82a6..28a929165 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c @@ -39,7 +39,8 @@ exception statement from your version. */ #include "gtkpeer.h" #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h" -#include <gtk/gtkprivate.h> +#include <gtk/gtk.h> +//#include <gtk/gtkprivate.h> #define AWT_DEFAULT_CURSOR 0 #define AWT_CROSSHAIR_CURSOR 1 @@ -207,7 +208,7 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursorUnlocked GdkWindow *win; GdkCursorType gdk_cursor_type; GdkCursor *gdk_cursor; - + printf("THIS IS YOUR CURSOOOOOORRRRR!!!"); ptr = gtkpeer_get_widget (env, obj); switch (type) @@ -257,20 +258,30 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursorUnlocked widget = get_widget(GTK_WIDGET(ptr)); - win = widget->window; - if ((widget->window) == NULL) - win = GTK_WIDGET(ptr)->window; + //win = widget->window; + //if ((widget->window) == NULL) + //win = GTK_WIDGET(ptr)->window; + win = gtk_widget_get_window(widget); + if ((gtk_widget_get_window(widget)) == NULL) + win = gtk_widget_get_window(GTK_WIDGET(ptr)); + if (image == NULL) gdk_cursor = gdk_cursor_new (gdk_cursor_type); else + gdk_cursor - = gdk_cursor_new_from_pixbuf (gdk_drawable_get_display (win), + = gdk_cursor_new_from_pixbuf (gdk_window_get_display (win), cp_gtk_image_get_pixbuf (env, image), x, y); - + gdk_window_set_cursor (win, gdk_cursor); + + #if GTK_MAJOR_VERSION == 2 gdk_cursor_unref (gdk_cursor); + #elif GTK_MAJOR_VERSION == 3 + g_object_unref(gdk_cursor); + #endif /* Make sure the cursor is replaced on screen. */ gdk_flush(); @@ -293,7 +304,8 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetParent widget = GTK_WIDGET (ptr); parent_widget = get_widget(GTK_WIDGET (parent_ptr)); - if (widget->parent == NULL) + //if (widget->parent == NULL) + if (gtk_widget_get_parent(widget) == NULL) { if (GTK_IS_WINDOW (parent_widget)) { @@ -310,13 +322,15 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetParent { gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (parent_widget), widget); - gtk_viewport_set_shadow_type (GTK_VIEWPORT (widget->parent), + // gtk_viewport_set_shadow_type (GTK_VIEWPORT (widget->parent), + gtk_viewport_set_shadow_type (GTK_VIEWPORT (gtk_widget_get_parent(widget)), GTK_SHADOW_NONE); } else { - if (widget->parent == NULL) + //if (widget->parent == NULL) + if (gtk_widget_get_parent(widget) == NULL) gtk_fixed_put (GTK_FIXED (parent_widget), widget, 0, 0); } } @@ -350,7 +364,8 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetHasFocus ptr = gtkpeer_get_widget (env, obj); - retval = GTK_WIDGET_HAS_FOCUS((GTK_WIDGET (ptr))); + //retval = GTK_WIDGET_HAS_FOCUS((GTK_WIDGET (ptr))); + retval = gtk_widget_has_focus((GTK_WIDGET (ptr))); gdk_threads_leave (); @@ -368,7 +383,8 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetCanFocus ptr = gtkpeer_get_widget (env, obj); - retval = GTK_WIDGET_CAN_FOCUS((GTK_WIDGET (ptr))); + //retval = GTK_WIDGET_CAN_FOCUS((GTK_WIDGET (ptr))); + retval = gtk_widget_get_can_focus((GTK_WIDGET (ptr))); gdk_threads_leave (); @@ -421,11 +437,14 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetDispatchKeyEvent } if (GTK_IS_BUTTON (ptr)) - event->key.window = GTK_BUTTON (get_widget(GTK_WIDGET (ptr)))->event_window; + //event->key.window = GTK_BUTTON (get_widget(GTK_WIDGET (ptr)))->event_window; + event->key.window = gtk_button_get_event_window (GTK_BUTTON (get_widget(GTK_WIDGET (ptr)))); else if (GTK_IS_SCROLLED_WINDOW (get_widget(GTK_WIDGET (ptr)))) - event->key.window = GTK_WIDGET (GTK_SCROLLED_WINDOW (get_widget(GTK_WIDGET (ptr)))->container.child)->window; + //event->key.window = GTK_WIDGET (GTK_SCROLLED_WINDOW (get_widget(GTK_WIDGET (ptr)))->container.child)->window; + event->key.window = gtk_widget_get_window(GTK_WIDGET (gtk_bin_get_child(&(GTK_SCROLLED_WINDOW (get_widget(GTK_WIDGET (ptr)))->container)))); else - event->key.window = get_widget(GTK_WIDGET (ptr))->window; + //event->key.window = get_widget(GTK_WIDGET (ptr))->window; + event->key.window = gtk_widget_get_window(get_widget(GTK_WIDGET (ptr))); event->key.send_event = 0; event->key.time = (guint32) when; @@ -502,7 +521,8 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetDispatchKeyEvent if (!GTK_IS_WINDOW (ptr)) { if (GTK_IS_SCROLLED_WINDOW (get_widget(GTK_WIDGET (ptr)))) - gtk_widget_event (GTK_WIDGET (GTK_SCROLLED_WINDOW (get_widget(GTK_WIDGET (ptr)))->container.child), event); + //gtk_widget_event (GTK_WIDGET (GTK_SCROLLED_WINDOW (get_widget(GTK_WIDGET (ptr)))->container.child), event); + gtk_widget_event (GTK_WIDGET (gtk_bin_get_child(&(GTK_SCROLLED_WINDOW (get_widget(GTK_WIDGET (ptr)))->container))), event); else gtk_widget_event (get_widget(GTK_WIDGET (ptr)), event); } @@ -535,7 +555,8 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWindowGetLocationOnScreenUnlocked ptr = gtkpeer_get_widget (env, obj); point = (*env)->GetIntArrayElements (env, jpoint, 0); - gdk_window_get_root_origin (get_widget(GTK_WIDGET (ptr))->window, point, point+1); + //gdk_window_get_root_origin (get_widget(GTK_WIDGET (ptr))->window, point, point+1); + gdk_window_get_root_origin (gtk_widget_get_window(get_widget(GTK_WIDGET (ptr))), point, point+1); (*env)->ReleaseIntArrayElements(env, jpoint, point, 0); } @@ -569,10 +590,16 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetLocationOnScreenUnlocked widget = get_widget(GTK_WIDGET (ptr)); while(gtk_widget_get_parent(widget) != NULL) widget = gtk_widget_get_parent(widget); - gdk_window_get_position (GTK_WIDGET(widget)->window, point, point+1); + //gdk_window_get_position (GTK_WIDGET(widget)->window, point, point+1); + gdk_window_get_position (gtk_widget_get_window(GTK_WIDGET(widget)), point, point+1); + + //*point += GTK_WIDGET(ptr)->allocation.x; + //*(point+1) += GTK_WIDGET(ptr)->allocation.y; - *point += GTK_WIDGET(ptr)->allocation.x; - *(point+1) += GTK_WIDGET(ptr)->allocation.y; + GtkAllocation alloc; + gtk_widget_get_allocation(GTK_WIDGET(ptr), &alloc); + *point += alloc.x; + *(point+1) += alloc.y; (*env)->ReleaseIntArrayElements(env, jpoint, point, 0); } @@ -594,9 +621,11 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetDimensions dims = (*env)->GetIntArrayElements (env, jdims, 0); dims[0] = dims[1] = 0; - + #if GTK_MAJOR_VERSION == 2 gtk_widget_size_request (get_widget(GTK_WIDGET (ptr)), &requisition); - + #elif GTK_MAJOR_VERSION == 3 + gtk_widget_get_preferred_size(get_widget(GTK_WIDGET(ptr)), &requisition, NULL); + #endif dims[0] = requisition.width; dims[1] = requisition.height; @@ -637,17 +666,35 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetPreferredDimensions } else { + #if GTK_MAJOR_VERSION == 3 + /* Save the widget's current size request. */ + //gtk_widget_size_request (get_widget(GTK_WIDGET (ptr)), ¤t_req); + gtk_widget_get_preferred_size(get_widget(GTK_WIDGET(ptr)), ¤t_req, NULL); + + /* Get the widget's "natural" size request. */ + gtk_widget_set_size_request (get_widget(GTK_WIDGET (ptr)), -1, -1); + //gtk_widget_size_request (get_widget(GTK_WIDGET (ptr)), &natural_req); + gtk_widget_get_preferred_size(get_widget(GTK_WIDGET (ptr)),NULL, &natural_req); + + /* Reset the widget's size request. */ + gtk_widget_set_size_request (get_widget(GTK_WIDGET (ptr)), + current_req.width, current_req.height); + + #elif GTK_MAJOR_VERSION == 2 /* Save the widget's current size request. */ gtk_widget_size_request (get_widget(GTK_WIDGET (ptr)), ¤t_req); + /* Get the widget's "natural" size request. */ gtk_widget_set_size_request (get_widget(GTK_WIDGET (ptr)), -1, -1); gtk_widget_size_request (get_widget(GTK_WIDGET (ptr)), &natural_req); + /* Reset the widget's size request. */ gtk_widget_set_size_request (get_widget(GTK_WIDGET (ptr)), current_req.width, current_req.height); + #endif dims[0] = natural_req.width; dims[1] = natural_req.height; } @@ -683,8 +730,10 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setNativeBounds case though, moving the child widget is invalid since a ScrollPane only has one child and that child is always located at (0, 0) in viewport coordinates. */ - if (widget->parent != NULL && GTK_IS_FIXED (widget->parent)) - gtk_fixed_move (GTK_FIXED (widget->parent), widget, x, y); + /* if (widget->parent != NULL && GTK_IS_FIXED (widget->parent)) + gtk_fixed_move (GTK_FIXED (widget->parent), widget, x, y);*/ + if (gtk_widget_get_parent(widget) != NULL && GTK_IS_FIXED (gtk_widget_get_parent(widget))) + gtk_fixed_move (GTK_FIXED (gtk_widget_get_parent(widget)), widget, x, y); } gdk_threads_leave (); @@ -703,7 +752,9 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetBackground ptr = gtkpeer_get_widget (env, obj); - bg = GTK_WIDGET (ptr)->style->bg[GTK_STATE_NORMAL]; + //bg = GTK_WIDGET (ptr)->style->bg[GTK_STATE_NORMAL]; + bg = gtk_widget_get_style(GTK_WIDGET (ptr))->bg[GTK_STATE_NORMAL]; + array = (*env)->NewIntArray (env, 3); @@ -732,7 +783,8 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetForeground ptr = gtkpeer_get_widget (env, obj); - fg = get_widget(GTK_WIDGET (ptr))->style->fg[GTK_STATE_NORMAL]; + //fg = get_widget(GTK_WIDGET (ptr))->style->fg[GTK_STATE_NORMAL]; + fg = gtk_widget_get_style(get_widget(GTK_WIDGET (ptr)))->fg[GTK_STATE_NORMAL]; array = (*env)->NewIntArray (env, 3); @@ -856,7 +908,7 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_isEnabled ptr = gtkpeer_get_widget (env, obj); - ret_val = GTK_WIDGET_IS_SENSITIVE (get_widget(GTK_WIDGET (ptr))); + ret_val = gtk_widget_is_sensitive (get_widget(GTK_WIDGET (ptr))); gdk_threads_leave (); @@ -873,7 +925,8 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_modalHasGrab gdk_threads_enter (); widget = gtk_grab_get_current (); - retval = (widget && GTK_IS_WINDOW (widget) && GTK_WINDOW (widget)->modal); + //retval = (widget && GTK_IS_WINDOW (widget) && GTK_WINDOW (widget)->modal); + retval = (widget && GTK_IS_WINDOW (widget) && gtk_window_get_modal(GTK_WINDOW (widget))); gdk_threads_leave (); @@ -966,8 +1019,12 @@ find_bg_color_widget (GtkWidget *widget) void cp_gtk_component_connect_expose_signals (GObject *ptr, jobject gref) { - g_signal_connect (G_OBJECT (ptr), "expose-event", + #if GTK_MAJOR_VERSION == 2 + g_signal_connect (G_OBJECT (ptr), "expose-event", G_CALLBACK (component_expose_cb), gref); + #elif GTK_MAJOR_VERSION == 3 + g_signal_connect (G_OBJECT (ptr), "draw", G_CALLBACK (component_expose_cb), gref); + #endif } void @@ -1078,7 +1135,9 @@ component_button_release_cb (GtkWidget *widget __attribute__((unused)), /* Generate an AWT click event only if the release occured in the window it was pressed in, and the mouse has not been dragged since the last time it was pressed. */ - gdk_drawable_get_size (event->window, &width, &height); + //gdk_drawable_get_size (event->window, &width, &height); + width = gdk_window_get_width(event->window); + height = gdk_window_get_height(event->window); if (! hasBeenDragged && event->x >= 0 && event->y >= 0 |