diff options
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 | 236 |
1 files changed, 19 insertions, 217 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 8aaf0d262..3240a3524 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 @@ -49,6 +49,7 @@ static gboolean focus_in_cb (GtkWidget *widget, 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 @@ -492,12 +493,12 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetParent if (GTK_IS_WINDOW (parent_widget)) { GList *children = gtk_container_children - (GTK_CONTAINER (GTK_BIN (parent_widget)->child)); + (GTK_CONTAINER (parent_widget)); if (GTK_IS_MENU_BAR (children->data)) - gtk_layout_put (GTK_LAYOUT (children->next->data), widget, 0, 0); + gtk_fixed_put (GTK_FIXED (children->next->data), widget, 0, 0); else - gtk_layout_put (GTK_LAYOUT (children->data), widget, 0, 0); + gtk_fixed_put (GTK_FIXED (children->data), widget, 0, 0); } else if (GTK_IS_SCROLLED_WINDOW (parent_widget)) @@ -509,7 +510,7 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetParent } else - gtk_layout_put (GTK_LAYOUT (parent_widget), widget, 0, 0); + gtk_fixed_put (GTK_FIXED (parent_widget), widget, 0, 0); gdk_threads_leave (); } @@ -792,7 +793,7 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setNativeBoun else { gtk_widget_set_size_request (widget, width, height); - gtk_layout_move (GTK_LAYOUT (widget->parent), widget, x, y); + gtk_fixed_move (GTK_FIXED (widget->parent), widget, x, y); } gdk_threads_leave (); @@ -908,38 +909,6 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetForeground } JNIEXPORT void JNICALL -Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkSetFont - (JNIEnv *env, jobject obj, jstring name, jint style, jint size) -{ - const char *font_name; - void *ptr; - PangoFontDescription *font_desc; - - ptr = NSA_GET_PTR (env, obj); - - font_name = (*env)->GetStringUTFChars (env, name, NULL); - - gdk_threads_enter(); - - font_desc = pango_font_description_from_string (font_name); - pango_font_description_set_size (font_desc, size * dpi_conversion_factor); - - 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(ptr), font_desc); - - pango_font_description_free (font_desc); - - gdk_threads_leave(); - - (*env)->ReleaseStringUTFChars (env, name, font_name); -} - -JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_show (JNIEnv *env, jobject obj) { @@ -965,23 +934,6 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_hide gdk_threads_leave(); } -GtkLayout * -find_gtk_layout (GtkWidget *parent) -{ - if (GTK_IS_WINDOW (parent)) - { - GList *children = gtk_container_children - (GTK_CONTAINER (GTK_BIN (parent)->child)); - - if (GTK_IS_MENU_BAR (children->data)) - return GTK_LAYOUT (children->next->data); - else /* GTK_IS_LAYOUT (children->data) */ - return GTK_LAYOUT (children->data); - } - - return NULL; -} - JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_isEnabled (JNIEnv *env, jobject obj) @@ -1013,141 +965,7 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_modalHasGrab return retval; } -static gboolean -filter_expose_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer) -{ - /* - * Prevent the default event handler from getting this signal if applicable - * FIXME: I came up with these filters by looking for patterns in the unwanted - * expose events that are fed back to us from gtk/X. Perhaps there is - * a way to prevent them from occuring in the first place. - */ - if (event->type == GDK_EXPOSE && (!GTK_IS_LAYOUT(widget) - || event->any.window != widget->window)) - { - g_signal_stop_emission_by_name(GTK_OBJECT(widget), "event"); - return FALSE; - } - else - { - /* There may be non-expose events that are triggered while we're - painting a heavyweight peer. */ - return pre_event_handler(widget, event, peer); - } -} - -JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_addExposeFilter - (JNIEnv *env, jobject obj) -{ - GtkObject *filterobj; - GtkWidget *vbox, *layout; - GList *children; - void *ptr = NSA_GET_PTR (env, obj); - jobject *gref = NSA_GET_GLOBAL_REF (env, obj); - gulong hid; - - g_assert (gref); - - gdk_threads_enter (); - - /* GtkFramePeer is built as a GtkLayout inside a GtkVBox inside a GtkWindow. - Events go to the GtkLayout layer, so we filter them there. */ - if (GTK_IS_WINDOW(ptr)) - { - children = gtk_container_get_children(GTK_CONTAINER(ptr)); - vbox = children->data; - g_assert (GTK_IS_VBOX(vbox)); - - children = gtk_container_get_children(GTK_CONTAINER(vbox)); - do - { - layout = children->data; - children = children->next; - } - while (!GTK_IS_LAYOUT (layout) && children != NULL); - g_assert (GTK_IS_LAYOUT(layout)); - - filterobj = GTK_OBJECT(layout); - } - else if (GTK_IS_SCROLLED_WINDOW(ptr)) - { - /* The event will go to the parent GtkLayout. */ - filterobj = GTK_OBJECT(GTK_WIDGET(ptr)->parent); - } - else - { - filterobj = GTK_OBJECT(ptr); - } - hid = g_signal_handler_find(filterobj, - G_SIGNAL_MATCH_FUNC, - 0, 0, NULL, *pre_event_handler, NULL); - if (hid > 0) - { - g_signal_handler_block(filterobj, hid); - } - g_signal_connect( filterobj, "event", - G_CALLBACK(filter_expose_event_handler), *gref); - - gdk_threads_leave (); -} - -JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_removeExposeFilter - (JNIEnv *env, jobject obj) -{ - GtkObject *filterobj; - GtkWidget *vbox, *layout; - GList *children; - void *ptr = NSA_GET_PTR (env, obj); - jobject *gref = NSA_GET_GLOBAL_REF (env, obj); - gulong hid; - - g_assert (gref); - - gdk_threads_enter (); - - /* GtkFramePeer is built as a GtkLayout inside a GtkVBox inside a GtkWindow. - Events go to the GtkLayout layer, so we filter them there. */ - if (GTK_IS_WINDOW(ptr)) - { - children = gtk_container_get_children(GTK_CONTAINER(ptr)); - vbox = children->data; - g_assert (GTK_IS_VBOX(vbox)); - - children = gtk_container_get_children(GTK_CONTAINER(vbox)); - do - { - layout = children->data; - children = children->next; - } - while (!GTK_IS_LAYOUT (layout) && children != NULL); - g_assert (GTK_IS_LAYOUT(layout)); - - filterobj = GTK_OBJECT(layout); - } - else if (GTK_IS_SCROLLED_WINDOW(ptr)) - { - /* The event will go to the parent GtkLayout. */ - filterobj = GTK_OBJECT(GTK_WIDGET(ptr)->parent); - } - else - { - filterobj = GTK_OBJECT(ptr); - } - - g_signal_handlers_disconnect_by_func (filterobj, - *filter_expose_event_handler, *gref); - hid = g_signal_handler_find(filterobj, - G_SIGNAL_MATCH_FUNC, - 0, 0, NULL, *pre_event_handler, NULL); - if (hid > 0) - { - g_signal_handler_unblock(filterobj, hid); - } - - gdk_threads_leave (); -} - -JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetQueueDrawArea +JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetRepaintArea (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height) { GdkRectangle rect; @@ -1155,15 +973,15 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetQueu ptr = NSA_GET_PTR (env, obj); - rect.x = x + GTK_WIDGET(ptr)->allocation.x; - rect.y = y + GTK_WIDGET(ptr)->allocation.y; + gdk_threads_enter (); + + rect.x = x; + rect.y = y; rect.width = width; rect.height = height; - gdk_threads_enter (); - gdk_window_invalidate_rect (GTK_WIDGET (ptr)->window, &rect, 0); - gdk_window_process_all_updates(); + gdk_window_process_updates (GTK_WIDGET (ptr)->window, TRUE); gdk_threads_leave (); } @@ -1187,23 +1005,19 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectJObjec JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (JNIEnv *env, jobject obj) { - void *ptr = NSA_GET_PTR (env, obj); - jobject *gref = NSA_GET_GLOBAL_REF (env, obj); - g_assert (gref); + void *ptr; + jobject *gref; + + ptr = NSA_GET_PTR (env, obj); + gref = NSA_GET_GLOBAL_REF (env, obj); gdk_threads_enter (); gtk_widget_realize (GTK_WIDGET (ptr)); - - /* FIXME: We could check here if this is a scrolled window with a - single child that does not have an associated jobject. This - means that it is one of our wrapped widgets like List or TextArea - and thus we could connect the signal to the child without having - to specialize this method. */ /* Connect EVENT signal, which happens _before_ any specific signal. */ - g_signal_connect (GTK_OBJECT (ptr), "event", + g_signal_connect (GTK_OBJECT (ptr), "event", G_CALLBACK (pre_event_handler), *gref); g_signal_connect (G_OBJECT (ptr), "focus-in-event", @@ -1235,19 +1049,7 @@ find_bg_color_widget (GtkWidget *widget) { GtkWidget *bg_color_widget; - if (GTK_IS_WINDOW (widget)) - { - GtkWidget *vbox; - GList* children; - - children = gtk_container_get_children(GTK_CONTAINER(widget)); - vbox = children->data; - - children = gtk_container_get_children(GTK_CONTAINER(vbox)); - bg_color_widget = children->data; - } - else - bg_color_widget = widget; + bg_color_widget = widget; return bg_color_widget; } |