JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_dispose (JNIEnv *env, jobject obj) { struct graphics *g; g = (struct graphics *) NSA_DEL_PTR (env, obj); if (!g) return; /* dispose has been called more than once */ gdk_threads_enter (); XFlush (GDK_DISPLAY ()); gdk_gc_destroy (g->gc); if (GDK_STABLE_IS_PIXMAP (g->drawable)) gdk_pixmap_unref (g->drawable); else /* GDK_IS_WINDOW (g->drawable) */ gdk_window_unref (g->drawable); gdk_colormap_unref (g->cm); gdk_threads_leave (); free (g); }
CLIP_DLLEXPORT int gdk_object_window_destructor(ClipMachine *cm, C_object *cwin) { if (cwin && GDK_IS_WINDOW(cwin) && cwin->ref_count >= 0) gdk_window_unref(GDK_WINDOW(cwin->object)); return 0; }
static void gtk_plot_gdk_finalize (GtkObject *object) { gdk_window_unref(GTK_PLOT_GDK(object)->window); if(GTK_PLOT_GDK(object)->ref_count > 0 && GTK_PLOT_GDK(object)->gc) gdk_gc_destroy(GTK_PLOT_GDK(object)->gc); }
void gdk_event_free(GdkEvent * event) { g_return_if_fail(event != NULL); g_assert(event_chunk != NULL); /* paranoid */ if ((event->any.window) && (event->type != GDK_DESTROY)) gdk_window_unref(event->any.window); switch (event->any.type) { case GDK_KEY_PRESS: case GDK_KEY_RELEASE: g_free(event->key.string); break; case GDK_ENTER_NOTIFY: case GDK_LEAVE_NOTIFY: if (event->crossing.subwindow != NULL) gdk_window_unref(event->crossing.subwindow); break; case GDK_DRAG_ENTER: case GDK_DRAG_LEAVE: case GDK_DRAG_MOTION: case GDK_DRAG_STATUS: case GDK_DROP_START: case GDK_DROP_FINISHED: gdk_drag_context_unref(event->dnd.context); break; default: break; } g_mem_chunk_free(event_chunk, event); }
void gtk_pizza_scroll (GtkPizza *pizza, gint dx, gint dy) { GtkWidget *widget; XEvent xevent; XID win; gint x,y,w,h,border; widget = GTK_WIDGET (pizza); pizza->xoffset += dx; pizza->yoffset += dy; if (!GTK_WIDGET_MAPPED (pizza)) { gtk_pizza_position_children (pizza); return; } gtk_pizza_adjust_allocations (pizza, -dx, -dy); if (pizza->shadow_type == GTK_MYSHADOW_NONE) border = 0; else if (pizza->shadow_type == GTK_MYSHADOW_THIN) border = 1; else border = 2; x = 0; y = 0; w = widget->allocation.width - 2*border; h = widget->allocation.height - 2*border; if (dx > 0) { if (gravity_works) { gdk_window_resize (pizza->bin_window, w + dx, h); gdk_window_move (pizza->bin_window, x-dx, y); gdk_window_move_resize (pizza->bin_window, x, y, w, h ); } else { /* FIXME */ } } else if (dx < 0) { if (gravity_works) { gdk_window_move_resize (pizza->bin_window, x + dx, y, w - dx, h); gdk_window_move (pizza->bin_window, x, y); gdk_window_resize (pizza->bin_window, w, h ); } else { /* FIXME */ } } if (dy > 0) { if (gravity_works) { gdk_window_resize (pizza->bin_window, w, h + dy); gdk_window_move (pizza->bin_window, x, y-dy); gdk_window_move_resize (pizza->bin_window, x, y, w, h ); } else { /* FIXME */ } } else if (dy < 0) { if (gravity_works) { gdk_window_move_resize (pizza->bin_window, x, y+dy, w, h - dy ); gdk_window_move (pizza->bin_window, x, y); gdk_window_resize (pizza->bin_window, w, h ); } else { /* FIXME */ } } gtk_pizza_position_children (pizza); gdk_flush(); win = GDK_WINDOW_XWINDOW (pizza->bin_window); while (XCheckIfEvent(GDK_WINDOW_XDISPLAY (pizza->bin_window), &xevent, gtk_pizza_expose_predicate, (XPointer)&win)) { GdkEvent event; GtkWidget *event_widget; if ((xevent.xany.window == GDK_WINDOW_XWINDOW (pizza->bin_window)) ) gtk_pizza_filter (&xevent, &event, pizza); if (xevent.type == Expose) { event.expose.window = gdk_window_lookup (xevent.xany.window); gdk_window_get_user_data (event.expose.window, (gpointer *)&event_widget); if (event_widget) { event.expose.type = GDK_EXPOSE; event.expose.area.x = xevent.xexpose.x; event.expose.area.y = xevent.xexpose.y; event.expose.area.width = xevent.xexpose.width; event.expose.area.height = xevent.xexpose.height; event.expose.count = xevent.xexpose.count; gdk_window_ref (event.expose.window); gtk_widget_event (event_widget, &event); gdk_window_unref (event.expose.window); } } } }