2008-07-01 22:57:50 +00:00
|
|
|
/* GDK - The GIMP Drawing Kit
|
2007-07-19 23:50:39 +00:00
|
|
|
* Copyright (C) 1995-2007 Peter Mattis, Spencer Kimball,
|
|
|
|
* Josh MacDonald, Ryan Lortie
|
1997-11-24 22:37:52 +00:00
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
2000-07-26 11:33:08 +00:00
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
1997-11-24 22:37:52 +00:00
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library 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
|
2000-07-26 11:33:08 +00:00
|
|
|
* Lesser General Public License for more details.
|
1997-11-24 22:37:52 +00:00
|
|
|
*
|
2000-07-26 11:33:08 +00:00
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
1998-04-13 02:02:47 +00:00
|
|
|
* License along with this library; if not, write to the
|
|
|
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
|
|
* Boston, MA 02111-1307, USA.
|
1997-11-24 22:37:52 +00:00
|
|
|
*/
|
1998-03-17 07:54:57 +00:00
|
|
|
|
1999-02-24 07:37:18 +00:00
|
|
|
/*
|
2000-07-26 11:33:08 +00:00
|
|
|
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
1999-02-24 07:37:18 +00:00
|
|
|
* file for a list of people on the GTK+ Team. See the ChangeLog
|
|
|
|
* files for a list of changes. These files are distributed with
|
2009-06-01 10:04:36 +00:00
|
|
|
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
|
1999-02-24 07:37:18 +00:00
|
|
|
*/
|
|
|
|
|
2008-06-22 14:28:52 +00:00
|
|
|
#include "config.h"
|
1999-10-01 23:18:30 +00:00
|
|
|
#include "gdkwindow.h"
|
2008-06-27 14:27:44 +00:00
|
|
|
#include "gdkwindowimpl.h"
|
2000-03-28 01:24:44 +00:00
|
|
|
#include "gdkinternals.h"
|
|
|
|
#include "gdk.h" /* For gdk_rectangle_union() */
|
|
|
|
#include "gdkpixmap.h"
|
2000-10-24 00:15:14 +00:00
|
|
|
#include "gdkdrawable.h"
|
2009-07-16 06:16:01 +00:00
|
|
|
#include "gdkintl.h"
|
2002-04-25 22:29:14 +00:00
|
|
|
#include "gdkscreen.h"
|
2009-06-04 18:15:29 +00:00
|
|
|
#include "gdkmarshalers.h"
|
2005-03-16 03:17:27 +00:00
|
|
|
#include "gdkalias.h"
|
2000-03-28 01:24:44 +00:00
|
|
|
|
2008-12-18 10:30:10 +00:00
|
|
|
#undef DEBUG_WINDOW_PRINTING
|
|
|
|
|
2009-02-16 18:26:35 +00:00
|
|
|
#ifdef GDK_WINDOWING_X11
|
2008-07-18 13:03:42 +00:00
|
|
|
#include "x11/gdkx.h" /* For workaround */
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "math.h"
|
|
|
|
|
2009-06-01 11:38:04 +00:00
|
|
|
/* Historically a GdkWindow always matches a platform native window,
|
|
|
|
* be it a toplevel window or a child window. In this setup the
|
|
|
|
* GdkWindow (and other GdkDrawables) were platform independent classes,
|
|
|
|
* and the actual platform specific implementation was in a delegate
|
|
|
|
* object availible as "impl" in the window object.
|
2008-07-18 13:03:42 +00:00
|
|
|
*
|
2009-06-01 11:38:04 +00:00
|
|
|
* With the addition of client side windows and offscreen windows this
|
|
|
|
* changes a bit. The application-visible GdkWindow object behaves as
|
|
|
|
* it did before, but not all such windows now have a corresponding native
|
|
|
|
* window. Instead windows that are "client side" are emulated by the gdk
|
|
|
|
* code such that clipping, drawing, moving, events etc work as expected.
|
|
|
|
*
|
|
|
|
* For GdkWindows that have a native window the "impl" object is the
|
|
|
|
* same as before. However, for all client side windows the impl object
|
|
|
|
* is shared with its parent (i.e. all client windows descendants of one
|
|
|
|
* native window has the same impl.
|
|
|
|
*
|
|
|
|
* Additionally there is a new type of platform independent impl object,
|
|
|
|
* GdkOffscreenWindow. All windows of type GDK_WINDOW_OFFSCREEN get an impl
|
|
|
|
* of this type (while their children are generally GDK_WINDOW_CHILD virtual
|
|
|
|
* windows). Such windows work by allocating a GdkPixmap as the backing store
|
|
|
|
* for drawing operations, which is resized with the window.
|
|
|
|
*
|
|
|
|
* GdkWindows have a pointer to the "impl window" they are in, i.e.
|
|
|
|
* the topmost GdkWindow which have the same "impl" value. This is stored
|
|
|
|
* in impl_window, which is different from the window itself only for client
|
|
|
|
* side windows.
|
|
|
|
* All GdkWindows (native or not) track the position of the window in the parent
|
|
|
|
* (x, y), the size of the window (width, height), the position of the window
|
|
|
|
* with respect to the impl window (abs_x, abs_y). We also track the clip
|
|
|
|
* region of the window wrt parent windows and siblings, in window-relative
|
|
|
|
* coordinates with and without child windows included (clip_region,
|
|
|
|
* clip_region_with_children).
|
|
|
|
*
|
|
|
|
* All toplevel windows are native windows, but also child windows can be
|
|
|
|
* native (although not children of offscreens). We always listen to
|
|
|
|
* a basic set of events (see get_native_event_mask) for these windows
|
|
|
|
* so that we can emulate events for any client side children.
|
|
|
|
*
|
|
|
|
* For native windows we apply the calculated clip region as a window shape
|
|
|
|
* so that eg. client side siblings that overlap the native child properly
|
|
|
|
* draws over the native child window.
|
|
|
|
*
|
|
|
|
* In order to minimize flicker and for performance we use a couple of cacheing
|
|
|
|
* tricks. First of all, every time we do a window to window copy area, for instance
|
|
|
|
* when moving a client side window or when scrolling/moving a region in a window
|
|
|
|
* we store this in outstanding_moves instead of applying immediately. We then
|
|
|
|
* delay this move until we really need it (because something depends on being
|
|
|
|
* able to read it), or until we're handing a redraw from an expose/invalidation
|
|
|
|
* (actually we delay it past redraw, but before blitting the double buffer pixmap
|
|
|
|
* to the window). This gives us two advantages. First of all it minimizes the time
|
|
|
|
* from the window is moved to the exposes related to that move, secondly it allows
|
|
|
|
* us to be smart about how to do the copy. We combine multiple moves into one (when
|
|
|
|
* possible) and we don't actually do copies to anything that is or will be
|
|
|
|
* invalidated and exposed anyway.
|
|
|
|
*
|
|
|
|
* Secondly, we use something called a "implicit paint" during repaint handling.
|
|
|
|
* An implicit paint is similar to a regular paint for the paint stack, but it is
|
|
|
|
* not put on the stack. Instead, it is set on the impl window, and later when
|
|
|
|
* regular gdk_window_begin_paint_region() happen on a window of this impl window
|
|
|
|
* we reuse the pixmap from the implicit paint. During repaint we create and at the
|
|
|
|
* end flush an implicit paint, which means we can collect all the paints on
|
|
|
|
* multiple client side windows in the same backing store pixmap.
|
|
|
|
*
|
|
|
|
* All drawing to windows are wrapped with macros that set up the GC such that
|
|
|
|
* the offsets and clip region is right for drawing to the paint object or
|
|
|
|
* directly to the emulated window. It also automatically handles any flushing
|
|
|
|
* needed when drawing directly to a window. Adding window/paint clipping is
|
|
|
|
* done using _gdk_gc_add_drawable_clip which lets us efficiently add and then
|
|
|
|
* remove a custom clip region.
|
2009-06-01 10:04:36 +00:00
|
|
|
*/
|
Large changes to the Win32 backend, partially made necessary by the
2000-05-02 Tor Lillqvist <tml@iki.fi>
Large changes to the Win32 backend, partially made necessary by
the changes to the backend-independent internal
structures. Attempts to implement similar backing store stuff as
on X11. The current (CVS) version of the Win32 backend is *not* as
stable as it was before the no-flicker branch was merged. A
zipfile with that version is available from
http://www.gimp.org/win32/. That should be use by "production"
code until this CVS version is usable. (But note, the Win32
backend has never been claimed to be "production quality".)
* README.win32: Add the above comment about versions.
* gdk/gdkwindow.c: Don't use backing store for now on Win32.
* gdk/gdk.def: Update.
* gdk/gdkfont.h: Declare temporary Win32-only functions. Will
presumably be replaced by some more better mechanism as 1.4 gets
closer to release shape.
* gdk/makefile.{cygwin,msc}: Update.
* gdk/win32/*.c: Correct inclusions of the backend-specific and
internal headers. Change code according to changes in these. Use
gdk_drawable_*, not gdk_window_* where necessary.
* gdk/win32/gdkdnd-win32.c: Use MISC selector for GDK_NOTE, not
our old DND.
* gdk/win32/gdkdrawable-win32.c (gdk_win32_draw_text): Don't try
to interpret single characters as UTF-8. Thanks to Hans Breuer.
Use correct function name in warning messages.
* gdk/win32/gdkevents-win32.c: Use correct parameter lists for the
GSourceFuncs gdk_event_prepare and gdk_event_check.
(gdk_event_get_graphics_expose): Do implement, use
PeekMessage. Thanks to Hans Breuer.
(event_mask_string): Debugging function to print an GdkEventMask.
(gdk_pointer_grab): Use it.
* gdk/win32/gdkfont-win32.c: The Unicode subrange that the
(old) book I used claimed was Hangul actually is CJK Unified
Ideographs Extension A. Also, Hangul Syllables were missing.
Improve logging.
* gdk/win32/gdkgc-win32.c: Largish changes.
* gdk/win32/gdkim-win32.c (gdk_set_locale): Use
g_win32_getlocale() from GLib, and not setlocale() to get current
locale name.
* gdk/win32/gdkprivate-win32.h
* gdk/win32/gdkwin32.h: Move stuff from gdkprivate-win32.h to
gdkwin32.h, similarily as in the X11 backend.
* gdk/win32/gdkwindow-win32.c (gdk_propagate_shapes): Bugfix,
assignment was used instead of equals in if test. Thanks to Hans
Breuer.
* gdk/win32/makefile.{cygwin,msc}
* gtk/makefile.{cygwin,msc}: Updates. Better kludge to get the
path to the Win32 headers that works also with the mingw compiler.
* gtk/gtkstyle.c: Include <string.h>.
2000-05-01 22:06:49 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
#define USE_BACKING_STORE /* Appears to work on Win32, too, now. */
|
2000-03-28 01:24:44 +00:00
|
|
|
|
2009-05-26 18:53:48 +00:00
|
|
|
/* This adds a local value to the GdkVisibilityState enum */
|
|
|
|
#define GDK_VISIBILITY_NOT_VIEWABLE 3
|
|
|
|
|
2009-06-04 18:15:29 +00:00
|
|
|
enum {
|
2009-07-01 12:36:36 +00:00
|
|
|
PICK_EMBEDDED_CHILD, /* only called if children are embedded */
|
|
|
|
TO_EMBEDDER,
|
|
|
|
FROM_EMBEDDER,
|
2009-06-04 18:15:29 +00:00
|
|
|
LAST_SIGNAL
|
|
|
|
};
|
|
|
|
|
2009-07-16 06:16:01 +00:00
|
|
|
enum {
|
|
|
|
PROP_0,
|
|
|
|
PROP_CURSOR
|
|
|
|
};
|
|
|
|
|
2009-11-04 13:03:04 +00:00
|
|
|
typedef enum {
|
|
|
|
CLEAR_BG_NONE,
|
|
|
|
CLEAR_BG_WINCLEARED, /* Clear backgrounds except those that the window system clears */
|
|
|
|
CLEAR_BG_ALL
|
|
|
|
} ClearBg;
|
|
|
|
|
2000-03-28 01:24:44 +00:00
|
|
|
struct _GdkWindowPaint
|
|
|
|
{
|
|
|
|
GdkRegion *region;
|
|
|
|
GdkPixmap *pixmap;
|
|
|
|
gint x_offset;
|
|
|
|
gint y_offset;
|
2005-03-17 01:54:40 +00:00
|
|
|
cairo_surface_t *surface;
|
2008-07-18 13:03:42 +00:00
|
|
|
guint uses_implicit : 1;
|
2009-09-04 11:14:25 +00:00
|
|
|
guint flushed : 1;
|
2008-12-04 19:18:02 +00:00
|
|
|
guint32 region_tag;
|
2000-03-28 01:24:44 +00:00
|
|
|
};
|
2001-07-05 13:41:34 +00:00
|
|
|
|
2008-12-09 19:13:02 +00:00
|
|
|
typedef struct {
|
2009-02-08 12:13:56 +00:00
|
|
|
GdkRegion *dest_region; /* The destination region */
|
|
|
|
int dx, dy; /* The amount that the source was moved to reach dest_region */
|
2008-12-09 19:13:02 +00:00
|
|
|
} GdkWindowRegionMove;
|
|
|
|
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* Global info */
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
static GdkGC *gdk_window_create_gc (GdkDrawable *drawable,
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkGCValues *values,
|
|
|
|
GdkGCValuesMask mask);
|
2000-03-28 01:24:44 +00:00
|
|
|
static void gdk_window_draw_rectangle (GdkDrawable *drawable,
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkGC *gc,
|
|
|
|
gboolean filled,
|
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
gint width,
|
|
|
|
gint height);
|
2000-03-28 01:24:44 +00:00
|
|
|
static void gdk_window_draw_arc (GdkDrawable *drawable,
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkGC *gc,
|
|
|
|
gboolean filled,
|
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
gint width,
|
|
|
|
gint height,
|
|
|
|
gint angle1,
|
|
|
|
gint angle2);
|
2000-03-28 01:24:44 +00:00
|
|
|
static void gdk_window_draw_polygon (GdkDrawable *drawable,
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkGC *gc,
|
|
|
|
gboolean filled,
|
|
|
|
GdkPoint *points,
|
|
|
|
gint npoints);
|
2000-03-28 01:24:44 +00:00
|
|
|
static void gdk_window_draw_text (GdkDrawable *drawable,
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkFont *font,
|
|
|
|
GdkGC *gc,
|
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
const gchar *text,
|
|
|
|
gint text_length);
|
2000-03-28 01:24:44 +00:00
|
|
|
static void gdk_window_draw_text_wc (GdkDrawable *drawable,
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkFont *font,
|
|
|
|
GdkGC *gc,
|
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
const GdkWChar *text,
|
|
|
|
gint text_length);
|
2000-03-28 01:24:44 +00:00
|
|
|
static void gdk_window_draw_drawable (GdkDrawable *drawable,
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkGC *gc,
|
|
|
|
GdkPixmap *src,
|
|
|
|
gint xsrc,
|
|
|
|
gint ysrc,
|
|
|
|
gint xdest,
|
|
|
|
gint ydest,
|
|
|
|
gint width,
|
2009-07-01 14:13:31 +00:00
|
|
|
gint height,
|
|
|
|
GdkDrawable *original_src);
|
2000-03-28 01:24:44 +00:00
|
|
|
static void gdk_window_draw_points (GdkDrawable *drawable,
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkGC *gc,
|
|
|
|
GdkPoint *points,
|
|
|
|
gint npoints);
|
2000-03-28 01:24:44 +00:00
|
|
|
static void gdk_window_draw_segments (GdkDrawable *drawable,
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkGC *gc,
|
|
|
|
GdkSegment *segs,
|
|
|
|
gint nsegs);
|
2000-03-28 01:24:44 +00:00
|
|
|
static void gdk_window_draw_lines (GdkDrawable *drawable,
|
|
|
|
GdkGC *gc,
|
|
|
|
GdkPoint *points,
|
|
|
|
gint npoints);
|
2004-11-21 16:24:01 +00:00
|
|
|
|
|
|
|
static void gdk_window_draw_glyphs (GdkDrawable *drawable,
|
|
|
|
GdkGC *gc,
|
|
|
|
PangoFont *font,
|
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
PangoGlyphString *glyphs);
|
|
|
|
static void gdk_window_draw_glyphs_transformed (GdkDrawable *drawable,
|
|
|
|
GdkGC *gc,
|
|
|
|
PangoMatrix *matrix,
|
|
|
|
PangoFont *font,
|
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
PangoGlyphString *glyphs);
|
2000-03-28 01:24:44 +00:00
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
static void gdk_window_draw_image (GdkDrawable *drawable,
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkGC *gc,
|
|
|
|
GdkImage *image,
|
|
|
|
gint xsrc,
|
|
|
|
gint ysrc,
|
|
|
|
gint xdest,
|
|
|
|
gint ydest,
|
|
|
|
gint width,
|
|
|
|
gint height);
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
|
2002-01-04 05:58:01 +00:00
|
|
|
static void gdk_window_draw_pixbuf (GdkDrawable *drawable,
|
|
|
|
GdkGC *gc,
|
|
|
|
GdkPixbuf *pixbuf,
|
|
|
|
gint src_x,
|
|
|
|
gint src_y,
|
|
|
|
gint dest_x,
|
|
|
|
gint dest_y,
|
|
|
|
gint width,
|
|
|
|
gint height,
|
|
|
|
GdkRgbDither dither,
|
|
|
|
gint x_dither,
|
|
|
|
gint y_dither);
|
|
|
|
|
2004-11-21 16:24:01 +00:00
|
|
|
static void gdk_window_draw_trapezoids (GdkDrawable *drawable,
|
|
|
|
GdkGC *gc,
|
|
|
|
GdkTrapezoid *trapezoids,
|
|
|
|
gint n_trapezoids);
|
|
|
|
|
2002-01-04 05:58:01 +00:00
|
|
|
static GdkImage* gdk_window_copy_to_image (GdkDrawable *drawable,
|
|
|
|
GdkImage *image,
|
|
|
|
gint src_x,
|
|
|
|
gint src_y,
|
|
|
|
gint dest_x,
|
|
|
|
gint dest_y,
|
|
|
|
gint width,
|
|
|
|
gint height);
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
|
2005-03-17 01:54:40 +00:00
|
|
|
static cairo_surface_t *gdk_window_ref_cairo_surface (GdkDrawable *drawable);
|
2008-12-15 14:50:41 +00:00
|
|
|
static cairo_surface_t *gdk_window_create_cairo_surface (GdkDrawable *drawable,
|
|
|
|
int width,
|
|
|
|
int height);
|
2010-01-19 15:36:49 +00:00
|
|
|
static void gdk_window_drop_cairo_surface (GdkWindowObject *private);
|
2008-07-18 13:03:42 +00:00
|
|
|
static void gdk_window_set_cairo_clip (GdkDrawable *drawable,
|
|
|
|
cairo_t *cr);
|
2005-02-03 23:29:02 +00:00
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
static void gdk_window_real_get_size (GdkDrawable *drawable,
|
2009-06-01 10:04:36 +00:00
|
|
|
gint *width,
|
|
|
|
gint *height);
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
|
|
|
|
static GdkVisual* gdk_window_real_get_visual (GdkDrawable *drawable);
|
|
|
|
static gint gdk_window_real_get_depth (GdkDrawable *drawable);
|
2002-04-25 22:29:14 +00:00
|
|
|
static GdkScreen* gdk_window_real_get_screen (GdkDrawable *drawable);
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
static void gdk_window_real_set_colormap (GdkDrawable *drawable,
|
2002-04-25 22:29:14 +00:00
|
|
|
GdkColormap *cmap);
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
static GdkColormap* gdk_window_real_get_colormap (GdkDrawable *drawable);
|
2000-10-24 00:15:14 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static GdkDrawable* gdk_window_get_source_drawable (GdkDrawable *drawable);
|
2000-10-24 00:15:14 +00:00
|
|
|
static GdkDrawable* gdk_window_get_composite_drawable (GdkDrawable *drawable,
|
2000-12-15 01:46:41 +00:00
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
gint width,
|
|
|
|
gint height,
|
|
|
|
gint *composite_x_offset,
|
|
|
|
gint *composite_y_offset);
|
|
|
|
static GdkRegion* gdk_window_get_clip_region (GdkDrawable *drawable);
|
|
|
|
static GdkRegion* gdk_window_get_visible_region (GdkDrawable *drawable);
|
2000-10-24 00:15:14 +00:00
|
|
|
|
2000-05-15 16:09:53 +00:00
|
|
|
static void gdk_window_free_paint_stack (GdkWindow *window);
|
2000-03-28 01:24:44 +00:00
|
|
|
|
2006-05-31 03:34:04 +00:00
|
|
|
static void gdk_window_init (GdkWindowObject *window);
|
|
|
|
static void gdk_window_class_init (GdkWindowObjectClass *klass);
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
static void gdk_window_finalize (GObject *object);
|
2009-07-16 06:16:01 +00:00
|
|
|
|
|
|
|
static void gdk_window_set_property (GObject *object,
|
|
|
|
guint prop_id,
|
|
|
|
const GValue *value,
|
|
|
|
GParamSpec *pspec);
|
|
|
|
static void gdk_window_get_property (GObject *object,
|
|
|
|
guint prop_id,
|
|
|
|
GValue *value,
|
|
|
|
GParamSpec *pspec);
|
|
|
|
|
2009-02-05 13:53:07 +00:00
|
|
|
static void gdk_window_clear_backing_region (GdkWindow *window,
|
|
|
|
GdkRegion *region);
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
static void gdk_window_redirect_free (GdkWindowRedirect *redirect);
|
|
|
|
static void apply_redirect_to_children (GdkWindowObject *private,
|
|
|
|
GdkWindowRedirect *redirect);
|
|
|
|
static void remove_redirect_from_children (GdkWindowObject *private,
|
|
|
|
GdkWindowRedirect *redirect);
|
1998-05-03 22:41:32 +00:00
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
static void recompute_visible_regions (GdkWindowObject *private,
|
|
|
|
gboolean recalculate_siblings,
|
|
|
|
gboolean recalculate_children);
|
2009-01-22 19:50:06 +00:00
|
|
|
static void gdk_window_flush_outstanding_moves (GdkWindow *window);
|
2009-01-20 22:03:16 +00:00
|
|
|
static void gdk_window_flush_recursive (GdkWindowObject *window);
|
2008-12-09 19:13:02 +00:00
|
|
|
static void do_move_region_bits_on_impl (GdkWindowObject *private,
|
|
|
|
GdkRegion *region, /* In impl window coords */
|
|
|
|
int dx, int dy);
|
2008-12-18 13:29:28 +00:00
|
|
|
static void gdk_window_invalidate_in_parent (GdkWindowObject *private);
|
2009-09-14 11:28:38 +00:00
|
|
|
static void move_native_children (GdkWindowObject *private);
|
|
|
|
static void update_cursor (GdkDisplay *display);
|
|
|
|
static void impl_window_add_update_area (GdkWindowObject *impl_window,
|
|
|
|
GdkRegion *region);
|
2009-08-13 14:48:07 +00:00
|
|
|
static void gdk_window_region_move_free (GdkWindowRegionMove *move);
|
2009-11-04 13:03:04 +00:00
|
|
|
static void gdk_window_invalidate_region_full (GdkWindow *window,
|
|
|
|
const GdkRegion *region,
|
|
|
|
gboolean invalidate_children,
|
|
|
|
ClearBg clear_bg);
|
|
|
|
static void gdk_window_invalidate_rect_full (GdkWindow *window,
|
|
|
|
const GdkRectangle *rect,
|
|
|
|
gboolean invalidate_children,
|
|
|
|
ClearBg clear_bg);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-04 18:15:29 +00:00
|
|
|
static guint signals[LAST_SIGNAL] = { 0 };
|
|
|
|
|
2006-05-31 03:34:04 +00:00
|
|
|
static gpointer parent_class = NULL;
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static const cairo_user_data_key_t gdk_window_cairo_key;
|
|
|
|
|
2008-12-04 19:18:02 +00:00
|
|
|
static guint32
|
|
|
|
new_region_tag (void)
|
|
|
|
{
|
|
|
|
static guint32 tag = 0;
|
|
|
|
|
|
|
|
return ++tag;
|
|
|
|
}
|
|
|
|
|
2006-05-31 03:34:04 +00:00
|
|
|
GType
|
|
|
|
gdk_window_object_get_type (void)
|
|
|
|
{
|
|
|
|
static GType object_type = 0;
|
|
|
|
|
|
|
|
if (!object_type)
|
|
|
|
object_type = g_type_register_static_simple (GDK_TYPE_DRAWABLE,
|
|
|
|
"GdkWindow",
|
|
|
|
sizeof (GdkWindowObjectClass),
|
|
|
|
(GClassInitFunc) gdk_window_class_init,
|
|
|
|
sizeof (GdkWindowObject),
|
|
|
|
(GInstanceInitFunc) gdk_window_init,
|
|
|
|
0);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2006-05-31 03:34:04 +00:00
|
|
|
return object_type;
|
|
|
|
}
|
1999-10-03 22:12:41 +00:00
|
|
|
|
2006-04-10 19:43:08 +00:00
|
|
|
GType
|
|
|
|
_gdk_paintable_get_type (void)
|
|
|
|
{
|
|
|
|
static GType paintable_type = 0;
|
|
|
|
|
|
|
|
if (!paintable_type)
|
|
|
|
{
|
2006-10-03 15:54:52 +00:00
|
|
|
const GTypeInfo paintable_info =
|
2006-04-10 19:43:08 +00:00
|
|
|
{
|
|
|
|
sizeof (GdkPaintableIface), /* class_size */
|
|
|
|
NULL, /* base_init */
|
|
|
|
NULL, /* base_finalize */
|
|
|
|
};
|
|
|
|
|
|
|
|
paintable_type = g_type_register_static (G_TYPE_INTERFACE,
|
|
|
|
g_intern_static_string ("GdkPaintable"),
|
|
|
|
&paintable_info, 0);
|
|
|
|
|
|
|
|
g_type_interface_add_prerequisite (paintable_type, G_TYPE_OBJECT);
|
|
|
|
}
|
|
|
|
|
|
|
|
return paintable_type;
|
|
|
|
}
|
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
static void
|
2006-05-31 03:34:04 +00:00
|
|
|
gdk_window_init (GdkWindowObject *window)
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
{
|
|
|
|
/* 0-initialization is good for all other fields. */
|
1998-03-07 18:38:18 +00:00
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
window->window_type = GDK_WINDOW_CHILD;
|
1997-11-24 22:37:52 +00:00
|
|
|
|
2001-02-27 20:40:15 +00:00
|
|
|
window->state = GDK_WINDOW_STATE_WITHDRAWN;
|
2008-07-18 13:03:42 +00:00
|
|
|
window->width = 1;
|
|
|
|
window->height = 1;
|
|
|
|
window->toplevel_window_type = -1;
|
2009-05-26 18:53:48 +00:00
|
|
|
/* starts hidden */
|
|
|
|
window->effective_visibility = GDK_VISIBILITY_NOT_VIEWABLE;
|
|
|
|
window->visibility = GDK_VISIBILITY_FULLY_OBSCURED;
|
|
|
|
/* Default to unobscured since some backends don't send visibility events */
|
|
|
|
window->native_visibility = GDK_VISIBILITY_UNOBSCURED;
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
}
|
1999-01-17 22:58:59 +00:00
|
|
|
|
2009-06-08 13:57:59 +00:00
|
|
|
/* Stop and return on the first non-NULL parent */
|
2009-06-04 18:15:29 +00:00
|
|
|
static gboolean
|
2009-06-24 18:25:40 +00:00
|
|
|
accumulate_get_window (GSignalInvocationHint *ihint,
|
|
|
|
GValue *return_accu,
|
|
|
|
const GValue *handler_return,
|
|
|
|
gpointer data)
|
2009-06-04 18:15:29 +00:00
|
|
|
{
|
|
|
|
g_value_copy (handler_return, return_accu);
|
|
|
|
/* Continue while returning NULL */
|
2009-06-08 13:57:59 +00:00
|
|
|
return g_value_get_object (handler_return) == NULL;
|
2009-06-04 18:15:29 +00:00
|
|
|
}
|
|
|
|
|
2009-02-28 05:24:07 +00:00
|
|
|
static GQuark quark_pointer_window = 0;
|
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
static void
|
2006-05-31 03:34:04 +00:00
|
|
|
gdk_window_class_init (GdkWindowObjectClass *klass)
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
{
|
|
|
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
|
|
GdkDrawableClass *drawable_class = GDK_DRAWABLE_CLASS (klass);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2006-05-31 03:34:04 +00:00
|
|
|
parent_class = g_type_class_peek_parent (klass);
|
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
object_class->finalize = gdk_window_finalize;
|
2009-07-16 06:16:01 +00:00
|
|
|
object_class->set_property = gdk_window_set_property;
|
|
|
|
object_class->get_property = gdk_window_get_property;
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
|
|
|
|
drawable_class->create_gc = gdk_window_create_gc;
|
|
|
|
drawable_class->draw_rectangle = gdk_window_draw_rectangle;
|
|
|
|
drawable_class->draw_arc = gdk_window_draw_arc;
|
|
|
|
drawable_class->draw_polygon = gdk_window_draw_polygon;
|
|
|
|
drawable_class->draw_text = gdk_window_draw_text;
|
|
|
|
drawable_class->draw_text_wc = gdk_window_draw_text_wc;
|
2009-07-01 17:50:49 +00:00
|
|
|
drawable_class->draw_drawable_with_src = gdk_window_draw_drawable;
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
drawable_class->draw_points = gdk_window_draw_points;
|
|
|
|
drawable_class->draw_segments = gdk_window_draw_segments;
|
|
|
|
drawable_class->draw_lines = gdk_window_draw_lines;
|
|
|
|
drawable_class->draw_glyphs = gdk_window_draw_glyphs;
|
2004-11-21 16:24:01 +00:00
|
|
|
drawable_class->draw_glyphs_transformed = gdk_window_draw_glyphs_transformed;
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
drawable_class->draw_image = gdk_window_draw_image;
|
2002-10-02 22:30:37 +00:00
|
|
|
drawable_class->draw_pixbuf = gdk_window_draw_pixbuf;
|
2004-11-21 16:24:01 +00:00
|
|
|
drawable_class->draw_trapezoids = gdk_window_draw_trapezoids;
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
drawable_class->get_depth = gdk_window_real_get_depth;
|
2002-04-25 22:29:14 +00:00
|
|
|
drawable_class->get_screen = gdk_window_real_get_screen;
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
drawable_class->get_size = gdk_window_real_get_size;
|
|
|
|
drawable_class->set_colormap = gdk_window_real_set_colormap;
|
|
|
|
drawable_class->get_colormap = gdk_window_real_get_colormap;
|
|
|
|
drawable_class->get_visual = gdk_window_real_get_visual;
|
2002-01-04 05:58:01 +00:00
|
|
|
drawable_class->_copy_to_image = gdk_window_copy_to_image;
|
2005-03-17 01:54:40 +00:00
|
|
|
drawable_class->ref_cairo_surface = gdk_window_ref_cairo_surface;
|
2008-12-15 14:50:41 +00:00
|
|
|
drawable_class->create_cairo_surface = gdk_window_create_cairo_surface;
|
2008-07-18 13:03:42 +00:00
|
|
|
drawable_class->set_cairo_clip = gdk_window_set_cairo_clip;
|
2000-12-15 01:46:41 +00:00
|
|
|
drawable_class->get_clip_region = gdk_window_get_clip_region;
|
|
|
|
drawable_class->get_visible_region = gdk_window_get_visible_region;
|
2000-10-24 00:15:14 +00:00
|
|
|
drawable_class->get_composite_drawable = gdk_window_get_composite_drawable;
|
2008-07-18 13:03:42 +00:00
|
|
|
drawable_class->get_source_drawable = gdk_window_get_source_drawable;
|
2009-02-28 05:24:07 +00:00
|
|
|
|
|
|
|
quark_pointer_window = g_quark_from_static_string ("gtk-pointer-window");
|
2009-06-04 18:15:29 +00:00
|
|
|
|
|
|
|
|
2009-07-16 06:16:01 +00:00
|
|
|
/* Properties */
|
2009-12-20 20:39:42 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* GdkWindow:cursor:
|
|
|
|
*
|
|
|
|
* The mouse pointer for a #GdkWindow. See gdk_window_set_cursor() and
|
|
|
|
* gdk_window_get_cursor() for details.
|
|
|
|
*
|
|
|
|
* Since: 2.18
|
|
|
|
*/
|
2009-07-16 06:16:01 +00:00
|
|
|
g_object_class_install_property (object_class,
|
|
|
|
PROP_CURSOR,
|
2009-09-27 19:37:19 +00:00
|
|
|
g_param_spec_boxed ("cursor",
|
|
|
|
P_("Cursor"),
|
|
|
|
P_("Cursor"),
|
|
|
|
GDK_TYPE_CURSOR,
|
|
|
|
G_PARAM_READWRITE));
|
2009-07-16 06:16:01 +00:00
|
|
|
|
2009-07-03 20:37:14 +00:00
|
|
|
/**
|
|
|
|
* GdkWindow::pick-embedded-child:
|
|
|
|
* @window: the window on which the signal is emitted
|
|
|
|
* @x: x coordinate in the window
|
|
|
|
* @y: y coordinate in the window
|
|
|
|
*
|
|
|
|
* The ::pick-embedded-child signal is emitted to find an embedded
|
|
|
|
* child at the given position.
|
|
|
|
*
|
2009-08-31 04:55:32 +00:00
|
|
|
* Returns: the #GdkWindow of the embedded child at @x, @y, or %NULL
|
2009-07-03 20:37:14 +00:00
|
|
|
*
|
|
|
|
* Since: 2.18
|
|
|
|
*/
|
2009-07-01 12:36:36 +00:00
|
|
|
signals[PICK_EMBEDDED_CHILD] =
|
|
|
|
g_signal_new (g_intern_static_string ("pick-embedded-child"),
|
2009-06-04 18:15:29 +00:00
|
|
|
G_OBJECT_CLASS_TYPE (object_class),
|
|
|
|
G_SIGNAL_RUN_LAST,
|
|
|
|
0,
|
2009-06-24 18:25:40 +00:00
|
|
|
accumulate_get_window, NULL,
|
2009-07-07 03:06:46 +00:00
|
|
|
_gdk_marshal_OBJECT__DOUBLE_DOUBLE,
|
2009-06-04 18:15:29 +00:00
|
|
|
GDK_TYPE_WINDOW,
|
|
|
|
2,
|
|
|
|
G_TYPE_DOUBLE,
|
|
|
|
G_TYPE_DOUBLE);
|
2009-07-03 20:37:14 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* GdkWindow::to-embedder:
|
|
|
|
* @window: the offscreen window on which the signal is emitted
|
|
|
|
* @offscreen-x: x coordinate in the offscreen window
|
|
|
|
* @offscreen-y: y coordinate in the offscreen window
|
|
|
|
* @embedder-x: return location for the x coordinate in the embedder window
|
|
|
|
* @embedder-y: return location for the y coordinate in the embedder window
|
|
|
|
*
|
|
|
|
* The ::to-embedder signal is emitted to translate coordinates
|
|
|
|
* in an offscreen window to its embedder.
|
|
|
|
*
|
2009-08-31 04:55:32 +00:00
|
|
|
* See also #GtkWindow::from-embedder.
|
|
|
|
*
|
2009-07-03 20:37:14 +00:00
|
|
|
* Since: 2.18
|
|
|
|
*/
|
2009-07-01 12:36:36 +00:00
|
|
|
signals[TO_EMBEDDER] =
|
|
|
|
g_signal_new (g_intern_static_string ("to-embedder"),
|
2009-06-04 18:15:29 +00:00
|
|
|
G_OBJECT_CLASS_TYPE (object_class),
|
|
|
|
G_SIGNAL_RUN_LAST,
|
|
|
|
0,
|
|
|
|
NULL, NULL,
|
2009-07-07 03:06:46 +00:00
|
|
|
_gdk_marshal_VOID__DOUBLE_DOUBLE_POINTER_POINTER,
|
2009-06-04 18:15:29 +00:00
|
|
|
G_TYPE_NONE,
|
|
|
|
4,
|
|
|
|
G_TYPE_DOUBLE,
|
|
|
|
G_TYPE_DOUBLE,
|
|
|
|
G_TYPE_POINTER,
|
|
|
|
G_TYPE_POINTER);
|
2009-07-03 20:37:14 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* GdkWindow::from-embedder:
|
|
|
|
* @window: the offscreen window on which the signal is emitted
|
|
|
|
* @embedder-x: x coordinate in the embedder window
|
|
|
|
* @embedder-y: y coordinate in the embedder window
|
|
|
|
* @offscreen-x: return location for the x coordinate in the offscreen window
|
|
|
|
* @offscreen-y: return location for the y coordinate in the offscreen window
|
|
|
|
*
|
|
|
|
* The ::from-embedder signal is emitted to translate coordinates
|
|
|
|
* in the embedder of an offscreen window to the offscreen window.
|
|
|
|
*
|
2009-08-31 04:55:32 +00:00
|
|
|
* See also #GtkWindow::to-embedder.
|
|
|
|
*
|
2009-07-03 20:37:14 +00:00
|
|
|
* Since: 2.18
|
|
|
|
*/
|
2009-07-01 12:36:36 +00:00
|
|
|
signals[FROM_EMBEDDER] =
|
|
|
|
g_signal_new (g_intern_static_string ("from-embedder"),
|
2009-06-04 18:15:29 +00:00
|
|
|
G_OBJECT_CLASS_TYPE (object_class),
|
|
|
|
G_SIGNAL_RUN_LAST,
|
|
|
|
0,
|
|
|
|
NULL, NULL,
|
2009-07-07 03:06:46 +00:00
|
|
|
_gdk_marshal_VOID__DOUBLE_DOUBLE_POINTER_POINTER,
|
2009-06-04 18:15:29 +00:00
|
|
|
G_TYPE_NONE,
|
|
|
|
4,
|
|
|
|
G_TYPE_DOUBLE,
|
|
|
|
G_TYPE_DOUBLE,
|
|
|
|
G_TYPE_POINTER,
|
|
|
|
G_TYPE_POINTER);
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
}
|
2000-03-28 01:24:44 +00:00
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
static void
|
|
|
|
gdk_window_finalize (GObject *object)
|
|
|
|
{
|
|
|
|
GdkWindow *window = GDK_WINDOW (object);
|
|
|
|
GdkWindowObject *obj = (GdkWindowObject *) object;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
if (!GDK_WINDOW_DESTROYED (window))
|
|
|
|
{
|
|
|
|
if (GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN)
|
|
|
|
{
|
|
|
|
g_warning ("losing last reference to undestroyed window\n");
|
|
|
|
_gdk_window_destroy (window, FALSE);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
/* We use TRUE here, to keep us from actually calling
|
|
|
|
* XDestroyWindow() on the window
|
|
|
|
*/
|
|
|
|
_gdk_window_destroy (window, TRUE);
|
|
|
|
}
|
2000-03-28 01:24:44 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (obj->impl)
|
|
|
|
{
|
|
|
|
g_object_unref (obj->impl);
|
|
|
|
obj->impl = NULL;
|
|
|
|
}
|
|
|
|
|
2009-01-23 19:08:39 +00:00
|
|
|
if (obj->impl_window != obj)
|
|
|
|
{
|
|
|
|
g_object_unref (obj->impl_window);
|
|
|
|
obj->impl_window = NULL;
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-17 10:24:46 +00:00
|
|
|
if (obj->shape)
|
|
|
|
gdk_region_destroy (obj->shape);
|
|
|
|
|
|
|
|
if (obj->input_shape)
|
|
|
|
gdk_region_destroy (obj->input_shape);
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (obj->cursor)
|
|
|
|
gdk_cursor_unref (obj->cursor);
|
|
|
|
|
2006-05-31 03:34:04 +00:00
|
|
|
G_OBJECT_CLASS (parent_class)->finalize (object);
|
1997-11-24 22:37:52 +00:00
|
|
|
}
|
|
|
|
|
2009-07-16 06:16:01 +00:00
|
|
|
static void
|
|
|
|
gdk_window_set_property (GObject *object,
|
|
|
|
guint prop_id,
|
|
|
|
const GValue *value,
|
|
|
|
GParamSpec *pspec)
|
|
|
|
{
|
|
|
|
GdkWindow *window = (GdkWindow *)object;
|
|
|
|
|
|
|
|
switch (prop_id)
|
|
|
|
{
|
|
|
|
case PROP_CURSOR:
|
2009-09-30 11:00:28 +00:00
|
|
|
gdk_window_set_cursor (window, g_value_get_boxed (value));
|
2009-07-16 06:16:01 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
gdk_window_get_property (GObject *object,
|
|
|
|
guint prop_id,
|
|
|
|
GValue *value,
|
|
|
|
GParamSpec *pspec)
|
|
|
|
{
|
|
|
|
GdkWindow *window = (GdkWindow *) object;
|
|
|
|
|
|
|
|
switch (prop_id)
|
|
|
|
{
|
|
|
|
case PROP_CURSOR:
|
2009-09-30 11:00:28 +00:00
|
|
|
g_value_set_boxed (value, gdk_window_get_cursor (window));
|
2009-07-16 06:16:01 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static gboolean
|
|
|
|
gdk_window_is_offscreen (GdkWindowObject *window)
|
|
|
|
{
|
2009-07-18 13:04:06 +00:00
|
|
|
return window->window_type == GDK_WINDOW_OFFSCREEN;
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static GdkWindowObject *
|
|
|
|
gdk_window_get_impl_window (GdkWindowObject *window)
|
|
|
|
{
|
2009-01-23 19:08:39 +00:00
|
|
|
return window->impl_window;
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
GdkWindow *
|
|
|
|
_gdk_window_get_impl_window (GdkWindow *window)
|
|
|
|
{
|
|
|
|
return (GdkWindow *)gdk_window_get_impl_window ((GdkWindowObject *)window);
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
gdk_window_has_impl (GdkWindowObject *window)
|
|
|
|
{
|
2009-01-23 19:08:39 +00:00
|
|
|
return window->impl_window == window;
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
2009-08-31 08:59:21 +00:00
|
|
|
static gboolean
|
|
|
|
gdk_window_is_toplevel (GdkWindowObject *window)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
window->parent == NULL ||
|
|
|
|
window->parent->window_type == GDK_WINDOW_ROOT;
|
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
gboolean
|
|
|
|
_gdk_window_has_impl (GdkWindow *window)
|
|
|
|
{
|
|
|
|
return gdk_window_has_impl ((GdkWindowObject *)window);
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
gdk_window_has_no_impl (GdkWindowObject *window)
|
|
|
|
{
|
2009-01-26 14:45:17 +00:00
|
|
|
return window->impl_window != window;
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
remove_child_area (GdkWindowObject *private,
|
|
|
|
GdkWindowObject *until,
|
2008-12-17 10:24:46 +00:00
|
|
|
gboolean for_input,
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkRegion *region)
|
|
|
|
{
|
|
|
|
GdkWindowObject *child;
|
|
|
|
GdkRegion *child_region;
|
|
|
|
GdkRectangle r;
|
|
|
|
GList *l;
|
2008-12-17 10:24:46 +00:00
|
|
|
GdkRegion *shape;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
for (l = private->children; l; l = l->next)
|
|
|
|
{
|
|
|
|
child = l->data;
|
|
|
|
|
|
|
|
if (child == until)
|
|
|
|
break;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-07-19 20:36:43 +00:00
|
|
|
/* If region is empty already, no need to do
|
|
|
|
anything potentially costly */
|
|
|
|
if (gdk_region_empty (region))
|
|
|
|
break;
|
|
|
|
|
2008-12-08 18:22:20 +00:00
|
|
|
if (!GDK_WINDOW_IS_MAPPED (child) || child->input_only || child->composited)
|
2008-07-18 13:03:42 +00:00
|
|
|
continue;
|
|
|
|
|
|
|
|
/* Ignore offscreen children, as they don't draw in their parent and
|
|
|
|
* don't take part in the clipping */
|
|
|
|
if (gdk_window_is_offscreen (child))
|
|
|
|
continue;
|
|
|
|
|
|
|
|
r.x = child->x;
|
|
|
|
r.y = child->y;
|
|
|
|
r.width = child->width;
|
|
|
|
r.height = child->height;
|
2008-12-16 19:09:20 +00:00
|
|
|
|
2009-07-19 20:35:25 +00:00
|
|
|
/* Bail early if child totally outside region */
|
|
|
|
if (gdk_region_rect_in (region, &r) == GDK_OVERLAP_RECTANGLE_OUT)
|
|
|
|
continue;
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
child_region = gdk_region_rectangle (&r);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-16 19:09:20 +00:00
|
|
|
if (child->shape)
|
2009-07-07 14:51:11 +00:00
|
|
|
{
|
|
|
|
/* Adjust shape region to parent window coords */
|
|
|
|
gdk_region_offset (child->shape, child->x, child->y);
|
|
|
|
gdk_region_intersect (child_region, child->shape);
|
|
|
|
gdk_region_offset (child->shape, -child->x, -child->y);
|
|
|
|
}
|
2008-12-16 19:09:20 +00:00
|
|
|
else if (private->window_type == GDK_WINDOW_FOREIGN)
|
|
|
|
{
|
|
|
|
shape = _gdk_windowing_window_get_shape ((GdkWindow *)child);
|
|
|
|
if (shape)
|
|
|
|
{
|
|
|
|
gdk_region_intersect (child_region, shape);
|
|
|
|
gdk_region_destroy (shape);
|
|
|
|
}
|
|
|
|
}
|
2008-12-17 10:24:46 +00:00
|
|
|
|
|
|
|
if (for_input)
|
|
|
|
{
|
|
|
|
if (child->input_shape)
|
|
|
|
gdk_region_intersect (child_region, child->input_shape);
|
|
|
|
else if (private->window_type == GDK_WINDOW_FOREIGN)
|
|
|
|
{
|
|
|
|
shape = _gdk_windowing_window_get_input_shape ((GdkWindow *)child);
|
|
|
|
if (shape)
|
|
|
|
{
|
|
|
|
gdk_region_intersect (child_region, shape);
|
|
|
|
gdk_region_destroy (shape);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_region_subtract (region, child_region);
|
|
|
|
gdk_region_destroy (child_region);
|
2008-12-16 19:09:20 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-05-26 18:53:48 +00:00
|
|
|
static GdkVisibilityState
|
|
|
|
effective_visibility (GdkWindowObject *private)
|
|
|
|
{
|
|
|
|
GdkVisibilityState native;
|
|
|
|
|
|
|
|
if (!gdk_window_is_viewable ((GdkWindow *)private))
|
|
|
|
return GDK_VISIBILITY_NOT_VIEWABLE;
|
|
|
|
|
|
|
|
native = private->impl_window->native_visibility;
|
|
|
|
|
|
|
|
if (native == GDK_VISIBILITY_FULLY_OBSCURED ||
|
|
|
|
private->visibility == GDK_VISIBILITY_FULLY_OBSCURED)
|
|
|
|
return GDK_VISIBILITY_FULLY_OBSCURED;
|
|
|
|
else if (native == GDK_VISIBILITY_UNOBSCURED)
|
|
|
|
return private->visibility;
|
|
|
|
else /* native PARTIAL, private partial or unobscured */
|
|
|
|
return GDK_VISIBILITY_PARTIAL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
gdk_window_update_visibility (GdkWindowObject *private)
|
|
|
|
{
|
|
|
|
GdkVisibilityState new_visibility;
|
|
|
|
GdkEvent *event;
|
|
|
|
|
|
|
|
new_visibility = effective_visibility (private);
|
|
|
|
|
|
|
|
if (new_visibility != private->effective_visibility)
|
|
|
|
{
|
|
|
|
private->effective_visibility = new_visibility;
|
|
|
|
|
|
|
|
if (new_visibility != GDK_VISIBILITY_NOT_VIEWABLE &&
|
|
|
|
private->event_mask & GDK_VISIBILITY_NOTIFY)
|
|
|
|
{
|
|
|
|
event = _gdk_make_event ((GdkWindow *)private, GDK_VISIBILITY_NOTIFY,
|
|
|
|
NULL, FALSE);
|
|
|
|
event->visibility.state = new_visibility;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
gdk_window_update_visibility_recursively (GdkWindowObject *private,
|
|
|
|
GdkWindowObject *only_for_impl)
|
|
|
|
{
|
|
|
|
GdkWindowObject *child;
|
|
|
|
GList *l;
|
|
|
|
|
|
|
|
gdk_window_update_visibility (private);
|
|
|
|
for (l = private->children; l != NULL; l = l->next)
|
|
|
|
{
|
|
|
|
child = l->data;
|
|
|
|
if ((only_for_impl == NULL) ||
|
|
|
|
(only_for_impl == child->impl_window))
|
|
|
|
gdk_window_update_visibility_recursively (child, only_for_impl);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-08-27 16:04:07 +00:00
|
|
|
static gboolean
|
|
|
|
should_apply_clip_as_shape (GdkWindowObject *private)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
gdk_window_has_impl (private) &&
|
|
|
|
/* Not for offscreens */
|
2010-04-15 11:08:47 +00:00
|
|
|
!gdk_window_is_offscreen (private) &&
|
2009-08-27 16:04:07 +00:00
|
|
|
/* or for toplevels */
|
|
|
|
!gdk_window_is_toplevel (private) &&
|
|
|
|
/* or for foreign windows */
|
|
|
|
private->window_type != GDK_WINDOW_FOREIGN &&
|
|
|
|
/* or for the root window */
|
|
|
|
private->window_type != GDK_WINDOW_ROOT;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
apply_shape (GdkWindowObject *private,
|
|
|
|
GdkRegion *region)
|
|
|
|
{
|
|
|
|
GdkWindowImplIface *impl_iface;
|
|
|
|
|
|
|
|
/* We trash whether we applied a shape so that
|
|
|
|
we can avoid unsetting it many times, which
|
|
|
|
could happen in e.g. apply_clip_as_shape as
|
|
|
|
windows get resized */
|
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
if (region)
|
|
|
|
impl_iface->shape_combine_region ((GdkWindow *)private,
|
|
|
|
region, 0, 0);
|
|
|
|
else if (private->applied_shape)
|
|
|
|
impl_iface->shape_combine_region ((GdkWindow *)private,
|
|
|
|
NULL, 0, 0);
|
|
|
|
|
|
|
|
private->applied_shape = region != NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
apply_clip_as_shape (GdkWindowObject *private)
|
|
|
|
{
|
|
|
|
GdkRectangle r;
|
|
|
|
|
|
|
|
r.x = r.y = 0;
|
|
|
|
r.width = private->width;
|
|
|
|
r.height = private->height;
|
|
|
|
|
|
|
|
/* We only apply the clip region if would differ
|
|
|
|
from the actual clip region implied by the size
|
|
|
|
of the window. This is to avoid unneccessarily
|
|
|
|
adding meaningless shapes to all native subwindows */
|
|
|
|
if (!gdk_region_rect_equal (private->clip_region, &r))
|
|
|
|
apply_shape (private, private->clip_region);
|
|
|
|
else
|
|
|
|
apply_shape (private, NULL);
|
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static void
|
|
|
|
recompute_visible_regions_internal (GdkWindowObject *private,
|
|
|
|
gboolean recalculate_clip,
|
|
|
|
gboolean recalculate_siblings,
|
|
|
|
gboolean recalculate_children)
|
|
|
|
{
|
|
|
|
GdkRectangle r;
|
|
|
|
GList *l;
|
|
|
|
GdkWindowObject *child;
|
2008-12-04 19:55:44 +00:00
|
|
|
GdkRegion *new_clip, *old_clip_region_with_children;
|
2008-07-18 13:03:42 +00:00
|
|
|
gboolean clip_region_changed;
|
|
|
|
gboolean abs_pos_changed;
|
|
|
|
int old_abs_x, old_abs_y;
|
|
|
|
|
|
|
|
old_abs_x = private->abs_x;
|
|
|
|
old_abs_y = private->abs_y;
|
2009-05-26 18:53:48 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* Update absolute position */
|
|
|
|
if (gdk_window_has_impl (private))
|
|
|
|
{
|
|
|
|
/* Native window starts here */
|
|
|
|
private->abs_x = 0;
|
|
|
|
private->abs_y = 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
private->abs_x = private->parent->abs_x + private->x;
|
|
|
|
private->abs_y = private->parent->abs_y + private->y;
|
|
|
|
}
|
|
|
|
|
|
|
|
abs_pos_changed =
|
|
|
|
private->abs_x != old_abs_x ||
|
|
|
|
private->abs_y != old_abs_y;
|
|
|
|
|
|
|
|
/* Update clip region based on:
|
|
|
|
* parent clip
|
|
|
|
* window size
|
|
|
|
* siblings in parents above window
|
|
|
|
*/
|
|
|
|
clip_region_changed = FALSE;
|
2009-07-20 21:15:34 +00:00
|
|
|
if (recalculate_clip)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
2009-07-20 21:15:34 +00:00
|
|
|
if (private->viewable)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
2009-07-20 21:15:34 +00:00
|
|
|
/* Calculate visible region (sans children) in parent window coords */
|
|
|
|
r.x = private->x;
|
|
|
|
r.y = private->y;
|
|
|
|
r.width = private->width;
|
|
|
|
r.height = private->height;
|
|
|
|
new_clip = gdk_region_rectangle (&r);
|
|
|
|
|
2009-08-31 08:59:21 +00:00
|
|
|
if (!gdk_window_is_toplevel (private))
|
2009-07-20 21:15:34 +00:00
|
|
|
{
|
|
|
|
gdk_region_intersect (new_clip, private->parent->clip_region);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-08-24 13:18:10 +00:00
|
|
|
/* Remove all overlapping children from parent.
|
|
|
|
* Unless we're all native, because then we don't need to take
|
|
|
|
* siblings into account since X does that clipping for us.
|
|
|
|
* This makes things like SWT that modify the raw X stacking
|
|
|
|
* order without GDKs knowledge work.
|
|
|
|
*/
|
|
|
|
if (!_gdk_native_windows)
|
|
|
|
remove_child_area (private->parent, private, FALSE, new_clip);
|
2009-07-20 21:15:34 +00:00
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-07-20 21:15:34 +00:00
|
|
|
/* Convert from parent coords to window coords */
|
|
|
|
gdk_region_offset (new_clip, -private->x, -private->y);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-07-20 21:15:34 +00:00
|
|
|
if (private->shape)
|
|
|
|
gdk_region_intersect (new_clip, private->shape);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
new_clip = gdk_region_new ();
|
2008-12-16 19:09:20 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (private->clip_region == NULL ||
|
|
|
|
!gdk_region_equal (private->clip_region, new_clip))
|
|
|
|
clip_region_changed = TRUE;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (private->clip_region)
|
|
|
|
gdk_region_destroy (private->clip_region);
|
|
|
|
private->clip_region = new_clip;
|
|
|
|
|
2008-12-04 19:55:44 +00:00
|
|
|
old_clip_region_with_children = private->clip_region_with_children;
|
2008-07-18 13:03:42 +00:00
|
|
|
private->clip_region_with_children = gdk_region_copy (private->clip_region);
|
2009-07-18 13:04:06 +00:00
|
|
|
if (private->window_type != GDK_WINDOW_ROOT)
|
2009-06-25 14:59:18 +00:00
|
|
|
remove_child_area (private, NULL, FALSE, private->clip_region_with_children);
|
2008-12-04 19:55:44 +00:00
|
|
|
|
|
|
|
if (clip_region_changed ||
|
|
|
|
!gdk_region_equal (private->clip_region_with_children, old_clip_region_with_children))
|
|
|
|
private->clip_tag = new_region_tag ();
|
|
|
|
|
|
|
|
if (old_clip_region_with_children)
|
|
|
|
gdk_region_destroy (old_clip_region_with_children);
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
2009-05-26 18:53:48 +00:00
|
|
|
if (clip_region_changed)
|
|
|
|
{
|
|
|
|
GdkVisibilityState visibility;
|
|
|
|
gboolean fully_visible;
|
|
|
|
|
|
|
|
if (gdk_region_empty (private->clip_region))
|
|
|
|
visibility = GDK_VISIBILITY_FULLY_OBSCURED;
|
2009-08-30 15:14:40 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
if (private->shape)
|
|
|
|
{
|
|
|
|
fully_visible = gdk_region_equal (private->clip_region,
|
|
|
|
private->shape);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
r.x = 0;
|
|
|
|
r.y = 0;
|
|
|
|
r.width = private->width;
|
|
|
|
r.height = private->height;
|
|
|
|
fully_visible = gdk_region_rect_equal (private->clip_region, &r);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (fully_visible)
|
|
|
|
visibility = GDK_VISIBILITY_UNOBSCURED;
|
|
|
|
else
|
|
|
|
visibility = GDK_VISIBILITY_PARTIAL;
|
2009-05-26 18:53:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (private->visibility != visibility)
|
|
|
|
{
|
|
|
|
private->visibility = visibility;
|
|
|
|
gdk_window_update_visibility (private);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-06-25 14:59:18 +00:00
|
|
|
/* Update all children, recursively (except for root, where children are not exact). */
|
|
|
|
if ((abs_pos_changed || clip_region_changed || recalculate_children) &&
|
2009-07-18 13:04:06 +00:00
|
|
|
private->window_type != GDK_WINDOW_ROOT)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
for (l = private->children; l; l = l->next)
|
|
|
|
{
|
|
|
|
child = l->data;
|
|
|
|
/* Only recalculate clip if the the clip region changed, otherwise
|
|
|
|
* there is no way the child clip region could change (its has not e.g. moved)
|
|
|
|
* Except if recalculate_children is set to force child updates
|
|
|
|
*/
|
2009-07-18 18:52:30 +00:00
|
|
|
recompute_visible_regions_internal (child,
|
|
|
|
recalculate_clip && (clip_region_changed || recalculate_children),
|
|
|
|
FALSE, FALSE);
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (clip_region_changed &&
|
2009-08-27 16:04:07 +00:00
|
|
|
should_apply_clip_as_shape (private))
|
|
|
|
apply_clip_as_shape (private);
|
2008-12-17 10:24:46 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (recalculate_siblings &&
|
2009-08-31 08:59:21 +00:00
|
|
|
!gdk_window_is_toplevel (private))
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
/* If we moved a child window in parent or changed the stacking order, then we
|
|
|
|
* need to recompute the visible area of all the other children in the parent
|
|
|
|
*/
|
|
|
|
for (l = private->parent->children; l; l = l->next)
|
|
|
|
{
|
|
|
|
child = l->data;
|
|
|
|
|
|
|
|
if (child != private)
|
|
|
|
recompute_visible_regions_internal (child, TRUE, FALSE, FALSE);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* We also need to recompute the _with_children clip for the parent */
|
|
|
|
recompute_visible_regions_internal (private->parent, TRUE, FALSE, FALSE);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (private->cairo_surface)
|
|
|
|
{
|
|
|
|
int width, height;
|
|
|
|
|
|
|
|
/* It would be nice if we had some cairo support here so we
|
|
|
|
could set the clip rect on the cairo surface */
|
|
|
|
width = private->abs_x + private->width;
|
|
|
|
height = private->abs_y + private->height;
|
|
|
|
|
|
|
|
_gdk_windowing_set_cairo_surface_size (private->cairo_surface,
|
|
|
|
width, height);
|
2009-06-01 10:04:36 +00:00
|
|
|
cairo_surface_set_device_offset (private->cairo_surface,
|
2008-07-18 13:03:42 +00:00
|
|
|
private->abs_x,
|
|
|
|
private->abs_y);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Call this when private has changed in one or more of these ways:
|
|
|
|
* size changed
|
|
|
|
* window moved
|
|
|
|
* new window added
|
|
|
|
* stacking order of window changed
|
|
|
|
* child deleted
|
|
|
|
*
|
|
|
|
* It will recalculate abs_x/y and the clip regions
|
|
|
|
*
|
|
|
|
* Unless the window didn't change stacking order or size/pos, pass in TRUE
|
|
|
|
* for recalculate_siblings. (Mostly used internally for the recursion)
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2008-07-18 13:03:42 +00:00
|
|
|
* If a child window was removed (and you can't use that child for
|
|
|
|
* recompute_visible_regions), pass in TRUE for recalculate_children on the parent
|
|
|
|
*/
|
|
|
|
static void
|
|
|
|
recompute_visible_regions (GdkWindowObject *private,
|
|
|
|
gboolean recalculate_siblings,
|
|
|
|
gboolean recalculate_children)
|
|
|
|
{
|
|
|
|
recompute_visible_regions_internal (private,
|
|
|
|
TRUE,
|
|
|
|
recalculate_siblings,
|
|
|
|
recalculate_children);
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
_gdk_window_update_size (GdkWindow *window)
|
|
|
|
{
|
|
|
|
recompute_visible_regions ((GdkWindowObject *)window, TRUE, FALSE);
|
|
|
|
}
|
|
|
|
|
2009-01-19 12:07:02 +00:00
|
|
|
/* Find the native window that would be just above "child"
|
|
|
|
* in the native stacking order if "child" was a native window
|
|
|
|
* (it doesn't have to be native). If there is no such native
|
|
|
|
* window inside this native parent then NULL is returned.
|
|
|
|
* If child is NULL, find lowest native window in parent.
|
|
|
|
*/
|
|
|
|
static GdkWindowObject *
|
2009-01-20 22:58:22 +00:00
|
|
|
find_native_sibling_above_helper (GdkWindowObject *parent,
|
|
|
|
GdkWindowObject *child)
|
2009-01-19 12:07:02 +00:00
|
|
|
{
|
|
|
|
GdkWindowObject *w;
|
|
|
|
GList *l;
|
|
|
|
|
|
|
|
if (child)
|
|
|
|
{
|
|
|
|
l = g_list_find (parent->children, child);
|
|
|
|
g_assert (l != NULL); /* Better be a child of its parent... */
|
|
|
|
l = l->prev; /* Start looking at the one above the child */
|
|
|
|
}
|
|
|
|
else
|
|
|
|
l = g_list_last (parent->children);
|
|
|
|
|
|
|
|
for (; l != NULL; l = l->prev)
|
|
|
|
{
|
|
|
|
w = l->data;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-19 12:07:02 +00:00
|
|
|
if (gdk_window_has_impl (w))
|
|
|
|
return w;
|
2009-01-20 22:58:22 +00:00
|
|
|
|
|
|
|
g_assert (parent != w);
|
|
|
|
w = find_native_sibling_above_helper (w, NULL);
|
2009-01-19 12:07:02 +00:00
|
|
|
if (w)
|
|
|
|
return w;
|
|
|
|
}
|
|
|
|
|
2009-01-20 22:58:22 +00:00
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static GdkWindowObject *
|
|
|
|
find_native_sibling_above (GdkWindowObject *parent,
|
|
|
|
GdkWindowObject *child)
|
|
|
|
{
|
|
|
|
GdkWindowObject *w;
|
|
|
|
|
|
|
|
w = find_native_sibling_above_helper (parent, child);
|
|
|
|
if (w)
|
|
|
|
return w;
|
|
|
|
|
2009-01-19 12:07:02 +00:00
|
|
|
if (gdk_window_has_impl (parent))
|
|
|
|
return NULL;
|
|
|
|
else
|
|
|
|
return find_native_sibling_above (parent->parent, parent);
|
|
|
|
}
|
|
|
|
|
2008-12-04 09:32:08 +00:00
|
|
|
static GdkEventMask
|
|
|
|
get_native_event_mask (GdkWindowObject *private)
|
|
|
|
{
|
2009-08-24 13:18:10 +00:00
|
|
|
if (_gdk_native_windows ||
|
|
|
|
private->window_type == GDK_WINDOW_ROOT ||
|
|
|
|
private->window_type == GDK_WINDOW_FOREIGN)
|
|
|
|
return private->event_mask;
|
|
|
|
else
|
2009-02-04 10:22:54 +00:00
|
|
|
{
|
2009-09-29 10:56:57 +00:00
|
|
|
GdkEventMask mask;
|
|
|
|
|
|
|
|
/* Do whatever the app asks to, since the app
|
|
|
|
* may be asking for weird things for native windows,
|
2009-12-02 10:09:37 +00:00
|
|
|
* but don't use motion hints as that may affect non-native
|
|
|
|
* child windows that don't want it. Also, we need to
|
|
|
|
* set all the app-specified masks since they will be picked
|
|
|
|
* up by any implicit grabs (i.e. if they were not set as
|
|
|
|
* native we would not get the events we need). */
|
|
|
|
mask = private->event_mask & ~GDK_POINTER_MOTION_HINT_MASK;
|
2009-09-29 10:56:57 +00:00
|
|
|
|
|
|
|
/* We need thse for all native windows so we can
|
|
|
|
emulate events on children: */
|
|
|
|
mask |=
|
2009-02-04 10:22:54 +00:00
|
|
|
GDK_EXPOSURE_MASK |
|
2009-05-26 18:53:48 +00:00
|
|
|
GDK_VISIBILITY_NOTIFY_MASK |
|
2009-09-29 10:56:57 +00:00
|
|
|
GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK;
|
|
|
|
|
|
|
|
/* Additionally we select for pointer and button events
|
|
|
|
* for toplevels as we need to get these to emulate
|
|
|
|
* them for non-native subwindows. Even though we don't
|
|
|
|
* select on them for all native windows we will get them
|
|
|
|
* as the events are propagated out to the first window
|
|
|
|
* that select for them.
|
|
|
|
* Not selecting for button press on all windows is an
|
|
|
|
* important thing, because in X only one client can do
|
|
|
|
* so, and we don't want to unexpectedly prevent another
|
|
|
|
* client from doing it.
|
2010-01-20 14:37:16 +00:00
|
|
|
*
|
|
|
|
* We also need to do the same if the app selects for button presses
|
|
|
|
* because then we will get implicit grabs for this window, and the
|
|
|
|
* event mask used for that grab is based on the rest of the mask
|
|
|
|
* for the window, but we might need more events than this window
|
|
|
|
* lists due to some non-native child window.
|
2009-09-29 10:56:57 +00:00
|
|
|
*/
|
2010-01-20 14:37:16 +00:00
|
|
|
if (gdk_window_is_toplevel (private) ||
|
|
|
|
mask & GDK_BUTTON_PRESS_MASK)
|
2009-09-29 10:56:57 +00:00
|
|
|
mask |=
|
|
|
|
GDK_POINTER_MOTION_MASK |
|
|
|
|
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
|
|
|
|
GDK_SCROLL_MASK;
|
|
|
|
|
|
|
|
return mask;
|
2009-02-04 10:22:54 +00:00
|
|
|
}
|
2008-12-04 09:32:08 +00:00
|
|
|
}
|
|
|
|
|
2009-09-25 09:28:26 +00:00
|
|
|
static GdkEventMask
|
|
|
|
get_native_grab_event_mask (GdkEventMask grab_mask)
|
|
|
|
{
|
|
|
|
/* Similar to the above but for pointer events only */
|
|
|
|
return
|
|
|
|
GDK_POINTER_MOTION_MASK |
|
|
|
|
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
|
|
|
|
GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK |
|
|
|
|
GDK_SCROLL_MASK |
|
|
|
|
(grab_mask &
|
2009-12-02 10:09:37 +00:00
|
|
|
~GDK_POINTER_MOTION_HINT_MASK);
|
2009-09-25 09:28:26 +00:00
|
|
|
}
|
|
|
|
|
2009-06-24 18:56:05 +00:00
|
|
|
/* Puts the native window in the right order wrt the other native windows
|
2009-08-24 13:18:10 +00:00
|
|
|
* in the hierarchy, given the position it has in the client side data.
|
|
|
|
* This is useful if some operation changed the stacking order.
|
|
|
|
* This calls assumes the native window is now topmost in its native parent.
|
|
|
|
*/
|
2009-06-24 18:56:05 +00:00
|
|
|
static void
|
|
|
|
sync_native_window_stack_position (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *above;
|
|
|
|
GdkWindowObject *private;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2009-06-24 18:56:05 +00:00
|
|
|
GList listhead = {0};
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
2009-06-24 18:56:05 +00:00
|
|
|
|
|
|
|
above = find_native_sibling_above (private->parent, private);
|
|
|
|
if (above)
|
|
|
|
{
|
|
|
|
listhead.data = window;
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->restack_under ((GdkWindow *)above,
|
|
|
|
&listhead);
|
2009-06-24 18:56:05 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_new:
|
2009-08-18 18:35:10 +00:00
|
|
|
* @parent: (allow-none): a #GdkWindow, or %NULL to create the window as a child of
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
* the default root window for the default display.
|
|
|
|
* @attributes: attributes of the new window
|
|
|
|
* @attributes_mask: mask indicating which fields in @attributes are valid
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
* Creates a new #GdkWindow using the attributes from
|
|
|
|
* @attributes. See #GdkWindowAttr and #GdkWindowAttributesType for
|
|
|
|
* more details. Note: to use this on displays other than the default
|
|
|
|
* display, @parent must be specified.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2009-08-18 18:35:10 +00:00
|
|
|
* Return value: (transfer none): the new #GdkWindow
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
**/
|
|
|
|
GdkWindow*
|
|
|
|
gdk_window_new (GdkWindow *parent,
|
|
|
|
GdkWindowAttr *attributes,
|
|
|
|
gint attributes_mask)
|
|
|
|
{
|
|
|
|
GdkWindow *window;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkWindowObject *private;
|
|
|
|
GdkScreen *screen;
|
|
|
|
GdkVisual *visual;
|
2008-12-08 11:19:10 +00:00
|
|
|
int x, y;
|
2008-07-18 13:03:42 +00:00
|
|
|
gboolean native;
|
|
|
|
GdkEventMask event_mask;
|
2008-12-03 21:00:56 +00:00
|
|
|
GdkWindow *real_parent;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
g_return_val_if_fail (attributes != NULL, NULL);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (!parent)
|
|
|
|
{
|
|
|
|
GDK_NOTE (MULTIHEAD,
|
|
|
|
g_warning ("gdk_window_new(): no parent specified reverting to parent = default root window"));
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
screen = gdk_screen_get_default ();
|
|
|
|
parent = gdk_screen_get_root_window (screen);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
screen = gdk_drawable_get_screen (parent);
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (parent), NULL);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (parent))
|
2009-08-30 15:14:40 +00:00
|
|
|
{
|
|
|
|
g_warning ("gdk_window_new(): parent is destroyed\n");
|
|
|
|
return NULL;
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-08-24 13:18:10 +00:00
|
|
|
if (attributes->window_type == GDK_WINDOW_OFFSCREEN &&
|
|
|
|
_gdk_native_windows)
|
|
|
|
{
|
|
|
|
g_warning ("Offscreen windows not supported with native-windows gdk");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
window = g_object_new (GDK_TYPE_WINDOW, NULL);
|
|
|
|
private = (GdkWindowObject *) window;
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* Windows with a foreign parent are treated as if they are children
|
|
|
|
* of the root window, except for actual creation.
|
|
|
|
*/
|
2008-12-03 21:00:56 +00:00
|
|
|
real_parent = parent;
|
2008-07-18 13:03:42 +00:00
|
|
|
if (GDK_WINDOW_TYPE (parent) == GDK_WINDOW_FOREIGN)
|
|
|
|
parent = gdk_screen_get_root_window (screen);
|
|
|
|
|
|
|
|
private->parent = (GdkWindowObject *)parent;
|
|
|
|
|
|
|
|
private->accept_focus = TRUE;
|
|
|
|
private->focus_on_map = TRUE;
|
|
|
|
|
|
|
|
if (attributes_mask & GDK_WA_X)
|
|
|
|
x = attributes->x;
|
|
|
|
else
|
|
|
|
x = 0;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (attributes_mask & GDK_WA_Y)
|
|
|
|
y = attributes->y;
|
|
|
|
else
|
|
|
|
y = 0;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
private->x = x;
|
|
|
|
private->y = y;
|
|
|
|
private->width = (attributes->width > 1) ? (attributes->width) : (1);
|
|
|
|
private->height = (attributes->height > 1) ? (attributes->height) : (1);
|
|
|
|
|
|
|
|
#ifdef GDK_WINDOWING_X11
|
2009-06-01 10:04:36 +00:00
|
|
|
/* Work around a bug where Xorg refuses to map toplevel InputOnly windows
|
2008-07-18 13:03:42 +00:00
|
|
|
* from an untrusted client: http://bugs.freedesktop.org/show_bug.cgi?id=6988
|
|
|
|
*/
|
|
|
|
if (attributes->wclass == GDK_INPUT_ONLY &&
|
2009-07-18 13:04:06 +00:00
|
|
|
private->parent->window_type == GDK_WINDOW_ROOT &&
|
2008-07-18 13:03:42 +00:00
|
|
|
!G_LIKELY (GDK_DISPLAY_X11 (GDK_WINDOW_DISPLAY (parent))->trusted_client))
|
|
|
|
{
|
|
|
|
g_warning ("Coercing GDK_INPUT_ONLY toplevel window to GDK_INPUT_OUTPUT to work around bug in Xorg server");
|
|
|
|
attributes->wclass = GDK_INPUT_OUTPUT;
|
|
|
|
}
|
|
|
|
#endif
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (attributes->wclass == GDK_INPUT_ONLY)
|
|
|
|
{
|
|
|
|
/* Backwards compatiblity - we've always ignored
|
|
|
|
* attributes->window_type for input-only windows
|
|
|
|
* before
|
|
|
|
*/
|
|
|
|
if (GDK_WINDOW_TYPE (parent) == GDK_WINDOW_ROOT)
|
|
|
|
private->window_type = GDK_WINDOW_TEMP;
|
|
|
|
else
|
|
|
|
private->window_type = GDK_WINDOW_CHILD;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
private->window_type = attributes->window_type;
|
|
|
|
|
|
|
|
/* Sanity checks */
|
|
|
|
switch (private->window_type)
|
|
|
|
{
|
|
|
|
case GDK_WINDOW_TOPLEVEL:
|
|
|
|
case GDK_WINDOW_DIALOG:
|
|
|
|
case GDK_WINDOW_TEMP:
|
2009-02-18 11:57:12 +00:00
|
|
|
case GDK_WINDOW_OFFSCREEN:
|
2008-07-18 13:03:42 +00:00
|
|
|
if (GDK_WINDOW_TYPE (parent) != GDK_WINDOW_ROOT)
|
|
|
|
g_warning (G_STRLOC "Toplevel windows must be created as children of\n"
|
|
|
|
"of a window of type GDK_WINDOW_ROOT or GDK_WINDOW_FOREIGN");
|
|
|
|
case GDK_WINDOW_CHILD:
|
2009-02-18 11:57:12 +00:00
|
|
|
break;
|
2008-07-18 13:03:42 +00:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
g_warning (G_STRLOC "cannot make windows of type %d", private->window_type);
|
|
|
|
return NULL;
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (attributes_mask & GDK_WA_VISUAL)
|
|
|
|
visual = attributes->visual;
|
|
|
|
else
|
|
|
|
visual = gdk_screen_get_system_visual (screen);
|
|
|
|
|
|
|
|
private->event_mask = attributes->event_mask;
|
|
|
|
|
|
|
|
if (attributes->wclass == GDK_INPUT_OUTPUT)
|
|
|
|
{
|
|
|
|
private->input_only = FALSE;
|
2008-12-08 11:19:10 +00:00
|
|
|
private->depth = visual->depth;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-08-13 10:54:31 +00:00
|
|
|
private->bg_color.pixel = 0; /* TODO: BlackPixel (xdisplay, screen_x11->screen_num); */
|
2008-07-18 13:03:42 +00:00
|
|
|
private->bg_color.red = private->bg_color.green = private->bg_color.blue = 0;
|
|
|
|
|
|
|
|
private->bg_pixmap = NULL;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
private->depth = 0;
|
|
|
|
private->input_only = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (private->parent)
|
|
|
|
private->parent->children = g_list_prepend (private->parent->children, window);
|
|
|
|
|
2009-08-24 13:18:10 +00:00
|
|
|
native = _gdk_native_windows; /* Default */
|
2009-07-18 13:04:06 +00:00
|
|
|
if (private->parent->window_type == GDK_WINDOW_ROOT)
|
2008-07-18 13:03:42 +00:00
|
|
|
native = TRUE; /* Always use native windows for toplevels */
|
2008-12-08 11:19:10 +00:00
|
|
|
else if (!private->input_only &&
|
|
|
|
((attributes_mask & GDK_WA_COLORMAP &&
|
|
|
|
attributes->colormap != gdk_drawable_get_colormap ((GdkDrawable *)private->parent)) ||
|
|
|
|
(attributes_mask & GDK_WA_VISUAL &&
|
|
|
|
attributes->visual != gdk_drawable_get_visual ((GdkDrawable *)private->parent))))
|
|
|
|
native = TRUE; /* InputOutput window with different colormap or visual than parent, needs native window */
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2010-04-15 11:08:47 +00:00
|
|
|
if (gdk_window_is_offscreen (private))
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
_gdk_offscreen_window_new (window, screen, visual, attributes, attributes_mask);
|
2009-01-23 19:08:39 +00:00
|
|
|
private->impl_window = private;
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
else if (native)
|
|
|
|
{
|
2008-12-04 09:32:08 +00:00
|
|
|
event_mask = get_native_event_mask (private);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* Create the impl */
|
2008-12-03 21:00:56 +00:00
|
|
|
_gdk_window_impl_new (window, real_parent, screen, visual, event_mask, attributes, attributes_mask);
|
2009-01-23 19:08:39 +00:00
|
|
|
private->impl_window = private;
|
2009-01-19 12:07:02 +00:00
|
|
|
|
|
|
|
/* This will put the native window topmost in the native parent, which may
|
|
|
|
* be wrong wrt other native windows in the non-native hierarchy, so restack */
|
2009-08-24 13:18:10 +00:00
|
|
|
if (!_gdk_window_has_impl (real_parent))
|
|
|
|
sync_native_window_stack_position (window);
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
else
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
{
|
2009-01-23 19:08:39 +00:00
|
|
|
private->impl_window = g_object_ref (private->parent->impl_window);
|
|
|
|
private->impl = g_object_ref (private->impl_window->impl);
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
recompute_visible_regions (private, TRUE, FALSE);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-07-18 13:04:06 +00:00
|
|
|
if (private->parent->window_type != GDK_WINDOW_ROOT)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
/* Inherit redirection from parent */
|
|
|
|
private->redirect = private->parent->redirect;
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-15 18:13:06 +00:00
|
|
|
gdk_window_set_cursor (window, ((attributes_mask & GDK_WA_CURSOR) ?
|
|
|
|
(attributes->cursor) :
|
|
|
|
NULL));
|
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
return window;
|
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static gboolean
|
|
|
|
is_parent_of (GdkWindow *parent,
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkWindow *child)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
GdkWindow *w;
|
|
|
|
|
|
|
|
w = child;
|
|
|
|
while (w != NULL)
|
|
|
|
{
|
|
|
|
if (w == parent)
|
|
|
|
return TRUE;
|
|
|
|
|
|
|
|
w = gdk_window_get_parent (w);
|
|
|
|
}
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
change_impl (GdkWindowObject *private,
|
2009-01-23 19:08:39 +00:00
|
|
|
GdkWindowObject *impl_window,
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkDrawable *new)
|
|
|
|
{
|
|
|
|
GList *l;
|
|
|
|
GdkWindowObject *child;
|
|
|
|
GdkDrawable *old_impl;
|
2009-01-23 19:08:39 +00:00
|
|
|
GdkWindowObject *old_impl_window;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
old_impl = private->impl;
|
2009-01-23 19:08:39 +00:00
|
|
|
old_impl_window = private->impl_window;
|
|
|
|
if (private != impl_window)
|
|
|
|
private->impl_window = g_object_ref (impl_window);
|
|
|
|
else
|
|
|
|
private->impl_window = private;
|
2008-12-19 13:44:51 +00:00
|
|
|
private->impl = g_object_ref (new);
|
2009-01-23 19:08:39 +00:00
|
|
|
if (old_impl_window != private)
|
|
|
|
g_object_unref (old_impl_window);
|
2008-12-19 13:44:51 +00:00
|
|
|
g_object_unref (old_impl);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
for (l = private->children; l != NULL; l = l->next)
|
|
|
|
{
|
|
|
|
child = l->data;
|
|
|
|
|
|
|
|
if (child->impl == old_impl)
|
2009-01-23 19:08:39 +00:00
|
|
|
change_impl (child, impl_window, new);
|
2008-12-18 21:09:25 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
reparent_to_impl (GdkWindowObject *private)
|
|
|
|
{
|
|
|
|
GList *l;
|
|
|
|
GdkWindowObject *child;
|
|
|
|
gboolean show;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
|
|
|
|
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
2008-12-18 21:09:25 +00:00
|
|
|
|
|
|
|
/* Enumerate in reverse order so we get the right order for the native
|
|
|
|
windows (first in childrens list is topmost, and reparent places on top) */
|
|
|
|
for (l = g_list_last (private->children); l != NULL; l = l->prev)
|
|
|
|
{
|
|
|
|
child = l->data;
|
|
|
|
|
|
|
|
if (child->impl == private->impl)
|
|
|
|
reparent_to_impl (child);
|
2008-07-18 13:03:42 +00:00
|
|
|
else
|
|
|
|
{
|
2009-08-31 08:44:11 +00:00
|
|
|
show = impl_iface->reparent ((GdkWindow *)child,
|
|
|
|
(GdkWindow *)private,
|
|
|
|
child->x, child->y);
|
2008-07-18 13:03:42 +00:00
|
|
|
if (show)
|
|
|
|
gdk_window_show_unraised ((GdkWindow *)child);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-12-18 21:09:25 +00:00
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_reparent:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @new_parent: new parent to move @window into
|
|
|
|
* @x: X location inside the new parent
|
|
|
|
* @y: Y location inside the new parent
|
|
|
|
*
|
|
|
|
* Reparents @window into the given @new_parent. The window being
|
|
|
|
* reparented will be unmapped as a side effect.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
**/
|
|
|
|
void
|
|
|
|
gdk_window_reparent (GdkWindow *window,
|
|
|
|
GdkWindow *new_parent,
|
|
|
|
gint x,
|
|
|
|
gint y)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkWindowObject *new_parent_private;
|
|
|
|
GdkWindowObject *old_parent;
|
2009-07-01 08:23:29 +00:00
|
|
|
GdkScreen *screen;
|
2009-08-27 16:04:07 +00:00
|
|
|
gboolean show, was_mapped, applied_clip_as_shape;
|
2008-12-18 21:09:25 +00:00
|
|
|
gboolean do_reparent_to_impl;
|
2009-08-26 12:53:27 +00:00
|
|
|
GdkEventMask old_native_event_mask;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
g_return_if_fail (new_parent == NULL || GDK_IS_WINDOW (new_parent));
|
|
|
|
g_return_if_fail (GDK_WINDOW_TYPE (window) != GDK_WINDOW_ROOT);
|
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (window) ||
|
|
|
|
(new_parent && GDK_WINDOW_DESTROYED (new_parent)))
|
2008-07-18 13:03:42 +00:00
|
|
|
return;
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
|
2009-07-01 08:23:29 +00:00
|
|
|
screen = gdk_drawable_get_screen (GDK_DRAWABLE (window));
|
2008-07-18 13:03:42 +00:00
|
|
|
if (!new_parent)
|
2009-07-01 08:23:29 +00:00
|
|
|
new_parent = gdk_screen_get_root_window (screen);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
private = (GdkWindowObject *) window;
|
2008-07-18 13:03:42 +00:00
|
|
|
new_parent_private = (GdkWindowObject *)new_parent;
|
|
|
|
|
|
|
|
/* No input-output children of input-only windows */
|
|
|
|
if (new_parent_private->input_only && !private->input_only)
|
|
|
|
return;
|
|
|
|
|
|
|
|
/* Don't create loops in hierarchy */
|
|
|
|
if (is_parent_of (window, new_parent))
|
|
|
|
return;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2010-01-19 15:36:49 +00:00
|
|
|
/* This might be wrong in the new parent, e.g. for non-native surfaces.
|
|
|
|
To make sure we're ok, just wipe it. */
|
|
|
|
gdk_window_drop_cairo_surface (private);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
2008-07-18 13:03:42 +00:00
|
|
|
old_parent = private->parent;
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
|
|
|
|
/* Break up redirection if inherited */
|
|
|
|
if (private->redirect && private->redirect->redirected != private)
|
|
|
|
{
|
|
|
|
remove_redirect_from_children (private, private->redirect);
|
|
|
|
private->redirect = NULL;
|
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
was_mapped = GDK_WINDOW_IS_MAPPED (window);
|
|
|
|
show = FALSE;
|
2008-12-04 11:56:26 +00:00
|
|
|
|
|
|
|
/* Reparenting to toplevel. Ensure we have a native window so this can work */
|
|
|
|
if (new_parent_private->window_type == GDK_WINDOW_ROOT ||
|
|
|
|
new_parent_private->window_type == GDK_WINDOW_FOREIGN)
|
2009-06-01 09:57:59 +00:00
|
|
|
gdk_window_ensure_native (window);
|
2008-12-18 21:09:25 +00:00
|
|
|
|
2009-08-27 16:04:07 +00:00
|
|
|
applied_clip_as_shape = should_apply_clip_as_shape (private);
|
|
|
|
|
2009-08-26 12:53:27 +00:00
|
|
|
old_native_event_mask = 0;
|
2008-12-18 21:09:25 +00:00
|
|
|
do_reparent_to_impl = FALSE;
|
2008-07-18 13:03:42 +00:00
|
|
|
if (gdk_window_has_impl (private))
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
{
|
2009-08-26 12:53:27 +00:00
|
|
|
old_native_event_mask = get_native_event_mask (private);
|
2008-07-18 13:03:42 +00:00
|
|
|
/* Native window */
|
2009-08-31 08:44:11 +00:00
|
|
|
show = impl_iface->reparent (window, new_parent, x, y);
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
else
|
|
|
|
{
|
2008-12-04 11:56:26 +00:00
|
|
|
/* This shouldn't happen, as we created a native in this case, check anyway to see if that ever fails */
|
|
|
|
g_assert (new_parent_private->window_type != GDK_WINDOW_ROOT &&
|
|
|
|
new_parent_private->window_type != GDK_WINDOW_FOREIGN);
|
2008-06-27 14:27:44 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
show = was_mapped;
|
|
|
|
gdk_window_hide (window);
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
|
2008-12-18 21:09:25 +00:00
|
|
|
do_reparent_to_impl = TRUE;
|
2009-01-23 19:08:39 +00:00
|
|
|
change_impl (private,
|
|
|
|
new_parent_private->impl_window,
|
|
|
|
new_parent_private->impl);
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
2004-03-13 18:27:56 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* From here on, we treat parents of type GDK_WINDOW_FOREIGN like
|
|
|
|
* the root window
|
|
|
|
*/
|
|
|
|
if (GDK_WINDOW_TYPE (new_parent) == GDK_WINDOW_FOREIGN)
|
2004-03-13 18:27:56 +00:00
|
|
|
{
|
2009-07-01 08:23:29 +00:00
|
|
|
new_parent = gdk_screen_get_root_window (screen);
|
2008-07-18 13:03:42 +00:00
|
|
|
new_parent_private = (GdkWindowObject *)new_parent;
|
2004-03-13 18:27:56 +00:00
|
|
|
}
|
|
|
|
|
2009-02-05 16:01:21 +00:00
|
|
|
if (old_parent)
|
|
|
|
old_parent->children = g_list_remove (old_parent->children, window);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
private->parent = new_parent_private;
|
|
|
|
private->x = x;
|
|
|
|
private->y = y;
|
|
|
|
|
|
|
|
new_parent_private->children = g_list_prepend (new_parent_private->children, window);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* Switch the window type as appropriate */
|
|
|
|
|
|
|
|
switch (GDK_WINDOW_TYPE (new_parent))
|
|
|
|
{
|
|
|
|
case GDK_WINDOW_ROOT:
|
|
|
|
case GDK_WINDOW_FOREIGN:
|
|
|
|
if (private->toplevel_window_type != -1)
|
|
|
|
GDK_WINDOW_TYPE (window) = private->toplevel_window_type;
|
|
|
|
else if (GDK_WINDOW_TYPE (window) == GDK_WINDOW_CHILD)
|
|
|
|
GDK_WINDOW_TYPE (window) = GDK_WINDOW_TOPLEVEL;
|
|
|
|
break;
|
|
|
|
case GDK_WINDOW_OFFSCREEN:
|
|
|
|
case GDK_WINDOW_TOPLEVEL:
|
|
|
|
case GDK_WINDOW_CHILD:
|
|
|
|
case GDK_WINDOW_DIALOG:
|
|
|
|
case GDK_WINDOW_TEMP:
|
2008-12-04 20:57:43 +00:00
|
|
|
if (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD && \
|
|
|
|
GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
/* Save the original window type so we can restore it if the
|
|
|
|
* window is reparented back to be a toplevel
|
|
|
|
*/
|
|
|
|
private->toplevel_window_type = GDK_WINDOW_TYPE (window);
|
|
|
|
GDK_WINDOW_TYPE (window) = GDK_WINDOW_CHILD;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-12-04 09:32:08 +00:00
|
|
|
/* We might have changed window type for a native windows, so we
|
|
|
|
need to change the event mask too. */
|
|
|
|
if (gdk_window_has_impl (private))
|
2009-08-26 12:53:27 +00:00
|
|
|
{
|
|
|
|
GdkEventMask native_event_mask = get_native_event_mask (private);
|
|
|
|
|
|
|
|
if (native_event_mask != old_native_event_mask)
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->set_events (window, native_event_mask);
|
2009-08-26 12:53:27 +00:00
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* Inherit parent redirect if we don't have our own */
|
|
|
|
if (private->parent && private->redirect == NULL)
|
|
|
|
{
|
|
|
|
private->redirect = private->parent->redirect;
|
|
|
|
apply_redirect_to_children (private, private->redirect);
|
|
|
|
}
|
|
|
|
|
2009-07-18 18:29:50 +00:00
|
|
|
_gdk_window_update_viewable (window);
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
recompute_visible_regions (private, TRUE, FALSE);
|
|
|
|
if (old_parent && GDK_WINDOW_TYPE (old_parent) != GDK_WINDOW_ROOT)
|
|
|
|
recompute_visible_regions (old_parent, FALSE, TRUE);
|
2008-12-18 21:09:25 +00:00
|
|
|
|
2009-08-27 16:04:07 +00:00
|
|
|
/* We used to apply the clip as the shape, but no more.
|
|
|
|
Reset this to the real shape */
|
|
|
|
if (gdk_window_has_impl (private) &&
|
|
|
|
applied_clip_as_shape &&
|
|
|
|
!should_apply_clip_as_shape (private))
|
|
|
|
apply_shape (private, private->shape);
|
|
|
|
|
2008-12-18 21:09:25 +00:00
|
|
|
if (do_reparent_to_impl)
|
|
|
|
reparent_to_impl (private);
|
2009-01-19 13:56:30 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
/* The reparent will have put the native window topmost in the native parent,
|
|
|
|
* which may be wrong wrt other native windows in the non-native hierarchy,
|
|
|
|
* so restack */
|
2009-08-24 13:18:10 +00:00
|
|
|
if (!gdk_window_has_impl (new_parent_private))
|
|
|
|
sync_native_window_stack_position (window);
|
2009-01-19 13:56:30 +00:00
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (show)
|
|
|
|
gdk_window_show_unraised (window);
|
|
|
|
else
|
2009-06-18 18:58:13 +00:00
|
|
|
_gdk_synthesize_crossing_events_for_geometry_change (window);
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
2009-12-08 11:19:00 +00:00
|
|
|
static gboolean
|
|
|
|
temporary_disable_extension_events (GdkWindowObject *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *child;
|
|
|
|
GList *l;
|
|
|
|
gboolean res;
|
|
|
|
|
|
|
|
if (window->extension_events != 0)
|
|
|
|
{
|
|
|
|
g_object_set_data (G_OBJECT (window),
|
|
|
|
"gdk-window-extension-events",
|
|
|
|
GINT_TO_POINTER (window->extension_events));
|
|
|
|
gdk_input_set_extension_events ((GdkWindow *)window, 0,
|
|
|
|
GDK_EXTENSION_EVENTS_NONE);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
res = FALSE;
|
|
|
|
|
|
|
|
for (l = window->children; l != NULL; l = l->next)
|
|
|
|
{
|
|
|
|
child = l->data;
|
|
|
|
|
|
|
|
if (window->impl_window == child->impl_window)
|
2009-12-21 20:27:46 +00:00
|
|
|
res |= temporary_disable_extension_events (child);
|
2009-12-08 11:19:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
reenable_extension_events (GdkWindowObject *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *child;
|
|
|
|
GList *l;
|
|
|
|
int mask;
|
|
|
|
|
|
|
|
mask = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (window),
|
|
|
|
"gdk-window-extension-events"));
|
|
|
|
|
|
|
|
if (mask != 0)
|
|
|
|
{
|
|
|
|
/* We don't have the mode here, so we pass in cursor.
|
|
|
|
This works with the current code since mode is not
|
|
|
|
stored except as part of the mask, and cursor doesn't
|
|
|
|
change the mask. */
|
|
|
|
gdk_input_set_extension_events ((GdkWindow *)window, mask,
|
|
|
|
GDK_EXTENSION_EVENTS_CURSOR);
|
|
|
|
g_object_set_data (G_OBJECT (window),
|
|
|
|
"gdk-window-extension-events",
|
|
|
|
NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
for (l = window->children; l != NULL; l = l->next)
|
|
|
|
{
|
|
|
|
child = l->data;
|
|
|
|
|
|
|
|
if (window->impl_window == child->impl_window)
|
|
|
|
reenable_extension_events (window);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/**
|
2009-06-01 09:57:59 +00:00
|
|
|
* gdk_window_ensure_native:
|
2008-07-18 13:03:42 +00:00
|
|
|
* @window: a #GdkWindow
|
|
|
|
*
|
2009-06-01 09:57:59 +00:00
|
|
|
* Tries to ensure that there is a window-system native window for this
|
|
|
|
* GdkWindow. This may fail in some situations, returning %FALSE.
|
2008-07-18 13:03:42 +00:00
|
|
|
*
|
|
|
|
* Offscreen window and children of them can never have native windows.
|
2009-06-01 09:57:59 +00:00
|
|
|
*
|
2008-07-18 13:03:42 +00:00
|
|
|
* Some backends may not support native child windows.
|
2009-06-01 09:57:59 +00:00
|
|
|
*
|
|
|
|
* Returns: %TRUE if the window has a native window, %FALSE otherwise
|
|
|
|
*
|
|
|
|
* Since: 2.18
|
2009-07-03 19:17:26 +00:00
|
|
|
*/
|
2009-06-01 09:57:59 +00:00
|
|
|
gboolean
|
|
|
|
gdk_window_ensure_native (GdkWindow *window)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
|
|
|
GdkWindowObject *impl_window;
|
|
|
|
GdkDrawable *new_impl, *old_impl;
|
|
|
|
GdkScreen *screen;
|
|
|
|
GdkVisual *visual;
|
2008-12-08 11:19:10 +00:00
|
|
|
GdkWindowAttr attributes;
|
2009-01-19 12:07:02 +00:00
|
|
|
GdkWindowObject *above;
|
|
|
|
GList listhead;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2009-12-08 11:19:00 +00:00
|
|
|
gboolean disabled_extension_events;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-06-01 12:07:36 +00:00
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2008-12-03 21:00:56 +00:00
|
|
|
if (GDK_WINDOW_TYPE (window) == GDK_WINDOW_ROOT ||
|
|
|
|
GDK_WINDOW_DESTROYED (window))
|
2009-06-01 09:57:59 +00:00
|
|
|
return FALSE;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
|
2009-06-01 09:57:59 +00:00
|
|
|
impl_window = gdk_window_get_impl_window (private);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2010-04-15 11:08:47 +00:00
|
|
|
if (gdk_window_is_offscreen (impl_window))
|
2009-06-01 09:57:59 +00:00
|
|
|
return FALSE; /* native in offscreens not supported */
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-06-01 09:57:59 +00:00
|
|
|
if (impl_window == private)
|
|
|
|
/* Already has an impl, and its not offscreen . */
|
|
|
|
return TRUE;
|
2008-12-18 20:30:56 +00:00
|
|
|
|
2009-06-01 09:57:59 +00:00
|
|
|
/* Need to create a native window */
|
2009-01-19 12:07:02 +00:00
|
|
|
|
2009-12-08 11:19:00 +00:00
|
|
|
/* First we disable any extension events on the window or its
|
|
|
|
descendants to handle the native input window moving */
|
|
|
|
disabled_extension_events = FALSE;
|
|
|
|
if (impl_window->input_window)
|
|
|
|
disabled_extension_events = temporary_disable_extension_events (private);
|
|
|
|
|
2010-01-19 15:37:42 +00:00
|
|
|
gdk_window_drop_cairo_surface (private);
|
|
|
|
|
2009-06-01 09:57:59 +00:00
|
|
|
screen = gdk_drawable_get_screen (window);
|
|
|
|
visual = gdk_drawable_get_visual (window);
|
2008-12-17 10:24:46 +00:00
|
|
|
|
2009-06-01 09:57:59 +00:00
|
|
|
attributes.colormap = gdk_drawable_get_colormap (window);
|
2009-01-19 15:49:34 +00:00
|
|
|
|
2009-06-01 09:57:59 +00:00
|
|
|
old_impl = private->impl;
|
2009-08-31 08:44:11 +00:00
|
|
|
_gdk_window_impl_new (window, (GdkWindow *)private->parent,
|
|
|
|
screen, visual,
|
|
|
|
get_native_event_mask (private),
|
|
|
|
&attributes, GDK_WA_COLORMAP);
|
2009-06-01 09:57:59 +00:00
|
|
|
new_impl = private->impl;
|
2008-12-19 09:38:47 +00:00
|
|
|
|
2009-06-01 09:57:59 +00:00
|
|
|
private->impl = old_impl;
|
|
|
|
change_impl (private, private, new_impl);
|
2008-12-18 13:59:54 +00:00
|
|
|
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
|
2009-06-01 09:57:59 +00:00
|
|
|
/* Native window creation will put the native window topmost in the
|
2009-08-24 13:18:10 +00:00
|
|
|
* native parent, which may be wrong wrt the position of the previous
|
|
|
|
* non-native window wrt to the other non-native children, so correct this.
|
|
|
|
*/
|
2009-06-01 09:57:59 +00:00
|
|
|
above = find_native_sibling_above (private->parent, private);
|
|
|
|
if (above)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
2009-06-01 09:57:59 +00:00
|
|
|
listhead.data = window;
|
|
|
|
listhead.prev = NULL;
|
|
|
|
listhead.next = NULL;
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->restack_under ((GdkWindow *)above, &listhead);
|
2009-06-01 09:57:59 +00:00
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-06-01 09:57:59 +00:00
|
|
|
recompute_visible_regions (private, FALSE, FALSE);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-06-01 09:57:59 +00:00
|
|
|
/* The shape may not have been set, as the clip region doesn't actually
|
|
|
|
change, so do it here manually */
|
2009-08-27 16:04:07 +00:00
|
|
|
if (should_apply_clip_as_shape (private))
|
|
|
|
apply_clip_as_shape (private);
|
2008-12-04 11:57:35 +00:00
|
|
|
|
2009-06-01 09:57:59 +00:00
|
|
|
reparent_to_impl (private);
|
2008-12-04 11:57:35 +00:00
|
|
|
|
2009-06-01 09:57:59 +00:00
|
|
|
if (!private->input_only)
|
|
|
|
{
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->set_background (window, &private->bg_color);
|
2009-06-01 09:57:59 +00:00
|
|
|
if (private->bg_pixmap != NULL)
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->set_back_pixmap (window, private->bg_pixmap);
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
2009-06-01 09:57:59 +00:00
|
|
|
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->input_shape_combine_region (window,
|
|
|
|
private->input_shape,
|
|
|
|
0, 0);
|
2009-06-01 09:57:59 +00:00
|
|
|
|
|
|
|
if (gdk_window_is_viewable (window))
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->show (window, FALSE);
|
2009-06-01 12:07:36 +00:00
|
|
|
|
2009-12-08 11:19:00 +00:00
|
|
|
if (disabled_extension_events)
|
2009-12-08 11:28:44 +00:00
|
|
|
reenable_extension_events (private);
|
2009-12-08 11:19:00 +00:00
|
|
|
|
2009-06-01 12:07:36 +00:00
|
|
|
return TRUE;
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
window_remove_filters (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *obj = (GdkWindowObject*) window;
|
|
|
|
|
|
|
|
if (obj->filters)
|
|
|
|
{
|
|
|
|
GList *tmp_list;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
for (tmp_list = obj->filters; tmp_list; tmp_list = tmp_list->next)
|
|
|
|
g_free (tmp_list->data);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
g_list_free (obj->filters);
|
|
|
|
obj->filters = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* _gdk_window_destroy_hierarchy:
|
2000-05-15 16:09:53 +00:00
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @recursing: If TRUE, then this is being called because a parent
|
2009-06-01 10:04:36 +00:00
|
|
|
* was destroyed.
|
2009-02-05 08:55:39 +00:00
|
|
|
* @recursing_native: If TRUE, then this is being called because a native parent
|
2009-06-01 10:04:36 +00:00
|
|
|
* was destroyed. This generally means that the call to the
|
2002-01-13 20:13:34 +00:00
|
|
|
* windowing system to destroy the window can be omitted, since
|
|
|
|
* it will be destroyed as a result of the parent being destroyed.
|
2009-06-01 10:04:36 +00:00
|
|
|
* Unless @foreign_destroy.
|
|
|
|
* @foreign_destroy: If TRUE, the window or a parent was destroyed by some
|
|
|
|
* external agency. The window has already been destroyed and no
|
2002-01-13 20:13:34 +00:00
|
|
|
* windowing system calls should be made. (This may never happen
|
|
|
|
* for some windowing systems.)
|
2000-05-15 16:09:53 +00:00
|
|
|
*
|
2002-01-13 20:13:34 +00:00
|
|
|
* Internal function to destroy a window. Like gdk_window_destroy(),
|
|
|
|
* but does not drop the reference count created by gdk_window_new().
|
2000-05-15 16:09:53 +00:00
|
|
|
**/
|
|
|
|
static void
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
_gdk_window_destroy_hierarchy (GdkWindow *window,
|
2000-05-15 16:09:53 +00:00
|
|
|
gboolean recursing,
|
2009-02-05 08:55:39 +00:00
|
|
|
gboolean recursing_native,
|
2000-05-15 16:09:53 +00:00
|
|
|
gboolean foreign_destroy)
|
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowObject *private;
|
|
|
|
GdkWindowObject *temp_private;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2000-05-15 16:09:53 +00:00
|
|
|
GdkWindow *temp_window;
|
2005-11-10 12:09:42 +00:00
|
|
|
GdkScreen *screen;
|
2008-12-15 09:24:54 +00:00
|
|
|
GdkDisplay *display;
|
2000-05-15 16:09:53 +00:00
|
|
|
GList *children;
|
|
|
|
GList *tmp;
|
2008-10-21 21:42:39 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
private = (GdkWindowObject*) window;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2004-03-13 18:27:56 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
return;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
display = gdk_drawable_get_display (GDK_DRAWABLE (window));
|
2009-02-28 05:24:07 +00:00
|
|
|
screen = gdk_drawable_get_screen (GDK_DRAWABLE (window));
|
|
|
|
temp_window = g_object_get_qdata (G_OBJECT (screen), quark_pointer_window);
|
|
|
|
if (temp_window == window)
|
|
|
|
g_object_set_qdata (G_OBJECT (screen), quark_pointer_window, NULL);
|
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
|
2009-07-18 13:04:06 +00:00
|
|
|
switch (private->window_type)
|
2000-05-15 16:09:53 +00:00
|
|
|
{
|
2005-11-10 12:09:42 +00:00
|
|
|
case GDK_WINDOW_ROOT:
|
|
|
|
if (!screen->closed)
|
|
|
|
{
|
|
|
|
g_error ("attempted to destroy root window");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
/* else fall thru */
|
2000-05-15 16:09:53 +00:00
|
|
|
case GDK_WINDOW_TOPLEVEL:
|
|
|
|
case GDK_WINDOW_CHILD:
|
|
|
|
case GDK_WINDOW_DIALOG:
|
|
|
|
case GDK_WINDOW_TEMP:
|
|
|
|
case GDK_WINDOW_FOREIGN:
|
2008-07-18 13:03:42 +00:00
|
|
|
case GDK_WINDOW_OFFSCREEN:
|
2009-07-18 13:04:06 +00:00
|
|
|
if (private->window_type == GDK_WINDOW_FOREIGN && !foreign_destroy)
|
2004-03-13 18:27:56 +00:00
|
|
|
{
|
|
|
|
/* Logically, it probably makes more sense to send
|
|
|
|
* a "destroy yourself" message to the foreign window
|
2008-12-13 05:20:10 +00:00
|
|
|
* whether or not it's in our hierarchy; but for historical
|
2004-03-13 18:27:56 +00:00
|
|
|
* reasons, we only send "destroy yourself" messages to
|
2008-12-13 05:20:10 +00:00
|
|
|
* foreign windows in our hierarchy.
|
2004-03-13 18:27:56 +00:00
|
|
|
*/
|
|
|
|
if (private->parent)
|
|
|
|
_gdk_windowing_window_destroy_foreign (window);
|
|
|
|
|
|
|
|
/* Also for historical reasons, we remove any filters
|
|
|
|
* on a foreign window when it or a parent is destroyed;
|
|
|
|
* this likely causes problems if two separate portions
|
|
|
|
* of code are maintaining filter lists on a foreign window.
|
|
|
|
*/
|
|
|
|
window_remove_filters (window);
|
|
|
|
}
|
|
|
|
else
|
2000-05-15 16:09:53 +00:00
|
|
|
{
|
|
|
|
if (private->parent)
|
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowObject *parent_private = (GdkWindowObject *)private->parent;
|
2008-12-18 13:29:28 +00:00
|
|
|
|
2000-05-15 16:09:53 +00:00
|
|
|
if (parent_private->children)
|
|
|
|
parent_private->children = g_list_remove (parent_private->children, window);
|
2008-12-18 13:29:28 +00:00
|
|
|
|
|
|
|
if (!recursing &&
|
|
|
|
GDK_WINDOW_IS_MAPPED (window))
|
|
|
|
{
|
|
|
|
recompute_visible_regions (private, TRUE, FALSE);
|
|
|
|
gdk_window_invalidate_in_parent (private);
|
|
|
|
}
|
2000-05-15 16:09:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
gdk_window_free_paint_stack (window);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2000-06-22 15:36:12 +00:00
|
|
|
if (private->bg_pixmap &&
|
2009-06-01 10:04:36 +00:00
|
|
|
private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
|
|
|
|
private->bg_pixmap != GDK_NO_BG)
|
2000-05-15 16:09:53 +00:00
|
|
|
{
|
2002-09-25 07:23:55 +00:00
|
|
|
g_object_unref (private->bg_pixmap);
|
2000-05-15 16:09:53 +00:00
|
|
|
private->bg_pixmap = NULL;
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-07-18 13:04:06 +00:00
|
|
|
if (private->window_type == GDK_WINDOW_FOREIGN)
|
2001-10-24 14:15:50 +00:00
|
|
|
g_assert (private->children == NULL);
|
|
|
|
else
|
2000-05-15 16:09:53 +00:00
|
|
|
{
|
|
|
|
children = tmp = private->children;
|
|
|
|
private->children = NULL;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2000-05-15 16:09:53 +00:00
|
|
|
while (tmp)
|
|
|
|
{
|
|
|
|
temp_window = tmp->data;
|
|
|
|
tmp = tmp->next;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
temp_private = (GdkWindowObject*) temp_window;
|
2000-05-15 16:09:53 +00:00
|
|
|
if (temp_private)
|
2002-01-13 20:13:34 +00:00
|
|
|
_gdk_window_destroy_hierarchy (temp_window,
|
2009-06-01 10:04:36 +00:00
|
|
|
TRUE,
|
2009-02-05 08:55:39 +00:00
|
|
|
recursing_native || gdk_window_has_impl (private),
|
|
|
|
foreign_destroy);
|
2000-05-15 16:09:53 +00:00
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2000-05-15 16:09:53 +00:00
|
|
|
g_list_free (children);
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-06-01 10:04:36 +00:00
|
|
|
_gdk_window_clear_update_area (window);
|
|
|
|
|
2010-01-19 15:36:49 +00:00
|
|
|
gdk_window_drop_cairo_surface (private);
|
2009-05-29 14:39:12 +00:00
|
|
|
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
|
2009-05-29 14:39:12 +00:00
|
|
|
if (private->extension_events)
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->input_window_destroy (window);
|
2009-05-29 14:39:12 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (gdk_window_has_impl (private))
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->destroy (window, recursing_native,
|
|
|
|
foreign_destroy);
|
2008-07-18 13:03:42 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
/* hide to make sure we repaint and break grabs */
|
|
|
|
gdk_window_hide (window);
|
|
|
|
}
|
|
|
|
|
|
|
|
private->state |= GDK_WINDOW_STATE_WITHDRAWN;
|
2003-06-09 01:55:01 +00:00
|
|
|
private->parent = NULL;
|
2001-07-03 14:14:30 +00:00
|
|
|
private->destroyed = TRUE;
|
2001-04-18 18:28:19 +00:00
|
|
|
|
2004-03-13 18:27:56 +00:00
|
|
|
window_remove_filters (window);
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
|
2009-06-01 10:04:36 +00:00
|
|
|
gdk_drawable_set_colormap (GDK_DRAWABLE (window), NULL);
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
|
|
|
|
/* If we own the redirect, free it */
|
|
|
|
if (private->redirect && private->redirect->redirected == private)
|
|
|
|
gdk_window_redirect_free (private->redirect);
|
2008-06-27 14:27:44 +00:00
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
private->redirect = NULL;
|
2008-12-15 09:24:54 +00:00
|
|
|
|
|
|
|
if (display->pointer_info.toplevel_under_pointer == window)
|
|
|
|
{
|
|
|
|
g_object_unref (display->pointer_info.toplevel_under_pointer);
|
|
|
|
display->pointer_info.toplevel_under_pointer = NULL;
|
|
|
|
}
|
2009-08-13 14:48:07 +00:00
|
|
|
|
|
|
|
if (private->clip_region)
|
|
|
|
{
|
|
|
|
gdk_region_destroy (private->clip_region);
|
|
|
|
private->clip_region = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (private->clip_region_with_children)
|
|
|
|
{
|
|
|
|
gdk_region_destroy (private->clip_region_with_children);
|
|
|
|
private->clip_region_with_children = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (private->outstanding_moves)
|
|
|
|
{
|
2009-08-14 09:20:12 +00:00
|
|
|
g_list_foreach (private->outstanding_moves, (GFunc)gdk_window_region_move_free, NULL);
|
2009-08-13 14:48:07 +00:00
|
|
|
g_list_free (private->outstanding_moves);
|
|
|
|
private->outstanding_moves = NULL;
|
|
|
|
}
|
2000-05-15 16:09:53 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* _gdk_window_destroy:
|
|
|
|
* @window: a #GdkWindow
|
2002-01-13 20:13:34 +00:00
|
|
|
* @foreign_destroy: If TRUE, the window or a parent was destroyed by some
|
|
|
|
* external agency. The window has already been destroyed and no
|
|
|
|
* windowing system calls should be made. (This may never happen
|
|
|
|
* for some windowing systems.)
|
2000-05-15 16:09:53 +00:00
|
|
|
*
|
2002-01-13 20:13:34 +00:00
|
|
|
* Internal function to destroy a window. Like gdk_window_destroy(),
|
|
|
|
* but does not drop the reference count created by gdk_window_new().
|
2000-05-15 16:09:53 +00:00
|
|
|
**/
|
|
|
|
void
|
|
|
|
_gdk_window_destroy (GdkWindow *window,
|
|
|
|
gboolean foreign_destroy)
|
|
|
|
{
|
2009-02-05 08:55:39 +00:00
|
|
|
_gdk_window_destroy_hierarchy (window, FALSE, FALSE, foreign_destroy);
|
2000-05-15 16:09:53 +00:00
|
|
|
}
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_destroy:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
*
|
Documentation fixes.
Sun Oct 13 18:50:14 2002 Soeren Sandmann <sandmann@daimi.au.dk>
* gtkmenu.c, gtkmenu.sgml, gtkitemfactory.c, gdkwindow.c,
gtkwindow.c, gtkpaned.sgml, gtkdialog.c, gtkbox.h, gtkbutton.sgml,
gtktreemodel.sgml,gtktable.sgml, gtktable.c:
Documentation fixes.
#85719, #90759, #95169, Owen Taylor;
#89221, Yao Zhang, Matthias Clasen;
#95592, Joost Faassen;
#92637, Vitaly Tishkov;
#94616, Ben Martin;
#94772, sbaillie@bigpond.net.au;
2002-10-13 17:17:14 +00:00
|
|
|
* Destroys the window system resources associated with @window and decrements @window's
|
|
|
|
* reference count. The window system resources for all children of @window are also
|
|
|
|
* destroyed, but the children's reference counts are not decremented.
|
|
|
|
*
|
|
|
|
* Note that a window will not be destroyed automatically when its reference count
|
|
|
|
* reaches zero. You must call this function yourself before that happens.
|
2001-10-03 18:19:48 +00:00
|
|
|
*
|
|
|
|
**/
|
2000-05-15 16:09:53 +00:00
|
|
|
void
|
|
|
|
gdk_window_destroy (GdkWindow *window)
|
|
|
|
{
|
2009-02-05 08:55:39 +00:00
|
|
|
_gdk_window_destroy_hierarchy (window, FALSE, FALSE, FALSE);
|
2002-09-25 07:23:55 +00:00
|
|
|
g_object_unref (window);
|
2000-05-15 16:09:53 +00:00
|
|
|
}
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_set_user_data:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @user_data: user data
|
|
|
|
*
|
|
|
|
* For most purposes this function is deprecated in favor of
|
|
|
|
* g_object_set_data(). However, for historical reasons GTK+ stores
|
|
|
|
* the #GtkWidget that owns a #GdkWindow as user data on the
|
|
|
|
* #GdkWindow. So, custom widget implementations should use
|
|
|
|
* this function for that. If GTK+ receives an event for a #GdkWindow,
|
|
|
|
* and the user data for the window is non-%NULL, GTK+ will assume the
|
|
|
|
* user data is a #GtkWidget, and forward the event to that widget.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
**/
|
1997-11-24 22:37:52 +00:00
|
|
|
void
|
1999-11-08 20:14:59 +00:00
|
|
|
gdk_window_set_user_data (GdkWindow *window,
|
|
|
|
gpointer user_data)
|
1998-01-01 20:38:21 +00:00
|
|
|
{
|
2008-10-21 21:42:39 +00:00
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
((GdkWindowObject*)window)->user_data = user_data;
|
1998-01-01 20:38:21 +00:00
|
|
|
}
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_get_user_data:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @data: return location for user data
|
|
|
|
*
|
|
|
|
* Retrieves the user data for @window, which is normally the widget
|
|
|
|
* that @window belongs to. See gdk_window_set_user_data().
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
**/
|
1997-11-24 22:37:52 +00:00
|
|
|
void
|
1999-11-08 20:14:59 +00:00
|
|
|
gdk_window_get_user_data (GdkWindow *window,
|
|
|
|
gpointer *data)
|
1997-11-24 22:37:52 +00:00
|
|
|
{
|
2008-10-21 21:42:39 +00:00
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
*data = ((GdkWindowObject*)window)->user_data;
|
|
|
|
}
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_get_window_type:
|
|
|
|
* @window: a #GdkWindow
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
* Gets the type of the window. See #GdkWindowType.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
* Return value: type of window
|
|
|
|
**/
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowType
|
|
|
|
gdk_window_get_window_type (GdkWindow *window)
|
|
|
|
{
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), (GdkWindowType) -1);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
return GDK_WINDOW_TYPE (window);
|
1997-11-24 22:37:52 +00:00
|
|
|
}
|
|
|
|
|
2009-09-04 15:49:57 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_is_destroyed:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
*
|
|
|
|
* Check to see if a window is destroyed..
|
|
|
|
*
|
|
|
|
* Return value: %TRUE if the window is destroyed
|
2009-12-17 18:17:22 +00:00
|
|
|
*
|
|
|
|
* Since: 2.18
|
2009-09-04 15:49:57 +00:00
|
|
|
**/
|
|
|
|
gboolean
|
|
|
|
gdk_window_is_destroyed (GdkWindow *window)
|
|
|
|
{
|
|
|
|
return GDK_WINDOW_DESTROYED (window);
|
|
|
|
}
|
|
|
|
|
2010-04-15 10:59:44 +00:00
|
|
|
static void
|
|
|
|
to_embedder (GdkWindowObject *window,
|
|
|
|
gdouble offscreen_x,
|
|
|
|
gdouble offscreen_y,
|
|
|
|
gdouble *embedder_x,
|
|
|
|
gdouble *embedder_y)
|
|
|
|
{
|
|
|
|
g_signal_emit (window, signals[TO_EMBEDDER], 0,
|
|
|
|
offscreen_x, offscreen_y,
|
|
|
|
embedder_x, embedder_y);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
from_embedder (GdkWindowObject *window,
|
|
|
|
gdouble embedder_x,
|
|
|
|
gdouble embedder_y,
|
|
|
|
gdouble *offscreen_x,
|
|
|
|
gdouble *offscreen_y)
|
|
|
|
{
|
|
|
|
g_signal_emit (window, signals[FROM_EMBEDDER], 0,
|
|
|
|
embedder_x, embedder_y,
|
|
|
|
offscreen_x, offscreen_y);
|
|
|
|
}
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_get_position:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @x: X coordinate of window
|
|
|
|
* @y: Y coordinate of window
|
|
|
|
*
|
2002-01-13 20:13:34 +00:00
|
|
|
* Obtains the position of the window as reported in the
|
|
|
|
* most-recently-processed #GdkEventConfigure. Contrast with
|
|
|
|
* gdk_window_get_geometry() which queries the X server for the
|
|
|
|
* current window position, regardless of which events have been
|
|
|
|
* received or processed.
|
2001-10-03 18:19:48 +00:00
|
|
|
*
|
|
|
|
* The position coordinates are relative to the window's parent window.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
**/
|
1997-11-24 22:37:52 +00:00
|
|
|
void
|
|
|
|
gdk_window_get_position (GdkWindow *window,
|
|
|
|
gint *x,
|
|
|
|
gint *y)
|
1999-11-08 20:14:59 +00:00
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowObject *obj;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
1999-11-08 20:14:59 +00:00
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
obj = (GdkWindowObject*) window;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
1999-11-08 20:14:59 +00:00
|
|
|
if (x)
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
*x = obj->x;
|
1999-11-08 20:14:59 +00:00
|
|
|
if (y)
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
*y = obj->y;
|
1997-11-24 22:37:52 +00:00
|
|
|
}
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_get_parent:
|
|
|
|
* @window: a #GdkWindow
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
* Obtains the parent of @window, as known to GDK. Does not query the
|
|
|
|
* X server; thus this returns the parent as passed to gdk_window_new(),
|
|
|
|
* not the actual parent. This should never matter unless you're using
|
|
|
|
* Xlib calls mixed with GDK calls on the X11 platform. It may also
|
|
|
|
* matter for toplevel windows, because the window manager may choose
|
|
|
|
* to reparent them.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2010-04-15 10:59:44 +00:00
|
|
|
* Note that you should use gdk_window_get_effective_parent() when
|
|
|
|
* writing generic code that walks up a window hierarchy, because
|
|
|
|
* gdk_window_get_parent() will most likely not do what you expect if
|
|
|
|
* there are offscreen windows in the hierarchy.
|
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
* Return value: parent of @window
|
|
|
|
**/
|
1999-11-08 20:14:59 +00:00
|
|
|
GdkWindow*
|
|
|
|
gdk_window_get_parent (GdkWindow *window)
|
1998-11-06 22:05:02 +00:00
|
|
|
{
|
1999-11-08 20:14:59 +00:00
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
return (GdkWindow*) ((GdkWindowObject*) window)->parent;
|
1998-11-06 22:05:02 +00:00
|
|
|
}
|
|
|
|
|
2010-04-15 10:59:44 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_get_effective_parent:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
*
|
|
|
|
* Obtains the parent of @window, as known to GDK. Works like
|
|
|
|
* gdk_window_get_parent() for normal windows, but returns the
|
|
|
|
* window's embedder for offscreen windows.
|
|
|
|
*
|
|
|
|
* See also: gdk_offscreen_window_get_embedder()
|
|
|
|
*
|
|
|
|
* Return value: effective parent of @window
|
|
|
|
*
|
|
|
|
* Since: 2.22
|
|
|
|
**/
|
|
|
|
GdkWindow *
|
|
|
|
gdk_window_get_effective_parent (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *obj;
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
|
|
|
obj = (GdkWindowObject *)window;
|
|
|
|
|
2010-04-15 11:08:47 +00:00
|
|
|
if (gdk_window_is_offscreen (obj))
|
2010-04-15 10:59:44 +00:00
|
|
|
return gdk_offscreen_window_get_embedder (window);
|
|
|
|
else
|
|
|
|
return (GdkWindow *) obj->parent;
|
|
|
|
}
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_get_toplevel:
|
|
|
|
* @window: a #GdkWindow
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
* Gets the toplevel window that's an ancestor of @window.
|
2009-01-28 15:37:56 +00:00
|
|
|
*
|
|
|
|
* Any window type but %GDK_WINDOW_CHILD is considered a
|
|
|
|
* toplevel window, as is a %GDK_WINDOW_CHILD window that
|
2009-06-01 10:04:36 +00:00
|
|
|
* has a root window as parent.
|
|
|
|
*
|
2010-04-15 10:59:44 +00:00
|
|
|
* Note that you should use gdk_window_get_effective_toplevel() when
|
|
|
|
* you want to get to a window's toplevel as seen on screen, because
|
|
|
|
* gdk_window_get_toplevel() will most likely not do what you expect
|
|
|
|
* if there are offscreen windows in the hierarchy.
|
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
* Return value: the toplevel window containing @window
|
|
|
|
**/
|
2010-04-15 10:59:44 +00:00
|
|
|
GdkWindow *
|
1999-11-08 20:14:59 +00:00
|
|
|
gdk_window_get_toplevel (GdkWindow *window)
|
1997-11-24 22:37:52 +00:00
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowObject *obj;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
1999-11-08 20:14:59 +00:00
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
obj = (GdkWindowObject *)window;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-07-18 13:04:06 +00:00
|
|
|
while (obj->window_type == GDK_WINDOW_CHILD)
|
2009-01-28 15:37:56 +00:00
|
|
|
{
|
2009-08-31 08:59:21 +00:00
|
|
|
if (gdk_window_is_toplevel (obj))
|
2009-01-28 15:37:56 +00:00
|
|
|
break;
|
|
|
|
obj = obj->parent;
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
return GDK_WINDOW (obj);
|
|
|
|
}
|
|
|
|
|
2010-04-15 10:59:44 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_get_effective_toplevel:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
*
|
|
|
|
* Gets the toplevel window that's an ancestor of @window.
|
|
|
|
*
|
|
|
|
* Works like gdk_window_get_toplevel(), but treats an offscreen window's
|
|
|
|
* embedder as its parent, using gdk_window_get_effective_parent().
|
|
|
|
*
|
|
|
|
* See also: gdk_offscreen_window_get_embedder()
|
|
|
|
*
|
|
|
|
* Return value: the effective toplevel window containing @window
|
|
|
|
*
|
|
|
|
* Since: 2.22
|
|
|
|
**/
|
|
|
|
GdkWindow *
|
|
|
|
gdk_window_get_effective_toplevel (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindow *parent;
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
|
|
|
while ((parent = gdk_window_get_effective_parent (window)) != NULL &&
|
|
|
|
(gdk_window_get_window_type (parent) != GDK_WINDOW_ROOT))
|
|
|
|
window = parent;
|
|
|
|
|
|
|
|
return window;
|
|
|
|
}
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_get_children:
|
|
|
|
* @window: a #GdkWindow
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
* Gets the list of children of @window known to GDK.
|
|
|
|
* This function only returns children created via GDK,
|
|
|
|
* so for example it's useless when used with the root window;
|
|
|
|
* it only returns windows an application created itself.
|
|
|
|
*
|
|
|
|
* The returned list must be freed, but the elements in the
|
|
|
|
* list need not be.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
* Return value: list of child windows inside @window
|
|
|
|
**/
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GList*
|
|
|
|
gdk_window_get_children (GdkWindow *window)
|
|
|
|
{
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
return g_list_copy (GDK_WINDOW_OBJECT (window)->children);
|
|
|
|
}
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_peek_children:
|
|
|
|
* @window: a #GdkWindow
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
* Like gdk_window_get_children(), but does not copy the list of
|
|
|
|
* children, so the list does not need to be freed.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
* Return value: a reference to the list of child windows in @window
|
|
|
|
**/
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GList *
|
2001-10-03 18:19:48 +00:00
|
|
|
gdk_window_peek_children (GdkWindow *window)
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
{
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
return GDK_WINDOW_OBJECT (window)->children;
|
1997-11-24 22:37:52 +00:00
|
|
|
}
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_add_filter:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @function: filter callback
|
|
|
|
* @data: data to pass to filter callback
|
|
|
|
*
|
|
|
|
* Adds an event filter to @window, allowing you to intercept events
|
2002-01-13 20:13:34 +00:00
|
|
|
* before they reach GDK. This is a low-level operation and makes it
|
|
|
|
* easy to break GDK and/or GTK+, so you have to know what you're
|
2002-01-21 05:58:33 +00:00
|
|
|
* doing. Pass %NULL for @window to get all events for all windows,
|
|
|
|
* instead of events for a specific window.
|
2007-03-12 06:26:34 +00:00
|
|
|
*
|
|
|
|
* See gdk_display_add_client_message_filter() if you are interested
|
|
|
|
* in X ClientMessage events.
|
2001-10-03 18:19:48 +00:00
|
|
|
**/
|
2009-06-01 10:04:36 +00:00
|
|
|
void
|
1999-02-10 08:06:30 +00:00
|
|
|
gdk_window_add_filter (GdkWindow *window,
|
|
|
|
GdkFilterFunc function,
|
|
|
|
gpointer data)
|
1997-12-18 02:17:14 +00:00
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowObject *private;
|
1997-12-18 02:17:14 +00:00
|
|
|
GList *tmp_list;
|
|
|
|
GdkEventFilter *filter;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2001-04-02 23:33:47 +00:00
|
|
|
g_return_if_fail (window == NULL || GDK_IS_WINDOW (window));
|
1999-10-03 22:12:41 +00:00
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
private = (GdkWindowObject*) window;
|
|
|
|
if (private && GDK_WINDOW_DESTROYED (window))
|
1998-01-26 01:20:14 +00:00
|
|
|
return;
|
2008-12-03 21:00:56 +00:00
|
|
|
|
|
|
|
/* Filters are for the native events on the native window, so
|
|
|
|
ensure there is a native window. */
|
|
|
|
if (window)
|
2009-06-01 09:57:59 +00:00
|
|
|
gdk_window_ensure_native (window);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
1999-02-10 08:06:30 +00:00
|
|
|
if (private)
|
1998-03-01 22:37:30 +00:00
|
|
|
tmp_list = private->filters;
|
|
|
|
else
|
Make gdkx.h the only installed header from gdk/x11. All structures in
Fri Sep 7 11:51:44 2001 Owen Taylor <otaylor@redhat.com>
Make gdkx.h the only installed header from gdk/x11.
All structures in gdk/x11 are opaque.
* gdk/x11/Makefile.am gdk/x11/gdkx.h gdk/x11/gdkprivate-x11.h:
Don't install gdk{drawable,pixmap,window}-x11.h.
* gdk/x11/{gdkcolormap-x11.c, gdkfont-x11.c, gdkx.h, gdkvisual-x11.c:
Move GdkColormapPrivateX11, GdkFontPrivateX GdkImagePrivateX11,
GdkVisualClass into C files.
* gdk/gdkpixmap-x11.[ch]: Make gdk_pixmap_impl_get_type() static.
* gdk/x11/{gdkcolor-x11.c, gdkcursor-x11.c, gdkdrawable-x11.c,
gdkfont-x11.c, gdkgc-x11.c, gdkx.h, gdkimage-x11,gdkvisual-x11.c}
Add public functions to replace previously exported direct
structure access.
gdk_x11_colormap_get_{xdisplay,xcolormap}
gdk_x11_cursor_get_{xdisplay,xcursor},
gdk_x11_drawable_get_{xdisplay,xcursor,gdk_x11_visual_get_xvisual,
gdk_x11_font_get_{xdisplay,xfont}, gdk_x11_image_get_{xdisplay,ximage},
gdk_x11_gc_get_{xdisplay,ximage}
* gdk/gdkprivate.h gdk/gdkinternals.h: Move GdkColorInfo,
GdkEventFilter, GdkClientFilter, GdkFontPrivate to gdkinternals.
Fix a number of variables and functions that were exported
"accidentally" from GDK.
* gdk/**.[ch]: gdk => _gdk for gdk_visual_init,
gdk_events_init, gdk_input_init, gdk_dnd_init, gdk_image_exit,
gdk_input_exit, gdk_windowing_exit, gdk_event_func, gdk_event_data,
gdk_event_notify, gdk_queued_events, gdk_queued_tail,
gdk_event_new, gdk_events_queue, gdk_events_unqueue,
gdk_event_queue_find_first, gdk_event_queue_remove_link,
gdk_event_queue_append, gdk_event_button_generate,
gdk_debug_flags, gdk_default_filters, gdk_parent_root.
* gdk/x11/{gdkevents-x11.c, gdkglobals-x11.c, gdkimage-x11.c,
gdkmain-x11.c, gdkprivate-x11.h, gdk/x11/gdkwindow-x11.c}:
gdk => _gdk for gdk_event_mask_table, gkd_nevent_masks,
gdk_wm_window_protocols, gdk_leader_window, gdk_xgrab_window,
gdk_use_xshm, gdk_input_ignore_core.
* gdk/x11/xsettings-common.h (xsettings_list_insert): Add
#defines to namespace functions into the private _gdk_
namespace.
* gdk/gdkwindow.[ch] gdk/x11/gdkx.h: Add gdk_get_default_root_window ()
to replace gdk_parent_root exported variable. Adjust and
deprecate GDK_ROOT_PARENT().
* demos/{testpixbuf-drawable.c,testpixbuf-save.c}: Fix
GDK_ROOT_PARENT usage, remove includes of port-specific
headers.
* gdk/{win32,x11,fb}/gdkinput*.[ch]: s/gdk/_gdk/ for
_gdk_input_gxid_host, _gdk_input_gxid_port, _gdk_input_ignore_core,
gdk_input_devices, _gdk_input_windows, gdk_init_input_core.
* gdk/x11/{gdkevents-x11.,c gdkglobals-x11.c, gdkmain-x11.c}
docs/Changes-2.0.txt: Remove gdk_wm_protocols,
gdk_wm_delete_window functions, gdk_wm_take_focus,
use gdk_atom_intern() instead.
* gdk/linux-fb/{gdkselection-fb.c, gdkmain-fb.c, gdkprivatefb.h}
gdk/win32/{gdkselection-win32.c, gdkmgdkwin32.h, gdkprivate-win32.h}
gdk/x11/{gdkselection-x11.c gdkx.h, gtkprivate-x11.h}
gtk/gtkselection.c
Unexport gdk_selection_property, just use
gdk_atom_intern ("GDK_SELECTION").
* gdk/x11/{gdkprivate-x11.h,gdkdrawable-x11h,gdkgc-x11.c,gdkx.h}:
Unexport gdk_drawable_impl_x11_get_type, gdk_gc_x11_get_type,
GDK_GC_X11 cast macros, GdkGCX11 structures, GdkCursorPrivate,
GdkVisualprivate, gdk_x11_gc_flush.
Make a number of public exports of variables into functions
to increase encapsulation.
* gdk/gdkinternals.h gdk/gdkinput.h gdk/gdkevents.h
gdk/linux-fb/gdkmouse-fb.c: gdk_core_pointer => _gdk_core_pointer,
move to gdkinternals.h. Add gdk_device_get_core_pointer ().
* gdk/gdkprivate.h gdk/gdkpango.c gdk/gdkinternals.h
docs/Changes-2.0.txt: Unexport gdk_parent_root, gdk_error_code,
gdk_error_warnings.
* gdk/x11/{gdkcolormap-x11.c, gdkmain-x11.c, gdkx.h}
docs/Changes-2.0.txt:
s/gdk_screen/_gdk_screen/, add gdk_x11_get_default_screen()
s/gdk_root_window/_gdk_root_window/, add gdk_x11_get_default_root_xwindow()
Add gdk_x11_get_default_xdisplay().
* gdk/gdk.h gdk/gdk.c linux-fb/gdkfb.h linux-fb/gdkglobals-fb.c
win32/gdkwin32.h x11/gdkglobals-x11.c gdk/x11/gdkmain-x11.c
gdk/x11/gdkx.h: gdk/gdk.def: Add gdk_get/set_program_class,
Don't export gdk_progclass, move --class command line
option and handling to common portion of GDK.
Miscellaneous fixes:
* gdk/x11/gdkwindow-x11.c (gdk_window_set_icon_list): Fix
g_return_val_if_fail that should have been g_return_if_fail.
* gdk/gdkinternals.h gdk/gdkprivate.h: Move
gdk_synthesize_window_state() to the semi-public gdkprivate.h.
* gtk/gtkdnd.c (_gtk_drag_source_handle_event): Remove uneeded
X11 dependency.
* gdk/linux-fb/gdkmain-fb.c gdk/win32/gdkmain-win32.c gdk/TODO:
Remove unused gdk_key_repeat_disable/restore.
* linux-fb/gdkglobals-fb.c win32/gdkglobals-win32.c
x11/gdkglobals-x11.c x11/gdkprivate-x11.h gdk/gdk.def:
Remove unused gdk_null_window_warnings variable.
* gdk/Makefile.am (DIST_SUBDIRS) nanox/*: cvs remove nanox;
it can be retrieved from the repository; it is too far
from functional to be worth having people check out;
it would be easier to start from scratch, I suspect.
* gdk/x11/gdkpixmap-x11.c: Fix lvalue usage of GDK_PIXMAP_XID().
* gdk/x11/gdkkeys-x11.c gdk/gdkrgb.c gdk/gdkwindow.c
gdk/x11/gdkpango-x11.c gdk/x11/gdkselection-x11.c:
Fix some accidentally global variables and unused global variables.
* gdk/x11/gdkkeys-x11.c gdk/gdkrgb.c gdk/gdkwindow.c
gdk/x11/gdkpango-x11.c gdk/x11/gdkselection-x11.c:
Fix some accidentally global variables and unused global variables.
Add some space for future expansion to multihead.
* gdk/gdkdrawable.h: Add four reserved function pointers
for future expansion of GdkDrawableClass.
* gtk/gtkwindow.h gtk/gtkinvisible.h: Add reserved pointer
where we can put a GdkScreen * later.
2001-09-07 21:50:20 +00:00
|
|
|
tmp_list = _gdk_default_filters;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
1997-12-18 02:17:14 +00:00
|
|
|
while (tmp_list)
|
|
|
|
{
|
|
|
|
filter = (GdkEventFilter *)tmp_list->data;
|
|
|
|
if ((filter->function == function) && (filter->data == data))
|
|
|
|
return;
|
|
|
|
tmp_list = tmp_list->next;
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
1997-12-18 02:17:14 +00:00
|
|
|
filter = g_new (GdkEventFilter, 1);
|
|
|
|
filter->function = function;
|
|
|
|
filter->data = data;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
1999-02-10 08:06:30 +00:00
|
|
|
if (private)
|
1998-03-01 22:37:30 +00:00
|
|
|
private->filters = g_list_append (private->filters, filter);
|
|
|
|
else
|
Make gdkx.h the only installed header from gdk/x11. All structures in
Fri Sep 7 11:51:44 2001 Owen Taylor <otaylor@redhat.com>
Make gdkx.h the only installed header from gdk/x11.
All structures in gdk/x11 are opaque.
* gdk/x11/Makefile.am gdk/x11/gdkx.h gdk/x11/gdkprivate-x11.h:
Don't install gdk{drawable,pixmap,window}-x11.h.
* gdk/x11/{gdkcolormap-x11.c, gdkfont-x11.c, gdkx.h, gdkvisual-x11.c:
Move GdkColormapPrivateX11, GdkFontPrivateX GdkImagePrivateX11,
GdkVisualClass into C files.
* gdk/gdkpixmap-x11.[ch]: Make gdk_pixmap_impl_get_type() static.
* gdk/x11/{gdkcolor-x11.c, gdkcursor-x11.c, gdkdrawable-x11.c,
gdkfont-x11.c, gdkgc-x11.c, gdkx.h, gdkimage-x11,gdkvisual-x11.c}
Add public functions to replace previously exported direct
structure access.
gdk_x11_colormap_get_{xdisplay,xcolormap}
gdk_x11_cursor_get_{xdisplay,xcursor},
gdk_x11_drawable_get_{xdisplay,xcursor,gdk_x11_visual_get_xvisual,
gdk_x11_font_get_{xdisplay,xfont}, gdk_x11_image_get_{xdisplay,ximage},
gdk_x11_gc_get_{xdisplay,ximage}
* gdk/gdkprivate.h gdk/gdkinternals.h: Move GdkColorInfo,
GdkEventFilter, GdkClientFilter, GdkFontPrivate to gdkinternals.
Fix a number of variables and functions that were exported
"accidentally" from GDK.
* gdk/**.[ch]: gdk => _gdk for gdk_visual_init,
gdk_events_init, gdk_input_init, gdk_dnd_init, gdk_image_exit,
gdk_input_exit, gdk_windowing_exit, gdk_event_func, gdk_event_data,
gdk_event_notify, gdk_queued_events, gdk_queued_tail,
gdk_event_new, gdk_events_queue, gdk_events_unqueue,
gdk_event_queue_find_first, gdk_event_queue_remove_link,
gdk_event_queue_append, gdk_event_button_generate,
gdk_debug_flags, gdk_default_filters, gdk_parent_root.
* gdk/x11/{gdkevents-x11.c, gdkglobals-x11.c, gdkimage-x11.c,
gdkmain-x11.c, gdkprivate-x11.h, gdk/x11/gdkwindow-x11.c}:
gdk => _gdk for gdk_event_mask_table, gkd_nevent_masks,
gdk_wm_window_protocols, gdk_leader_window, gdk_xgrab_window,
gdk_use_xshm, gdk_input_ignore_core.
* gdk/x11/xsettings-common.h (xsettings_list_insert): Add
#defines to namespace functions into the private _gdk_
namespace.
* gdk/gdkwindow.[ch] gdk/x11/gdkx.h: Add gdk_get_default_root_window ()
to replace gdk_parent_root exported variable. Adjust and
deprecate GDK_ROOT_PARENT().
* demos/{testpixbuf-drawable.c,testpixbuf-save.c}: Fix
GDK_ROOT_PARENT usage, remove includes of port-specific
headers.
* gdk/{win32,x11,fb}/gdkinput*.[ch]: s/gdk/_gdk/ for
_gdk_input_gxid_host, _gdk_input_gxid_port, _gdk_input_ignore_core,
gdk_input_devices, _gdk_input_windows, gdk_init_input_core.
* gdk/x11/{gdkevents-x11.,c gdkglobals-x11.c, gdkmain-x11.c}
docs/Changes-2.0.txt: Remove gdk_wm_protocols,
gdk_wm_delete_window functions, gdk_wm_take_focus,
use gdk_atom_intern() instead.
* gdk/linux-fb/{gdkselection-fb.c, gdkmain-fb.c, gdkprivatefb.h}
gdk/win32/{gdkselection-win32.c, gdkmgdkwin32.h, gdkprivate-win32.h}
gdk/x11/{gdkselection-x11.c gdkx.h, gtkprivate-x11.h}
gtk/gtkselection.c
Unexport gdk_selection_property, just use
gdk_atom_intern ("GDK_SELECTION").
* gdk/x11/{gdkprivate-x11.h,gdkdrawable-x11h,gdkgc-x11.c,gdkx.h}:
Unexport gdk_drawable_impl_x11_get_type, gdk_gc_x11_get_type,
GDK_GC_X11 cast macros, GdkGCX11 structures, GdkCursorPrivate,
GdkVisualprivate, gdk_x11_gc_flush.
Make a number of public exports of variables into functions
to increase encapsulation.
* gdk/gdkinternals.h gdk/gdkinput.h gdk/gdkevents.h
gdk/linux-fb/gdkmouse-fb.c: gdk_core_pointer => _gdk_core_pointer,
move to gdkinternals.h. Add gdk_device_get_core_pointer ().
* gdk/gdkprivate.h gdk/gdkpango.c gdk/gdkinternals.h
docs/Changes-2.0.txt: Unexport gdk_parent_root, gdk_error_code,
gdk_error_warnings.
* gdk/x11/{gdkcolormap-x11.c, gdkmain-x11.c, gdkx.h}
docs/Changes-2.0.txt:
s/gdk_screen/_gdk_screen/, add gdk_x11_get_default_screen()
s/gdk_root_window/_gdk_root_window/, add gdk_x11_get_default_root_xwindow()
Add gdk_x11_get_default_xdisplay().
* gdk/gdk.h gdk/gdk.c linux-fb/gdkfb.h linux-fb/gdkglobals-fb.c
win32/gdkwin32.h x11/gdkglobals-x11.c gdk/x11/gdkmain-x11.c
gdk/x11/gdkx.h: gdk/gdk.def: Add gdk_get/set_program_class,
Don't export gdk_progclass, move --class command line
option and handling to common portion of GDK.
Miscellaneous fixes:
* gdk/x11/gdkwindow-x11.c (gdk_window_set_icon_list): Fix
g_return_val_if_fail that should have been g_return_if_fail.
* gdk/gdkinternals.h gdk/gdkprivate.h: Move
gdk_synthesize_window_state() to the semi-public gdkprivate.h.
* gtk/gtkdnd.c (_gtk_drag_source_handle_event): Remove uneeded
X11 dependency.
* gdk/linux-fb/gdkmain-fb.c gdk/win32/gdkmain-win32.c gdk/TODO:
Remove unused gdk_key_repeat_disable/restore.
* linux-fb/gdkglobals-fb.c win32/gdkglobals-win32.c
x11/gdkglobals-x11.c x11/gdkprivate-x11.h gdk/gdk.def:
Remove unused gdk_null_window_warnings variable.
* gdk/Makefile.am (DIST_SUBDIRS) nanox/*: cvs remove nanox;
it can be retrieved from the repository; it is too far
from functional to be worth having people check out;
it would be easier to start from scratch, I suspect.
* gdk/x11/gdkpixmap-x11.c: Fix lvalue usage of GDK_PIXMAP_XID().
* gdk/x11/gdkkeys-x11.c gdk/gdkrgb.c gdk/gdkwindow.c
gdk/x11/gdkpango-x11.c gdk/x11/gdkselection-x11.c:
Fix some accidentally global variables and unused global variables.
* gdk/x11/gdkkeys-x11.c gdk/gdkrgb.c gdk/gdkwindow.c
gdk/x11/gdkpango-x11.c gdk/x11/gdkselection-x11.c:
Fix some accidentally global variables and unused global variables.
Add some space for future expansion to multihead.
* gdk/gdkdrawable.h: Add four reserved function pointers
for future expansion of GdkDrawableClass.
* gtk/gtkwindow.h gtk/gtkinvisible.h: Add reserved pointer
where we can put a GdkScreen * later.
2001-09-07 21:50:20 +00:00
|
|
|
_gdk_default_filters = g_list_append (_gdk_default_filters, filter);
|
1997-12-18 02:17:14 +00:00
|
|
|
}
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_remove_filter:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @function: previously-added filter function
|
|
|
|
* @data: user data for previously-added filter function
|
|
|
|
*
|
|
|
|
* Remove a filter previously added with gdk_window_add_filter().
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
**/
|
1997-12-18 02:17:14 +00:00
|
|
|
void
|
1999-02-10 08:06:30 +00:00
|
|
|
gdk_window_remove_filter (GdkWindow *window,
|
|
|
|
GdkFilterFunc function,
|
|
|
|
gpointer data)
|
1997-12-18 02:17:14 +00:00
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowObject *private;
|
Added a modular client-message-filter mechanism, that is used for the DND
Sun Oct 18 18:16:39 1998 Owen Taylor <otaylor@gtk.org>
* gdk/gdk.c gdkprivate.h: Added a modular client-message-filter
mechanism, that is used for the DND messages.
Removed all the old DND code.
* gdk/gdkcolormap.c gdk/gdkcolormap.h: Add a function to
get the visual of a given colormap.
* gtk/gtkcolorsel.c: Conversion to new DND, drag
a color-swatch.
* gdk/gdk.h gdk/gdkdnd.c: The low-level
X oriented portions of drag and drop protocols.
Sending and receiving client messages, and navigating
window trees.
* gdk/gdkimage.c: added a gdk_flush() when destroying
SHM images to hopefully make it more likely that
X will gracefully handle the segment being destroyed.
* gdk/gdkprivate.h gtk/gtkdebug.h: Add new
DND debugging flags.
* gtk/gtkeditable.[ch]: Updates for the selection handling
changes.
* gtk/gtkselection.[ch]: Added GtkTargetList, a
refcounted data structure for keeping track of lists
of GdkAtom + information. Removed selection_handler_add
in favor of a "drag_data_get" signal.
* gtk/gtkdnd.[ch] gtk/gtk.h: New files - highlevel (event loop
dependent) parts of the DND protocols, display of drag icons,
drag-under highlighting, and the "default handlers".
* gtk/gtkinvisible.[ch]: New widget - InputOnly offscreen
windows that are used for reliable pointer grabs and
selection handling in the DND code.
* gtk/testdnd.c: New test program for new DND. (Old
DND tests in testgtk still need to be converted.)
* gtk/testselection.c: Use the new selection API.
* docs/dnd_internals: Start at describing how
all the new code works inside.
* docs/Changes-1.2.txt: New file describing source-incompatible
changes in GTK+-1.2.
Sat Oct 17 22:50:34 1998 Owen Taylor <otaylor@gtk.org>
* gdk/gdkwindow.c (gdk_window_remove_filter): Free
the right list node.
* gdk/gdkwindow.c (gdk_window_init): Add gdk_root_parent
to the XID table so we can receive events on it.
Wed Oct 14 12:57:40 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdk.c gdk/gdk.h (gdk_event_get_time): New function
to get the timestamp from a generic event.
Fri Oct 9 13:16:04 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_add_events): Added function
that safely adds additional events to a widget's event
mask, even if the widget has previously been realized.
(We can do this, but not remove events from the event
mask).
Fri Oct 2 17:35:35 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdkproperty.c (gdk_property_get): Allow type == 0,
for AnyPropertyType.
Fri Oct 2 10:32:21 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdkproperty.c (gdk_atom_intern): Add client-local
hashing.
Thu Sep 24 20:33:54 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdk.c (gdk_event_send_clientmessage_toall): serial
isn't a timestamp.
Thu Sep 17 14:23:03 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdk.c (gdk_event_translate): Removed printing
of unknown window lookup warnings. (Made it
a GDK_NOTE) - they happen in many circumstances.
1998-10-18 22:51:24 +00:00
|
|
|
GList *tmp_list, *node;
|
1997-12-18 02:17:14 +00:00
|
|
|
GdkEventFilter *filter;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2001-04-02 23:33:47 +00:00
|
|
|
g_return_if_fail (window == NULL || GDK_IS_WINDOW (window));
|
1999-10-03 22:12:41 +00:00
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
private = (GdkWindowObject*) window;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
1999-02-10 08:06:30 +00:00
|
|
|
if (private)
|
1998-03-01 22:37:30 +00:00
|
|
|
tmp_list = private->filters;
|
|
|
|
else
|
Make gdkx.h the only installed header from gdk/x11. All structures in
Fri Sep 7 11:51:44 2001 Owen Taylor <otaylor@redhat.com>
Make gdkx.h the only installed header from gdk/x11.
All structures in gdk/x11 are opaque.
* gdk/x11/Makefile.am gdk/x11/gdkx.h gdk/x11/gdkprivate-x11.h:
Don't install gdk{drawable,pixmap,window}-x11.h.
* gdk/x11/{gdkcolormap-x11.c, gdkfont-x11.c, gdkx.h, gdkvisual-x11.c:
Move GdkColormapPrivateX11, GdkFontPrivateX GdkImagePrivateX11,
GdkVisualClass into C files.
* gdk/gdkpixmap-x11.[ch]: Make gdk_pixmap_impl_get_type() static.
* gdk/x11/{gdkcolor-x11.c, gdkcursor-x11.c, gdkdrawable-x11.c,
gdkfont-x11.c, gdkgc-x11.c, gdkx.h, gdkimage-x11,gdkvisual-x11.c}
Add public functions to replace previously exported direct
structure access.
gdk_x11_colormap_get_{xdisplay,xcolormap}
gdk_x11_cursor_get_{xdisplay,xcursor},
gdk_x11_drawable_get_{xdisplay,xcursor,gdk_x11_visual_get_xvisual,
gdk_x11_font_get_{xdisplay,xfont}, gdk_x11_image_get_{xdisplay,ximage},
gdk_x11_gc_get_{xdisplay,ximage}
* gdk/gdkprivate.h gdk/gdkinternals.h: Move GdkColorInfo,
GdkEventFilter, GdkClientFilter, GdkFontPrivate to gdkinternals.
Fix a number of variables and functions that were exported
"accidentally" from GDK.
* gdk/**.[ch]: gdk => _gdk for gdk_visual_init,
gdk_events_init, gdk_input_init, gdk_dnd_init, gdk_image_exit,
gdk_input_exit, gdk_windowing_exit, gdk_event_func, gdk_event_data,
gdk_event_notify, gdk_queued_events, gdk_queued_tail,
gdk_event_new, gdk_events_queue, gdk_events_unqueue,
gdk_event_queue_find_first, gdk_event_queue_remove_link,
gdk_event_queue_append, gdk_event_button_generate,
gdk_debug_flags, gdk_default_filters, gdk_parent_root.
* gdk/x11/{gdkevents-x11.c, gdkglobals-x11.c, gdkimage-x11.c,
gdkmain-x11.c, gdkprivate-x11.h, gdk/x11/gdkwindow-x11.c}:
gdk => _gdk for gdk_event_mask_table, gkd_nevent_masks,
gdk_wm_window_protocols, gdk_leader_window, gdk_xgrab_window,
gdk_use_xshm, gdk_input_ignore_core.
* gdk/x11/xsettings-common.h (xsettings_list_insert): Add
#defines to namespace functions into the private _gdk_
namespace.
* gdk/gdkwindow.[ch] gdk/x11/gdkx.h: Add gdk_get_default_root_window ()
to replace gdk_parent_root exported variable. Adjust and
deprecate GDK_ROOT_PARENT().
* demos/{testpixbuf-drawable.c,testpixbuf-save.c}: Fix
GDK_ROOT_PARENT usage, remove includes of port-specific
headers.
* gdk/{win32,x11,fb}/gdkinput*.[ch]: s/gdk/_gdk/ for
_gdk_input_gxid_host, _gdk_input_gxid_port, _gdk_input_ignore_core,
gdk_input_devices, _gdk_input_windows, gdk_init_input_core.
* gdk/x11/{gdkevents-x11.,c gdkglobals-x11.c, gdkmain-x11.c}
docs/Changes-2.0.txt: Remove gdk_wm_protocols,
gdk_wm_delete_window functions, gdk_wm_take_focus,
use gdk_atom_intern() instead.
* gdk/linux-fb/{gdkselection-fb.c, gdkmain-fb.c, gdkprivatefb.h}
gdk/win32/{gdkselection-win32.c, gdkmgdkwin32.h, gdkprivate-win32.h}
gdk/x11/{gdkselection-x11.c gdkx.h, gtkprivate-x11.h}
gtk/gtkselection.c
Unexport gdk_selection_property, just use
gdk_atom_intern ("GDK_SELECTION").
* gdk/x11/{gdkprivate-x11.h,gdkdrawable-x11h,gdkgc-x11.c,gdkx.h}:
Unexport gdk_drawable_impl_x11_get_type, gdk_gc_x11_get_type,
GDK_GC_X11 cast macros, GdkGCX11 structures, GdkCursorPrivate,
GdkVisualprivate, gdk_x11_gc_flush.
Make a number of public exports of variables into functions
to increase encapsulation.
* gdk/gdkinternals.h gdk/gdkinput.h gdk/gdkevents.h
gdk/linux-fb/gdkmouse-fb.c: gdk_core_pointer => _gdk_core_pointer,
move to gdkinternals.h. Add gdk_device_get_core_pointer ().
* gdk/gdkprivate.h gdk/gdkpango.c gdk/gdkinternals.h
docs/Changes-2.0.txt: Unexport gdk_parent_root, gdk_error_code,
gdk_error_warnings.
* gdk/x11/{gdkcolormap-x11.c, gdkmain-x11.c, gdkx.h}
docs/Changes-2.0.txt:
s/gdk_screen/_gdk_screen/, add gdk_x11_get_default_screen()
s/gdk_root_window/_gdk_root_window/, add gdk_x11_get_default_root_xwindow()
Add gdk_x11_get_default_xdisplay().
* gdk/gdk.h gdk/gdk.c linux-fb/gdkfb.h linux-fb/gdkglobals-fb.c
win32/gdkwin32.h x11/gdkglobals-x11.c gdk/x11/gdkmain-x11.c
gdk/x11/gdkx.h: gdk/gdk.def: Add gdk_get/set_program_class,
Don't export gdk_progclass, move --class command line
option and handling to common portion of GDK.
Miscellaneous fixes:
* gdk/x11/gdkwindow-x11.c (gdk_window_set_icon_list): Fix
g_return_val_if_fail that should have been g_return_if_fail.
* gdk/gdkinternals.h gdk/gdkprivate.h: Move
gdk_synthesize_window_state() to the semi-public gdkprivate.h.
* gtk/gtkdnd.c (_gtk_drag_source_handle_event): Remove uneeded
X11 dependency.
* gdk/linux-fb/gdkmain-fb.c gdk/win32/gdkmain-win32.c gdk/TODO:
Remove unused gdk_key_repeat_disable/restore.
* linux-fb/gdkglobals-fb.c win32/gdkglobals-win32.c
x11/gdkglobals-x11.c x11/gdkprivate-x11.h gdk/gdk.def:
Remove unused gdk_null_window_warnings variable.
* gdk/Makefile.am (DIST_SUBDIRS) nanox/*: cvs remove nanox;
it can be retrieved from the repository; it is too far
from functional to be worth having people check out;
it would be easier to start from scratch, I suspect.
* gdk/x11/gdkpixmap-x11.c: Fix lvalue usage of GDK_PIXMAP_XID().
* gdk/x11/gdkkeys-x11.c gdk/gdkrgb.c gdk/gdkwindow.c
gdk/x11/gdkpango-x11.c gdk/x11/gdkselection-x11.c:
Fix some accidentally global variables and unused global variables.
* gdk/x11/gdkkeys-x11.c gdk/gdkrgb.c gdk/gdkwindow.c
gdk/x11/gdkpango-x11.c gdk/x11/gdkselection-x11.c:
Fix some accidentally global variables and unused global variables.
Add some space for future expansion to multihead.
* gdk/gdkdrawable.h: Add four reserved function pointers
for future expansion of GdkDrawableClass.
* gtk/gtkwindow.h gtk/gtkinvisible.h: Add reserved pointer
where we can put a GdkScreen * later.
2001-09-07 21:50:20 +00:00
|
|
|
tmp_list = _gdk_default_filters;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
1997-12-18 02:17:14 +00:00
|
|
|
while (tmp_list)
|
|
|
|
{
|
|
|
|
filter = (GdkEventFilter *)tmp_list->data;
|
Added a modular client-message-filter mechanism, that is used for the DND
Sun Oct 18 18:16:39 1998 Owen Taylor <otaylor@gtk.org>
* gdk/gdk.c gdkprivate.h: Added a modular client-message-filter
mechanism, that is used for the DND messages.
Removed all the old DND code.
* gdk/gdkcolormap.c gdk/gdkcolormap.h: Add a function to
get the visual of a given colormap.
* gtk/gtkcolorsel.c: Conversion to new DND, drag
a color-swatch.
* gdk/gdk.h gdk/gdkdnd.c: The low-level
X oriented portions of drag and drop protocols.
Sending and receiving client messages, and navigating
window trees.
* gdk/gdkimage.c: added a gdk_flush() when destroying
SHM images to hopefully make it more likely that
X will gracefully handle the segment being destroyed.
* gdk/gdkprivate.h gtk/gtkdebug.h: Add new
DND debugging flags.
* gtk/gtkeditable.[ch]: Updates for the selection handling
changes.
* gtk/gtkselection.[ch]: Added GtkTargetList, a
refcounted data structure for keeping track of lists
of GdkAtom + information. Removed selection_handler_add
in favor of a "drag_data_get" signal.
* gtk/gtkdnd.[ch] gtk/gtk.h: New files - highlevel (event loop
dependent) parts of the DND protocols, display of drag icons,
drag-under highlighting, and the "default handlers".
* gtk/gtkinvisible.[ch]: New widget - InputOnly offscreen
windows that are used for reliable pointer grabs and
selection handling in the DND code.
* gtk/testdnd.c: New test program for new DND. (Old
DND tests in testgtk still need to be converted.)
* gtk/testselection.c: Use the new selection API.
* docs/dnd_internals: Start at describing how
all the new code works inside.
* docs/Changes-1.2.txt: New file describing source-incompatible
changes in GTK+-1.2.
Sat Oct 17 22:50:34 1998 Owen Taylor <otaylor@gtk.org>
* gdk/gdkwindow.c (gdk_window_remove_filter): Free
the right list node.
* gdk/gdkwindow.c (gdk_window_init): Add gdk_root_parent
to the XID table so we can receive events on it.
Wed Oct 14 12:57:40 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdk.c gdk/gdk.h (gdk_event_get_time): New function
to get the timestamp from a generic event.
Fri Oct 9 13:16:04 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_add_events): Added function
that safely adds additional events to a widget's event
mask, even if the widget has previously been realized.
(We can do this, but not remove events from the event
mask).
Fri Oct 2 17:35:35 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdkproperty.c (gdk_property_get): Allow type == 0,
for AnyPropertyType.
Fri Oct 2 10:32:21 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdkproperty.c (gdk_atom_intern): Add client-local
hashing.
Thu Sep 24 20:33:54 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdk.c (gdk_event_send_clientmessage_toall): serial
isn't a timestamp.
Thu Sep 17 14:23:03 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdk.c (gdk_event_translate): Removed printing
of unknown window lookup warnings. (Made it
a GDK_NOTE) - they happen in many circumstances.
1998-10-18 22:51:24 +00:00
|
|
|
node = tmp_list;
|
1997-12-18 02:17:14 +00:00
|
|
|
tmp_list = tmp_list->next;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
1997-12-18 02:17:14 +00:00
|
|
|
if ((filter->function == function) && (filter->data == data))
|
|
|
|
{
|
1999-02-10 08:06:30 +00:00
|
|
|
if (private)
|
Added a modular client-message-filter mechanism, that is used for the DND
Sun Oct 18 18:16:39 1998 Owen Taylor <otaylor@gtk.org>
* gdk/gdk.c gdkprivate.h: Added a modular client-message-filter
mechanism, that is used for the DND messages.
Removed all the old DND code.
* gdk/gdkcolormap.c gdk/gdkcolormap.h: Add a function to
get the visual of a given colormap.
* gtk/gtkcolorsel.c: Conversion to new DND, drag
a color-swatch.
* gdk/gdk.h gdk/gdkdnd.c: The low-level
X oriented portions of drag and drop protocols.
Sending and receiving client messages, and navigating
window trees.
* gdk/gdkimage.c: added a gdk_flush() when destroying
SHM images to hopefully make it more likely that
X will gracefully handle the segment being destroyed.
* gdk/gdkprivate.h gtk/gtkdebug.h: Add new
DND debugging flags.
* gtk/gtkeditable.[ch]: Updates for the selection handling
changes.
* gtk/gtkselection.[ch]: Added GtkTargetList, a
refcounted data structure for keeping track of lists
of GdkAtom + information. Removed selection_handler_add
in favor of a "drag_data_get" signal.
* gtk/gtkdnd.[ch] gtk/gtk.h: New files - highlevel (event loop
dependent) parts of the DND protocols, display of drag icons,
drag-under highlighting, and the "default handlers".
* gtk/gtkinvisible.[ch]: New widget - InputOnly offscreen
windows that are used for reliable pointer grabs and
selection handling in the DND code.
* gtk/testdnd.c: New test program for new DND. (Old
DND tests in testgtk still need to be converted.)
* gtk/testselection.c: Use the new selection API.
* docs/dnd_internals: Start at describing how
all the new code works inside.
* docs/Changes-1.2.txt: New file describing source-incompatible
changes in GTK+-1.2.
Sat Oct 17 22:50:34 1998 Owen Taylor <otaylor@gtk.org>
* gdk/gdkwindow.c (gdk_window_remove_filter): Free
the right list node.
* gdk/gdkwindow.c (gdk_window_init): Add gdk_root_parent
to the XID table so we can receive events on it.
Wed Oct 14 12:57:40 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdk.c gdk/gdk.h (gdk_event_get_time): New function
to get the timestamp from a generic event.
Fri Oct 9 13:16:04 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_add_events): Added function
that safely adds additional events to a widget's event
mask, even if the widget has previously been realized.
(We can do this, but not remove events from the event
mask).
Fri Oct 2 17:35:35 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdkproperty.c (gdk_property_get): Allow type == 0,
for AnyPropertyType.
Fri Oct 2 10:32:21 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdkproperty.c (gdk_atom_intern): Add client-local
hashing.
Thu Sep 24 20:33:54 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdk.c (gdk_event_send_clientmessage_toall): serial
isn't a timestamp.
Thu Sep 17 14:23:03 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdk.c (gdk_event_translate): Removed printing
of unknown window lookup warnings. (Made it
a GDK_NOTE) - they happen in many circumstances.
1998-10-18 22:51:24 +00:00
|
|
|
private->filters = g_list_remove_link (private->filters, node);
|
1998-03-01 22:37:30 +00:00
|
|
|
else
|
Make gdkx.h the only installed header from gdk/x11. All structures in
Fri Sep 7 11:51:44 2001 Owen Taylor <otaylor@redhat.com>
Make gdkx.h the only installed header from gdk/x11.
All structures in gdk/x11 are opaque.
* gdk/x11/Makefile.am gdk/x11/gdkx.h gdk/x11/gdkprivate-x11.h:
Don't install gdk{drawable,pixmap,window}-x11.h.
* gdk/x11/{gdkcolormap-x11.c, gdkfont-x11.c, gdkx.h, gdkvisual-x11.c:
Move GdkColormapPrivateX11, GdkFontPrivateX GdkImagePrivateX11,
GdkVisualClass into C files.
* gdk/gdkpixmap-x11.[ch]: Make gdk_pixmap_impl_get_type() static.
* gdk/x11/{gdkcolor-x11.c, gdkcursor-x11.c, gdkdrawable-x11.c,
gdkfont-x11.c, gdkgc-x11.c, gdkx.h, gdkimage-x11,gdkvisual-x11.c}
Add public functions to replace previously exported direct
structure access.
gdk_x11_colormap_get_{xdisplay,xcolormap}
gdk_x11_cursor_get_{xdisplay,xcursor},
gdk_x11_drawable_get_{xdisplay,xcursor,gdk_x11_visual_get_xvisual,
gdk_x11_font_get_{xdisplay,xfont}, gdk_x11_image_get_{xdisplay,ximage},
gdk_x11_gc_get_{xdisplay,ximage}
* gdk/gdkprivate.h gdk/gdkinternals.h: Move GdkColorInfo,
GdkEventFilter, GdkClientFilter, GdkFontPrivate to gdkinternals.
Fix a number of variables and functions that were exported
"accidentally" from GDK.
* gdk/**.[ch]: gdk => _gdk for gdk_visual_init,
gdk_events_init, gdk_input_init, gdk_dnd_init, gdk_image_exit,
gdk_input_exit, gdk_windowing_exit, gdk_event_func, gdk_event_data,
gdk_event_notify, gdk_queued_events, gdk_queued_tail,
gdk_event_new, gdk_events_queue, gdk_events_unqueue,
gdk_event_queue_find_first, gdk_event_queue_remove_link,
gdk_event_queue_append, gdk_event_button_generate,
gdk_debug_flags, gdk_default_filters, gdk_parent_root.
* gdk/x11/{gdkevents-x11.c, gdkglobals-x11.c, gdkimage-x11.c,
gdkmain-x11.c, gdkprivate-x11.h, gdk/x11/gdkwindow-x11.c}:
gdk => _gdk for gdk_event_mask_table, gkd_nevent_masks,
gdk_wm_window_protocols, gdk_leader_window, gdk_xgrab_window,
gdk_use_xshm, gdk_input_ignore_core.
* gdk/x11/xsettings-common.h (xsettings_list_insert): Add
#defines to namespace functions into the private _gdk_
namespace.
* gdk/gdkwindow.[ch] gdk/x11/gdkx.h: Add gdk_get_default_root_window ()
to replace gdk_parent_root exported variable. Adjust and
deprecate GDK_ROOT_PARENT().
* demos/{testpixbuf-drawable.c,testpixbuf-save.c}: Fix
GDK_ROOT_PARENT usage, remove includes of port-specific
headers.
* gdk/{win32,x11,fb}/gdkinput*.[ch]: s/gdk/_gdk/ for
_gdk_input_gxid_host, _gdk_input_gxid_port, _gdk_input_ignore_core,
gdk_input_devices, _gdk_input_windows, gdk_init_input_core.
* gdk/x11/{gdkevents-x11.,c gdkglobals-x11.c, gdkmain-x11.c}
docs/Changes-2.0.txt: Remove gdk_wm_protocols,
gdk_wm_delete_window functions, gdk_wm_take_focus,
use gdk_atom_intern() instead.
* gdk/linux-fb/{gdkselection-fb.c, gdkmain-fb.c, gdkprivatefb.h}
gdk/win32/{gdkselection-win32.c, gdkmgdkwin32.h, gdkprivate-win32.h}
gdk/x11/{gdkselection-x11.c gdkx.h, gtkprivate-x11.h}
gtk/gtkselection.c
Unexport gdk_selection_property, just use
gdk_atom_intern ("GDK_SELECTION").
* gdk/x11/{gdkprivate-x11.h,gdkdrawable-x11h,gdkgc-x11.c,gdkx.h}:
Unexport gdk_drawable_impl_x11_get_type, gdk_gc_x11_get_type,
GDK_GC_X11 cast macros, GdkGCX11 structures, GdkCursorPrivate,
GdkVisualprivate, gdk_x11_gc_flush.
Make a number of public exports of variables into functions
to increase encapsulation.
* gdk/gdkinternals.h gdk/gdkinput.h gdk/gdkevents.h
gdk/linux-fb/gdkmouse-fb.c: gdk_core_pointer => _gdk_core_pointer,
move to gdkinternals.h. Add gdk_device_get_core_pointer ().
* gdk/gdkprivate.h gdk/gdkpango.c gdk/gdkinternals.h
docs/Changes-2.0.txt: Unexport gdk_parent_root, gdk_error_code,
gdk_error_warnings.
* gdk/x11/{gdkcolormap-x11.c, gdkmain-x11.c, gdkx.h}
docs/Changes-2.0.txt:
s/gdk_screen/_gdk_screen/, add gdk_x11_get_default_screen()
s/gdk_root_window/_gdk_root_window/, add gdk_x11_get_default_root_xwindow()
Add gdk_x11_get_default_xdisplay().
* gdk/gdk.h gdk/gdk.c linux-fb/gdkfb.h linux-fb/gdkglobals-fb.c
win32/gdkwin32.h x11/gdkglobals-x11.c gdk/x11/gdkmain-x11.c
gdk/x11/gdkx.h: gdk/gdk.def: Add gdk_get/set_program_class,
Don't export gdk_progclass, move --class command line
option and handling to common portion of GDK.
Miscellaneous fixes:
* gdk/x11/gdkwindow-x11.c (gdk_window_set_icon_list): Fix
g_return_val_if_fail that should have been g_return_if_fail.
* gdk/gdkinternals.h gdk/gdkprivate.h: Move
gdk_synthesize_window_state() to the semi-public gdkprivate.h.
* gtk/gtkdnd.c (_gtk_drag_source_handle_event): Remove uneeded
X11 dependency.
* gdk/linux-fb/gdkmain-fb.c gdk/win32/gdkmain-win32.c gdk/TODO:
Remove unused gdk_key_repeat_disable/restore.
* linux-fb/gdkglobals-fb.c win32/gdkglobals-win32.c
x11/gdkglobals-x11.c x11/gdkprivate-x11.h gdk/gdk.def:
Remove unused gdk_null_window_warnings variable.
* gdk/Makefile.am (DIST_SUBDIRS) nanox/*: cvs remove nanox;
it can be retrieved from the repository; it is too far
from functional to be worth having people check out;
it would be easier to start from scratch, I suspect.
* gdk/x11/gdkpixmap-x11.c: Fix lvalue usage of GDK_PIXMAP_XID().
* gdk/x11/gdkkeys-x11.c gdk/gdkrgb.c gdk/gdkwindow.c
gdk/x11/gdkpango-x11.c gdk/x11/gdkselection-x11.c:
Fix some accidentally global variables and unused global variables.
* gdk/x11/gdkkeys-x11.c gdk/gdkrgb.c gdk/gdkwindow.c
gdk/x11/gdkpango-x11.c gdk/x11/gdkselection-x11.c:
Fix some accidentally global variables and unused global variables.
Add some space for future expansion to multihead.
* gdk/gdkdrawable.h: Add four reserved function pointers
for future expansion of GdkDrawableClass.
* gtk/gtkwindow.h gtk/gtkinvisible.h: Add reserved pointer
where we can put a GdkScreen * later.
2001-09-07 21:50:20 +00:00
|
|
|
_gdk_default_filters = g_list_remove_link (_gdk_default_filters, node);
|
Added a modular client-message-filter mechanism, that is used for the DND
Sun Oct 18 18:16:39 1998 Owen Taylor <otaylor@gtk.org>
* gdk/gdk.c gdkprivate.h: Added a modular client-message-filter
mechanism, that is used for the DND messages.
Removed all the old DND code.
* gdk/gdkcolormap.c gdk/gdkcolormap.h: Add a function to
get the visual of a given colormap.
* gtk/gtkcolorsel.c: Conversion to new DND, drag
a color-swatch.
* gdk/gdk.h gdk/gdkdnd.c: The low-level
X oriented portions of drag and drop protocols.
Sending and receiving client messages, and navigating
window trees.
* gdk/gdkimage.c: added a gdk_flush() when destroying
SHM images to hopefully make it more likely that
X will gracefully handle the segment being destroyed.
* gdk/gdkprivate.h gtk/gtkdebug.h: Add new
DND debugging flags.
* gtk/gtkeditable.[ch]: Updates for the selection handling
changes.
* gtk/gtkselection.[ch]: Added GtkTargetList, a
refcounted data structure for keeping track of lists
of GdkAtom + information. Removed selection_handler_add
in favor of a "drag_data_get" signal.
* gtk/gtkdnd.[ch] gtk/gtk.h: New files - highlevel (event loop
dependent) parts of the DND protocols, display of drag icons,
drag-under highlighting, and the "default handlers".
* gtk/gtkinvisible.[ch]: New widget - InputOnly offscreen
windows that are used for reliable pointer grabs and
selection handling in the DND code.
* gtk/testdnd.c: New test program for new DND. (Old
DND tests in testgtk still need to be converted.)
* gtk/testselection.c: Use the new selection API.
* docs/dnd_internals: Start at describing how
all the new code works inside.
* docs/Changes-1.2.txt: New file describing source-incompatible
changes in GTK+-1.2.
Sat Oct 17 22:50:34 1998 Owen Taylor <otaylor@gtk.org>
* gdk/gdkwindow.c (gdk_window_remove_filter): Free
the right list node.
* gdk/gdkwindow.c (gdk_window_init): Add gdk_root_parent
to the XID table so we can receive events on it.
Wed Oct 14 12:57:40 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdk.c gdk/gdk.h (gdk_event_get_time): New function
to get the timestamp from a generic event.
Fri Oct 9 13:16:04 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_add_events): Added function
that safely adds additional events to a widget's event
mask, even if the widget has previously been realized.
(We can do this, but not remove events from the event
mask).
Fri Oct 2 17:35:35 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdkproperty.c (gdk_property_get): Allow type == 0,
for AnyPropertyType.
Fri Oct 2 10:32:21 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdkproperty.c (gdk_atom_intern): Add client-local
hashing.
Thu Sep 24 20:33:54 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdk.c (gdk_event_send_clientmessage_toall): serial
isn't a timestamp.
Thu Sep 17 14:23:03 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdk.c (gdk_event_translate): Removed printing
of unknown window lookup warnings. (Made it
a GDK_NOTE) - they happen in many circumstances.
1998-10-18 22:51:24 +00:00
|
|
|
g_list_free_1 (node);
|
1998-01-17 23:24:09 +00:00
|
|
|
g_free (filter);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
1997-12-18 02:17:14 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
2002-04-25 22:29:14 +00:00
|
|
|
* gdk_screen_get_toplevel_windows:
|
2002-11-28 00:33:17 +00:00
|
|
|
* @screen: The #GdkScreen where the toplevels are located.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2002-04-25 22:29:14 +00:00
|
|
|
* Obtains a list of all toplevel windows known to GDK on the screen @screen.
|
2001-10-03 18:19:48 +00:00
|
|
|
* A toplevel window is a child of the root window (see
|
|
|
|
* gdk_get_default_root_window()).
|
|
|
|
*
|
|
|
|
* The returned list should be freed with g_list_free(), but
|
|
|
|
* its elements need not be freed.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
* Return value: list of toplevel windows, free with g_list_free()
|
2002-11-28 00:33:17 +00:00
|
|
|
*
|
|
|
|
* Since: 2.2
|
2001-10-03 18:19:48 +00:00
|
|
|
**/
|
1998-05-01 16:15:39 +00:00
|
|
|
GList *
|
2002-04-25 22:29:14 +00:00
|
|
|
gdk_screen_get_toplevel_windows (GdkScreen *screen)
|
1998-05-01 16:15:39 +00:00
|
|
|
{
|
2002-04-25 22:29:14 +00:00
|
|
|
GdkWindow * root_window;
|
1998-05-01 16:15:39 +00:00
|
|
|
GList *new_list = NULL;
|
|
|
|
GList *tmp_list;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2002-04-25 22:29:14 +00:00
|
|
|
g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2002-04-25 22:29:14 +00:00
|
|
|
root_window = gdk_screen_get_root_window (screen);
|
|
|
|
|
|
|
|
tmp_list = ((GdkWindowObject *)root_window)->children;
|
1998-05-01 16:15:39 +00:00
|
|
|
while (tmp_list)
|
|
|
|
{
|
2009-07-18 13:04:06 +00:00
|
|
|
GdkWindowObject *w = tmp_list->data;
|
|
|
|
|
|
|
|
if (w->window_type != GDK_WINDOW_FOREIGN)
|
|
|
|
new_list = g_list_prepend (new_list, w);
|
1998-05-01 16:15:39 +00:00
|
|
|
tmp_list = tmp_list->next;
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
1998-05-01 16:15:39 +00:00
|
|
|
return new_list;
|
|
|
|
}
|
|
|
|
|
2002-04-25 22:29:14 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_get_toplevels:
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2002-04-25 22:29:14 +00:00
|
|
|
* Obtains a list of all toplevel windows known to GDK on the default
|
2006-05-07 03:28:22 +00:00
|
|
|
* screen (see gdk_screen_get_toplevel_windows()).
|
2002-04-25 22:29:14 +00:00
|
|
|
* A toplevel window is a child of the root window (see
|
|
|
|
* gdk_get_default_root_window()).
|
|
|
|
*
|
|
|
|
* The returned list should be freed with g_list_free(), but
|
|
|
|
* its elements need not be freed.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2002-04-25 22:29:14 +00:00
|
|
|
* Return value: list of toplevel windows, free with g_list_free()
|
2008-11-30 05:04:29 +00:00
|
|
|
*
|
|
|
|
* Deprecated: 2.16: Use gdk_screen_get_toplevel_windows() instead.
|
2009-08-31 04:55:32 +00:00
|
|
|
*/
|
2002-04-25 22:29:14 +00:00
|
|
|
GList *
|
|
|
|
gdk_window_get_toplevels (void)
|
|
|
|
{
|
2002-06-20 23:59:27 +00:00
|
|
|
return gdk_screen_get_toplevel_windows (gdk_screen_get_default ());
|
2002-04-25 22:29:14 +00:00
|
|
|
}
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
1999-01-15 16:00:39 +00:00
|
|
|
* gdk_window_is_visible:
|
2001-10-03 18:19:48 +00:00
|
|
|
* @window: a #GdkWindow
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
* Checks whether the window has been mapped (with gdk_window_show() or
|
|
|
|
* gdk_window_show_unraised()).
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
* Return value: %TRUE if the window is mapped
|
|
|
|
**/
|
2009-06-01 10:04:36 +00:00
|
|
|
gboolean
|
1999-01-15 16:00:39 +00:00
|
|
|
gdk_window_is_visible (GdkWindow *window)
|
|
|
|
{
|
1999-10-03 22:12:41 +00:00
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2001-02-27 20:40:15 +00:00
|
|
|
return GDK_WINDOW_IS_MAPPED (window);
|
1999-01-15 16:00:39 +00:00
|
|
|
}
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
1999-01-15 16:00:39 +00:00
|
|
|
* gdk_window_is_viewable:
|
2001-10-03 18:19:48 +00:00
|
|
|
* @window: a #GdkWindow
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
* Check if the window and all ancestors of the window are
|
|
|
|
* mapped. (This is not necessarily "viewable" in the X sense, since
|
|
|
|
* we only check as far as we have GDK window parents, not to the root
|
2002-01-13 20:13:34 +00:00
|
|
|
* window.)
|
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
* Return value: %TRUE if the window is viewable
|
|
|
|
**/
|
2009-06-01 10:04:36 +00:00
|
|
|
gboolean
|
1999-01-15 16:00:39 +00:00
|
|
|
gdk_window_is_viewable (GdkWindow *window)
|
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
2008-10-21 21:42:39 +00:00
|
|
|
|
1999-10-03 22:12:41 +00:00
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
|
2003-06-09 01:55:01 +00:00
|
|
|
|
2009-07-18 18:29:50 +00:00
|
|
|
if (private->destroyed)
|
|
|
|
return FALSE;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-07-18 18:29:50 +00:00
|
|
|
return private->viewable;
|
1999-01-15 16:00:39 +00:00
|
|
|
}
|
|
|
|
|
2001-02-27 20:40:15 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_get_state:
|
|
|
|
* @window: a #GdkWindow
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-02-27 20:40:15 +00:00
|
|
|
* Gets the bitwise OR of the currently active window state flags,
|
|
|
|
* from the #GdkWindowState enumeration.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-02-27 20:40:15 +00:00
|
|
|
* Return value: window state bitfield
|
|
|
|
**/
|
|
|
|
GdkWindowState
|
|
|
|
gdk_window_get_state (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2001-02-27 20:40:15 +00:00
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2001-02-27 20:40:15 +00:00
|
|
|
return private->state;
|
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
/* This creates an empty "implicit" paint region for the impl window.
|
|
|
|
* By itself this does nothing, but real paints to this window
|
|
|
|
* or children of it can use this pixmap as backing to avoid allocating
|
|
|
|
* multiple pixmaps for subwindow rendering. When doing so they
|
|
|
|
* add to the region of the implicit paint region, which will be
|
|
|
|
* pushed to the window when the implicit paint region is ended.
|
|
|
|
* Such paints should not copy anything to the window on paint end, but
|
|
|
|
* should rely on the implicit paint end.
|
|
|
|
* The implicit paint will be automatically ended if someone draws
|
|
|
|
* directly to the window or a child window.
|
|
|
|
*/
|
|
|
|
static gboolean
|
|
|
|
gdk_window_begin_implicit_paint (GdkWindow *window, GdkRectangle *rect)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
|
|
|
GdkWindowPaint *paint;
|
|
|
|
|
|
|
|
g_assert (gdk_window_has_impl (private));
|
|
|
|
|
2009-08-24 13:18:10 +00:00
|
|
|
if (_gdk_native_windows)
|
|
|
|
return FALSE; /* No need for implicit paints since we can't merge draws anyway */
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (GDK_IS_PAINTABLE (private->impl))
|
|
|
|
return FALSE; /* Implementation does double buffering */
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (private->paint_stack != NULL ||
|
|
|
|
private->implicit_paint != NULL)
|
|
|
|
return FALSE; /* Don't stack implicit paints */
|
|
|
|
|
2010-01-19 13:44:52 +00:00
|
|
|
if (private->outstanding_surfaces != 0)
|
|
|
|
return FALSE; /* May conflict with direct drawing to cairo surface */
|
|
|
|
|
2009-12-08 15:09:04 +00:00
|
|
|
/* Never do implicit paints for foreign windows, they don't need
|
|
|
|
* double buffer combination since they have no client side children,
|
|
|
|
* and creating pixmaps for them is risky since they could disappear
|
|
|
|
* at any time
|
|
|
|
*/
|
|
|
|
if (private->window_type == GDK_WINDOW_FOREIGN)
|
|
|
|
return FALSE;
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
paint = g_new (GdkWindowPaint, 1);
|
|
|
|
paint->region = gdk_region_new (); /* Empty */
|
2009-01-22 19:54:11 +00:00
|
|
|
paint->x_offset = rect->x;
|
|
|
|
paint->y_offset = rect->y;
|
2008-07-18 13:03:42 +00:00
|
|
|
paint->uses_implicit = FALSE;
|
2009-09-04 11:14:25 +00:00
|
|
|
paint->flushed = FALSE;
|
2008-07-18 13:03:42 +00:00
|
|
|
paint->surface = NULL;
|
|
|
|
paint->pixmap =
|
|
|
|
gdk_pixmap_new (window,
|
2009-01-22 19:54:11 +00:00
|
|
|
MAX (rect->width, 1), MAX (rect->height, 1), -1);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
private->implicit_paint = paint;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Ensure that all content related to this (sub)window is pushed to the
|
2009-05-26 09:30:46 +00:00
|
|
|
native region. If there is an active paint then that area is not
|
|
|
|
pushed, in order to not show partially finished double buffers. */
|
2008-07-18 13:03:42 +00:00
|
|
|
static void
|
|
|
|
gdk_window_flush_implicit_paint (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
|
|
|
GdkWindowObject *impl_window;
|
|
|
|
GdkWindowPaint *paint;
|
|
|
|
GdkRegion *region;
|
|
|
|
GdkGC *tmp_gc;
|
2009-05-26 09:30:46 +00:00
|
|
|
GSList *list;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
impl_window = gdk_window_get_impl_window (private);
|
|
|
|
if (impl_window->implicit_paint == NULL)
|
|
|
|
return;
|
|
|
|
|
|
|
|
paint = impl_window->implicit_paint;
|
2009-09-04 11:14:25 +00:00
|
|
|
paint->flushed = TRUE;
|
2008-07-18 13:03:42 +00:00
|
|
|
region = gdk_region_copy (private->clip_region_with_children);
|
2009-05-26 09:30:46 +00:00
|
|
|
|
|
|
|
/* Don't flush active double buffers, as that may show partially done
|
|
|
|
* rendering */
|
|
|
|
for (list = private->paint_stack; list != NULL; list = list->next)
|
|
|
|
{
|
|
|
|
GdkWindowPaint *tmp_paint = list->data;
|
|
|
|
|
|
|
|
gdk_region_subtract (region, tmp_paint->region);
|
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_region_offset (region, private->abs_x, private->abs_y);
|
|
|
|
gdk_region_intersect (region, paint->region);
|
2009-05-26 09:30:46 +00:00
|
|
|
|
2010-01-15 15:06:12 +00:00
|
|
|
if (!GDK_WINDOW_DESTROYED (window) && !gdk_region_empty (region))
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
2009-09-04 11:10:35 +00:00
|
|
|
/* Remove flushed region from the implicit paint */
|
|
|
|
gdk_region_subtract (paint->region, region);
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* Some regions are valid, push these to window now */
|
|
|
|
tmp_gc = _gdk_drawable_get_scratch_gc ((GdkDrawable *)window, FALSE);
|
|
|
|
_gdk_gc_set_clip_region_internal (tmp_gc, region, TRUE);
|
|
|
|
gdk_draw_drawable (private->impl, tmp_gc, paint->pixmap,
|
|
|
|
0, 0, paint->x_offset, paint->y_offset, -1, -1);
|
|
|
|
/* Reset clip region of the cached GdkGC */
|
|
|
|
gdk_gc_set_clip_region (tmp_gc, NULL);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
gdk_region_destroy (region);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Ends an implicit paint, paired with gdk_window_begin_implicit_paint returning TRUE */
|
|
|
|
static void
|
|
|
|
gdk_window_end_implicit_paint (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
|
|
|
GdkWindowPaint *paint;
|
|
|
|
GdkGC *tmp_gc;
|
|
|
|
|
|
|
|
g_assert (gdk_window_has_impl (private));
|
|
|
|
|
|
|
|
g_assert (private->implicit_paint != NULL);
|
|
|
|
|
|
|
|
paint = private->implicit_paint;
|
|
|
|
|
|
|
|
private->implicit_paint = NULL;
|
2009-01-22 19:54:11 +00:00
|
|
|
|
2010-01-15 15:06:12 +00:00
|
|
|
if (!GDK_WINDOW_DESTROYED (window) && !gdk_region_empty (paint->region))
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
/* Some regions are valid, push these to window now */
|
|
|
|
tmp_gc = _gdk_drawable_get_scratch_gc ((GdkDrawable *)window, FALSE);
|
|
|
|
_gdk_gc_set_clip_region_internal (tmp_gc, paint->region, TRUE);
|
|
|
|
gdk_draw_drawable (private->impl, tmp_gc, paint->pixmap,
|
|
|
|
0, 0, paint->x_offset, paint->y_offset, -1, -1);
|
|
|
|
/* Reset clip region of the cached GdkGC */
|
|
|
|
gdk_gc_set_clip_region (tmp_gc, NULL);
|
|
|
|
}
|
2009-10-05 02:35:12 +00:00
|
|
|
else
|
|
|
|
gdk_region_destroy (paint->region);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
g_object_unref (paint->pixmap);
|
|
|
|
g_free (paint);
|
|
|
|
}
|
|
|
|
|
2001-02-20 05:21:44 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_begin_paint_rect:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @rectangle: rectangle you intend to draw to
|
|
|
|
*
|
|
|
|
* A convenience wrapper around gdk_window_begin_paint_region() which
|
|
|
|
* creates a rectangular region for you. See
|
|
|
|
* gdk_window_begin_paint_region() for details.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-02-20 05:21:44 +00:00
|
|
|
**/
|
2000-03-28 01:24:44 +00:00
|
|
|
void
|
2008-01-14 14:02:12 +00:00
|
|
|
gdk_window_begin_paint_rect (GdkWindow *window,
|
2009-06-01 10:04:36 +00:00
|
|
|
const GdkRectangle *rectangle)
|
2000-03-28 01:24:44 +00:00
|
|
|
{
|
|
|
|
GdkRegion *region;
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
region = gdk_region_rectangle (rectangle);
|
|
|
|
gdk_window_begin_paint_region (window, region);
|
|
|
|
gdk_region_destroy (region);
|
|
|
|
}
|
|
|
|
|
2001-02-20 05:21:44 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_begin_paint_region:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @region: region you intend to draw to
|
|
|
|
*
|
|
|
|
* Indicates that you are beginning the process of redrawing @region.
|
|
|
|
* A backing store (offscreen buffer) large enough to contain @region
|
|
|
|
* will be created. The backing store will be initialized with the
|
|
|
|
* background color or background pixmap for @window. Then, all
|
|
|
|
* drawing operations performed on @window will be diverted to the
|
|
|
|
* backing store. When you call gdk_window_end_paint(), the backing
|
|
|
|
* store will be copied to @window, making it visible onscreen. Only
|
2001-06-28 05:24:00 +00:00
|
|
|
* the part of @window contained in @region will be modified; that is,
|
2001-02-20 05:21:44 +00:00
|
|
|
* drawing operations are clipped to @region.
|
|
|
|
*
|
|
|
|
* The net result of all this is to remove flicker, because the user
|
|
|
|
* sees the finished product appear all at once when you call
|
|
|
|
* gdk_window_end_paint(). If you draw to @window directly without
|
|
|
|
* calling gdk_window_begin_paint_region(), the user may see flicker
|
|
|
|
* as individual drawing operations are performed in sequence. The
|
|
|
|
* clipping and background-initializing features of
|
|
|
|
* gdk_window_begin_paint_region() are conveniences for the
|
|
|
|
* programmer, so you can avoid doing that work yourself.
|
|
|
|
*
|
|
|
|
* When using GTK+, the widget system automatically places calls to
|
|
|
|
* gdk_window_begin_paint_region() and gdk_window_end_paint() around
|
|
|
|
* emissions of the expose_event signal. That is, if you're writing an
|
|
|
|
* expose event handler, you can assume that the exposed area in
|
|
|
|
* #GdkEventExpose has already been cleared to the window background,
|
|
|
|
* is already set as the clip region, and already has a backing store.
|
|
|
|
* Therefore in most cases, application code need not call
|
|
|
|
* gdk_window_begin_paint_region(). (You can disable the automatic
|
|
|
|
* calls around expose events on a widget-by-widget basis by calling
|
|
|
|
* gtk_widget_set_double_buffered().)
|
|
|
|
*
|
|
|
|
* If you call this function multiple times before calling the
|
|
|
|
* matching gdk_window_end_paint(), the backing stores are pushed onto
|
|
|
|
* a stack. gdk_window_end_paint() copies the topmost backing store
|
|
|
|
* onscreen, subtracts the topmost region from all other regions in
|
|
|
|
* the stack, and pops the stack. All drawing operations affect only
|
|
|
|
* the topmost backing store in the stack. One matching call to
|
|
|
|
* gdk_window_end_paint() is required for each call to
|
|
|
|
* gdk_window_begin_paint_region().
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-02-20 05:21:44 +00:00
|
|
|
**/
|
2009-06-01 10:04:36 +00:00
|
|
|
void
|
2008-01-14 14:02:12 +00:00
|
|
|
gdk_window_begin_paint_region (GdkWindow *window,
|
2009-06-01 10:04:36 +00:00
|
|
|
const GdkRegion *region)
|
2000-03-28 01:24:44 +00:00
|
|
|
{
|
Large changes to the Win32 backend, partially made necessary by the
2000-05-02 Tor Lillqvist <tml@iki.fi>
Large changes to the Win32 backend, partially made necessary by
the changes to the backend-independent internal
structures. Attempts to implement similar backing store stuff as
on X11. The current (CVS) version of the Win32 backend is *not* as
stable as it was before the no-flicker branch was merged. A
zipfile with that version is available from
http://www.gimp.org/win32/. That should be use by "production"
code until this CVS version is usable. (But note, the Win32
backend has never been claimed to be "production quality".)
* README.win32: Add the above comment about versions.
* gdk/gdkwindow.c: Don't use backing store for now on Win32.
* gdk/gdk.def: Update.
* gdk/gdkfont.h: Declare temporary Win32-only functions. Will
presumably be replaced by some more better mechanism as 1.4 gets
closer to release shape.
* gdk/makefile.{cygwin,msc}: Update.
* gdk/win32/*.c: Correct inclusions of the backend-specific and
internal headers. Change code according to changes in these. Use
gdk_drawable_*, not gdk_window_* where necessary.
* gdk/win32/gdkdnd-win32.c: Use MISC selector for GDK_NOTE, not
our old DND.
* gdk/win32/gdkdrawable-win32.c (gdk_win32_draw_text): Don't try
to interpret single characters as UTF-8. Thanks to Hans Breuer.
Use correct function name in warning messages.
* gdk/win32/gdkevents-win32.c: Use correct parameter lists for the
GSourceFuncs gdk_event_prepare and gdk_event_check.
(gdk_event_get_graphics_expose): Do implement, use
PeekMessage. Thanks to Hans Breuer.
(event_mask_string): Debugging function to print an GdkEventMask.
(gdk_pointer_grab): Use it.
* gdk/win32/gdkfont-win32.c: The Unicode subrange that the
(old) book I used claimed was Hangul actually is CJK Unified
Ideographs Extension A. Also, Hangul Syllables were missing.
Improve logging.
* gdk/win32/gdkgc-win32.c: Largish changes.
* gdk/win32/gdkim-win32.c (gdk_set_locale): Use
g_win32_getlocale() from GLib, and not setlocale() to get current
locale name.
* gdk/win32/gdkprivate-win32.h
* gdk/win32/gdkwin32.h: Move stuff from gdkprivate-win32.h to
gdkwin32.h, similarily as in the X11 backend.
* gdk/win32/gdkwindow-win32.c (gdk_propagate_shapes): Bugfix,
assignment was used instead of equals in if test. Thanks to Hans
Breuer.
* gdk/win32/makefile.{cygwin,msc}
* gtk/makefile.{cygwin,msc}: Updates. Better kludge to get the
path to the Win32 headers that works also with the mingw compiler.
* gtk/gtkstyle.c: Include <string.h>.
2000-05-01 22:06:49 +00:00
|
|
|
#ifdef USE_BACKING_STORE
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
2000-03-28 01:24:44 +00:00
|
|
|
GdkRectangle clip_box;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkWindowPaint *paint, *implicit_paint;
|
|
|
|
GdkWindowObject *impl_window;
|
2003-08-20 21:11:25 +00:00
|
|
|
GSList *list;
|
2008-10-21 21:42:39 +00:00
|
|
|
|
2000-03-28 01:24:44 +00:00
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
2000-05-15 16:09:53 +00:00
|
|
|
return;
|
2000-03-28 01:24:44 +00:00
|
|
|
|
2009-06-01 10:04:36 +00:00
|
|
|
if (GDK_IS_PAINTABLE (private->impl))
|
2006-04-10 19:43:08 +00:00
|
|
|
{
|
2007-01-25 14:24:53 +00:00
|
|
|
GdkPaintableIface *iface = GDK_PAINTABLE_GET_IFACE (private->impl);
|
|
|
|
|
|
|
|
if (iface->begin_paint_region)
|
2009-06-01 10:04:36 +00:00
|
|
|
iface->begin_paint_region ((GdkPaintable*)private->impl, window, region);
|
|
|
|
|
2006-04-10 19:43:08 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
impl_window = gdk_window_get_impl_window (private);
|
|
|
|
implicit_paint = impl_window->implicit_paint;
|
|
|
|
|
2003-08-20 21:11:25 +00:00
|
|
|
paint = g_new (GdkWindowPaint, 1);
|
2009-07-20 21:18:41 +00:00
|
|
|
paint->region = gdk_region_copy (region);
|
2008-12-04 19:18:02 +00:00
|
|
|
paint->region_tag = new_region_tag ();
|
2009-01-22 19:54:11 +00:00
|
|
|
|
2009-07-20 21:18:41 +00:00
|
|
|
gdk_region_intersect (paint->region, private->clip_region_with_children);
|
2009-01-22 19:54:11 +00:00
|
|
|
gdk_region_get_clipbox (paint->region, &clip_box);
|
|
|
|
|
|
|
|
/* Convert to impl coords */
|
|
|
|
gdk_region_offset (paint->region, private->abs_x, private->abs_y);
|
|
|
|
|
|
|
|
/* Mark the region as valid on the implicit paint */
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-22 19:54:11 +00:00
|
|
|
if (implicit_paint)
|
|
|
|
gdk_region_union (implicit_paint->region, paint->region);
|
|
|
|
|
|
|
|
/* Convert back to normal coords */
|
|
|
|
gdk_region_offset (paint->region, -private->abs_x, -private->abs_y);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (implicit_paint)
|
|
|
|
{
|
|
|
|
int width, height;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
paint->uses_implicit = TRUE;
|
|
|
|
paint->pixmap = g_object_ref (implicit_paint->pixmap);
|
|
|
|
paint->x_offset = -private->abs_x + implicit_paint->x_offset;
|
|
|
|
paint->y_offset = -private->abs_y + implicit_paint->y_offset;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-07-24 19:41:37 +00:00
|
|
|
gdk_drawable_get_size (paint->pixmap, &width, &height);
|
2008-12-15 14:50:41 +00:00
|
|
|
paint->surface = _gdk_drawable_create_cairo_surface (paint->pixmap, width, height);
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
paint->uses_implicit = FALSE;
|
|
|
|
paint->x_offset = clip_box.x;
|
|
|
|
paint->y_offset = clip_box.y;
|
|
|
|
paint->pixmap =
|
|
|
|
gdk_pixmap_new (window,
|
|
|
|
MAX (clip_box.width, 1), MAX (clip_box.height, 1), -1);
|
|
|
|
paint->surface = _gdk_drawable_ref_cairo_surface (paint->pixmap);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-04 19:18:02 +00:00
|
|
|
if (paint->surface)
|
|
|
|
cairo_surface_set_device_offset (paint->surface,
|
|
|
|
-paint->x_offset, -paint->y_offset);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2003-08-20 21:11:25 +00:00
|
|
|
for (list = private->paint_stack; list != NULL; list = list->next)
|
2000-03-28 01:24:44 +00:00
|
|
|
{
|
2003-08-20 21:11:25 +00:00
|
|
|
GdkWindowPaint *tmp_paint = list->data;
|
2000-03-28 01:24:44 +00:00
|
|
|
|
2003-08-20 21:11:25 +00:00
|
|
|
gdk_region_subtract (tmp_paint->region, paint->region);
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2000-03-28 01:24:44 +00:00
|
|
|
private->paint_stack = g_slist_prepend (private->paint_stack, paint);
|
2003-08-20 21:11:25 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (!gdk_region_empty (paint->region))
|
2003-08-20 21:11:25 +00:00
|
|
|
{
|
2009-02-05 13:53:07 +00:00
|
|
|
gdk_window_clear_backing_region (window,
|
|
|
|
paint->region);
|
2003-08-20 21:11:25 +00:00
|
|
|
}
|
2008-12-04 18:36:13 +00:00
|
|
|
|
Large changes to the Win32 backend, partially made necessary by the
2000-05-02 Tor Lillqvist <tml@iki.fi>
Large changes to the Win32 backend, partially made necessary by
the changes to the backend-independent internal
structures. Attempts to implement similar backing store stuff as
on X11. The current (CVS) version of the Win32 backend is *not* as
stable as it was before the no-flicker branch was merged. A
zipfile with that version is available from
http://www.gimp.org/win32/. That should be use by "production"
code until this CVS version is usable. (But note, the Win32
backend has never been claimed to be "production quality".)
* README.win32: Add the above comment about versions.
* gdk/gdkwindow.c: Don't use backing store for now on Win32.
* gdk/gdk.def: Update.
* gdk/gdkfont.h: Declare temporary Win32-only functions. Will
presumably be replaced by some more better mechanism as 1.4 gets
closer to release shape.
* gdk/makefile.{cygwin,msc}: Update.
* gdk/win32/*.c: Correct inclusions of the backend-specific and
internal headers. Change code according to changes in these. Use
gdk_drawable_*, not gdk_window_* where necessary.
* gdk/win32/gdkdnd-win32.c: Use MISC selector for GDK_NOTE, not
our old DND.
* gdk/win32/gdkdrawable-win32.c (gdk_win32_draw_text): Don't try
to interpret single characters as UTF-8. Thanks to Hans Breuer.
Use correct function name in warning messages.
* gdk/win32/gdkevents-win32.c: Use correct parameter lists for the
GSourceFuncs gdk_event_prepare and gdk_event_check.
(gdk_event_get_graphics_expose): Do implement, use
PeekMessage. Thanks to Hans Breuer.
(event_mask_string): Debugging function to print an GdkEventMask.
(gdk_pointer_grab): Use it.
* gdk/win32/gdkfont-win32.c: The Unicode subrange that the
(old) book I used claimed was Hangul actually is CJK Unified
Ideographs Extension A. Also, Hangul Syllables were missing.
Improve logging.
* gdk/win32/gdkgc-win32.c: Largish changes.
* gdk/win32/gdkim-win32.c (gdk_set_locale): Use
g_win32_getlocale() from GLib, and not setlocale() to get current
locale name.
* gdk/win32/gdkprivate-win32.h
* gdk/win32/gdkwin32.h: Move stuff from gdkprivate-win32.h to
gdkwin32.h, similarily as in the X11 backend.
* gdk/win32/gdkwindow-win32.c (gdk_propagate_shapes): Bugfix,
assignment was used instead of equals in if test. Thanks to Hans
Breuer.
* gdk/win32/makefile.{cygwin,msc}
* gtk/makefile.{cygwin,msc}: Updates. Better kludge to get the
path to the Win32 headers that works also with the mingw compiler.
* gtk/gtkstyle.c: Include <string.h>.
2000-05-01 22:06:49 +00:00
|
|
|
#endif /* USE_BACKING_STORE */
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static void
|
|
|
|
setup_redirect_clip (GdkWindow *window,
|
|
|
|
GdkGC *gc,
|
|
|
|
int *x_offset_out,
|
|
|
|
int *y_offset_out)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
|
|
|
GdkRegion *visible_region;
|
|
|
|
GdkRectangle dest_rect;
|
|
|
|
GdkRegion *tmpreg;
|
|
|
|
GdkWindow *toplevel;
|
|
|
|
int x_offset, y_offset;
|
|
|
|
|
|
|
|
toplevel = GDK_WINDOW (private->redirect->redirected);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* Get the clip region for gc clip rect + window hierarchy in
|
|
|
|
window relative coords */
|
|
|
|
visible_region =
|
|
|
|
_gdk_window_calculate_full_clip_region (window, toplevel,
|
|
|
|
TRUE,
|
2009-06-01 10:04:36 +00:00
|
|
|
&x_offset,
|
2008-07-18 13:03:42 +00:00
|
|
|
&y_offset);
|
|
|
|
|
|
|
|
/* Compensate for the source pos/size */
|
|
|
|
x_offset -= private->redirect->src_x;
|
|
|
|
y_offset -= private->redirect->src_y;
|
|
|
|
dest_rect.x = -x_offset;
|
|
|
|
dest_rect.y = -y_offset;
|
|
|
|
dest_rect.width = private->redirect->width;
|
|
|
|
dest_rect.height = private->redirect->height;
|
|
|
|
tmpreg = gdk_region_rectangle (&dest_rect);
|
|
|
|
gdk_region_intersect (visible_region, tmpreg);
|
|
|
|
gdk_region_destroy (tmpreg);
|
|
|
|
|
|
|
|
/* Compensate for the dest pos */
|
|
|
|
x_offset += private->redirect->dest_x;
|
|
|
|
y_offset += private->redirect->dest_y;
|
|
|
|
|
|
|
|
gdk_gc_set_clip_region (gc, visible_region); /* This resets clip origin! */
|
|
|
|
|
|
|
|
/* offset clip and tiles from window coords to pixmaps coords */
|
|
|
|
gdk_gc_offset (gc, -x_offset, -y_offset);
|
|
|
|
|
|
|
|
gdk_region_destroy (visible_region);
|
|
|
|
|
|
|
|
*x_offset_out = x_offset;
|
|
|
|
*y_offset_out = y_offset;
|
|
|
|
}
|
|
|
|
|
2001-02-20 05:21:44 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_end_paint:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
*
|
|
|
|
* Indicates that the backing store created by the most recent call to
|
|
|
|
* gdk_window_begin_paint_region() should be copied onscreen and
|
|
|
|
* deleted, leaving the next-most-recent backing store or no backing
|
|
|
|
* store at all as the active paint region. See
|
|
|
|
* gdk_window_begin_paint_region() for full details. It is an error to
|
|
|
|
* call this function without a matching
|
|
|
|
* gdk_window_begin_paint_region() first.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-02-20 05:21:44 +00:00
|
|
|
**/
|
2000-03-28 01:24:44 +00:00
|
|
|
void
|
|
|
|
gdk_window_end_paint (GdkWindow *window)
|
|
|
|
{
|
Large changes to the Win32 backend, partially made necessary by the
2000-05-02 Tor Lillqvist <tml@iki.fi>
Large changes to the Win32 backend, partially made necessary by
the changes to the backend-independent internal
structures. Attempts to implement similar backing store stuff as
on X11. The current (CVS) version of the Win32 backend is *not* as
stable as it was before the no-flicker branch was merged. A
zipfile with that version is available from
http://www.gimp.org/win32/. That should be use by "production"
code until this CVS version is usable. (But note, the Win32
backend has never been claimed to be "production quality".)
* README.win32: Add the above comment about versions.
* gdk/gdkwindow.c: Don't use backing store for now on Win32.
* gdk/gdk.def: Update.
* gdk/gdkfont.h: Declare temporary Win32-only functions. Will
presumably be replaced by some more better mechanism as 1.4 gets
closer to release shape.
* gdk/makefile.{cygwin,msc}: Update.
* gdk/win32/*.c: Correct inclusions of the backend-specific and
internal headers. Change code according to changes in these. Use
gdk_drawable_*, not gdk_window_* where necessary.
* gdk/win32/gdkdnd-win32.c: Use MISC selector for GDK_NOTE, not
our old DND.
* gdk/win32/gdkdrawable-win32.c (gdk_win32_draw_text): Don't try
to interpret single characters as UTF-8. Thanks to Hans Breuer.
Use correct function name in warning messages.
* gdk/win32/gdkevents-win32.c: Use correct parameter lists for the
GSourceFuncs gdk_event_prepare and gdk_event_check.
(gdk_event_get_graphics_expose): Do implement, use
PeekMessage. Thanks to Hans Breuer.
(event_mask_string): Debugging function to print an GdkEventMask.
(gdk_pointer_grab): Use it.
* gdk/win32/gdkfont-win32.c: The Unicode subrange that the
(old) book I used claimed was Hangul actually is CJK Unified
Ideographs Extension A. Also, Hangul Syllables were missing.
Improve logging.
* gdk/win32/gdkgc-win32.c: Largish changes.
* gdk/win32/gdkim-win32.c (gdk_set_locale): Use
g_win32_getlocale() from GLib, and not setlocale() to get current
locale name.
* gdk/win32/gdkprivate-win32.h
* gdk/win32/gdkwin32.h: Move stuff from gdkprivate-win32.h to
gdkwin32.h, similarily as in the X11 backend.
* gdk/win32/gdkwindow-win32.c (gdk_propagate_shapes): Bugfix,
assignment was used instead of equals in if test. Thanks to Hans
Breuer.
* gdk/win32/makefile.{cygwin,msc}
* gtk/makefile.{cygwin,msc}: Updates. Better kludge to get the
path to the Win32 headers that works also with the mingw compiler.
* gtk/gtkstyle.c: Include <string.h>.
2000-05-01 22:06:49 +00:00
|
|
|
#ifdef USE_BACKING_STORE
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
2007-06-01 12:16:12 +00:00
|
|
|
GdkWindowObject *composited;
|
2000-03-28 01:24:44 +00:00
|
|
|
GdkWindowPaint *paint;
|
|
|
|
GdkGC *tmp_gc;
|
|
|
|
GdkRectangle clip_box;
|
|
|
|
gint x_offset, y_offset;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkRegion *full_clip;
|
2000-03-28 01:24:44 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
2000-05-15 16:09:53 +00:00
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
2000-05-15 16:09:53 +00:00
|
|
|
return;
|
2001-02-20 05:21:44 +00:00
|
|
|
|
2007-01-25 14:24:53 +00:00
|
|
|
if (GDK_IS_PAINTABLE (private->impl))
|
2006-04-10 19:43:08 +00:00
|
|
|
{
|
2007-01-25 14:24:53 +00:00
|
|
|
GdkPaintableIface *iface = GDK_PAINTABLE_GET_IFACE (private->impl);
|
|
|
|
|
|
|
|
if (iface->end_paint)
|
2009-06-01 10:04:36 +00:00
|
|
|
iface->end_paint ((GdkPaintable*)private->impl);
|
2006-04-10 19:43:08 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2001-02-20 05:21:44 +00:00
|
|
|
if (private->paint_stack == NULL)
|
|
|
|
{
|
|
|
|
g_warning (G_STRLOC": no preceding call to gdk_window_begin_paint_region(), see documentation");
|
|
|
|
return;
|
|
|
|
}
|
2000-03-28 01:24:44 +00:00
|
|
|
|
|
|
|
paint = private->paint_stack->data;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-06-01 10:04:36 +00:00
|
|
|
private->paint_stack = g_slist_delete_link (private->paint_stack,
|
2008-07-18 13:03:42 +00:00
|
|
|
private->paint_stack);
|
2000-03-28 01:24:44 +00:00
|
|
|
|
|
|
|
gdk_region_get_clipbox (paint->region, &clip_box);
|
|
|
|
|
2004-02-18 00:59:14 +00:00
|
|
|
tmp_gc = _gdk_drawable_get_scratch_gc (window, FALSE);
|
2000-03-28 01:24:44 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
x_offset = -private->abs_x;
|
|
|
|
y_offset = -private->abs_y;
|
2000-03-28 01:24:44 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (!paint->uses_implicit)
|
|
|
|
{
|
2009-01-22 19:54:11 +00:00
|
|
|
gdk_window_flush_outstanding_moves (window);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
full_clip = gdk_region_copy (private->clip_region_with_children);
|
|
|
|
gdk_region_intersect (full_clip, paint->region);
|
|
|
|
_gdk_gc_set_clip_region_internal (tmp_gc, full_clip, TRUE); /* Takes ownership of full_clip */
|
|
|
|
gdk_gc_set_clip_origin (tmp_gc, - x_offset, - y_offset);
|
|
|
|
gdk_draw_drawable (private->impl, tmp_gc, paint->pixmap,
|
|
|
|
clip_box.x - paint->x_offset,
|
|
|
|
clip_box.y - paint->y_offset,
|
|
|
|
clip_box.x - x_offset, clip_box.y - y_offset,
|
|
|
|
clip_box.width, clip_box.height);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
if (private->redirect)
|
|
|
|
{
|
2008-07-18 13:03:42 +00:00
|
|
|
int x_offset, y_offset;
|
|
|
|
|
|
|
|
/* TODO: Should also use paint->region for clipping */
|
|
|
|
setup_redirect_clip (window, tmp_gc, &x_offset, &y_offset);
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
gdk_draw_drawable (private->redirect->pixmap, tmp_gc, paint->pixmap,
|
|
|
|
clip_box.x - paint->x_offset,
|
|
|
|
clip_box.y - paint->y_offset,
|
2008-07-18 13:03:42 +00:00
|
|
|
clip_box.x + x_offset,
|
|
|
|
clip_box.y + y_offset,
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
clip_box.width, clip_box.height);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2004-02-18 13:52:12 +00:00
|
|
|
/* Reset clip region of the cached GdkGC */
|
2004-02-18 12:43:23 +00:00
|
|
|
gdk_gc_set_clip_region (tmp_gc, NULL);
|
2005-03-17 01:54:40 +00:00
|
|
|
|
|
|
|
cairo_surface_destroy (paint->surface);
|
2003-08-20 21:11:25 +00:00
|
|
|
g_object_unref (paint->pixmap);
|
2000-03-28 01:24:44 +00:00
|
|
|
gdk_region_destroy (paint->region);
|
|
|
|
g_free (paint);
|
2007-06-01 12:16:12 +00:00
|
|
|
|
|
|
|
/* find a composited window in our hierarchy to signal its
|
|
|
|
* parent to redraw, calculating the clip box as we go...
|
|
|
|
*
|
|
|
|
* stop if parent becomes NULL since then we'd have nowhere
|
|
|
|
* to draw (ie: 'composited' will always be non-NULL here).
|
|
|
|
*/
|
|
|
|
for (composited = private;
|
|
|
|
composited->parent;
|
|
|
|
composited = composited->parent)
|
|
|
|
{
|
|
|
|
int width, height;
|
|
|
|
|
|
|
|
gdk_drawable_get_size (GDK_DRAWABLE (composited->parent),
|
|
|
|
&width, &height);
|
|
|
|
|
|
|
|
clip_box.x += composited->x;
|
|
|
|
clip_box.y += composited->y;
|
|
|
|
clip_box.width = MIN (clip_box.width, width - clip_box.x);
|
|
|
|
clip_box.height = MIN (clip_box.height, height - clip_box.y);
|
|
|
|
|
|
|
|
if (composited->composited)
|
|
|
|
{
|
|
|
|
gdk_window_invalidate_rect (GDK_WINDOW (composited->parent),
|
|
|
|
&clip_box, FALSE);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
Large changes to the Win32 backend, partially made necessary by the
2000-05-02 Tor Lillqvist <tml@iki.fi>
Large changes to the Win32 backend, partially made necessary by
the changes to the backend-independent internal
structures. Attempts to implement similar backing store stuff as
on X11. The current (CVS) version of the Win32 backend is *not* as
stable as it was before the no-flicker branch was merged. A
zipfile with that version is available from
http://www.gimp.org/win32/. That should be use by "production"
code until this CVS version is usable. (But note, the Win32
backend has never been claimed to be "production quality".)
* README.win32: Add the above comment about versions.
* gdk/gdkwindow.c: Don't use backing store for now on Win32.
* gdk/gdk.def: Update.
* gdk/gdkfont.h: Declare temporary Win32-only functions. Will
presumably be replaced by some more better mechanism as 1.4 gets
closer to release shape.
* gdk/makefile.{cygwin,msc}: Update.
* gdk/win32/*.c: Correct inclusions of the backend-specific and
internal headers. Change code according to changes in these. Use
gdk_drawable_*, not gdk_window_* where necessary.
* gdk/win32/gdkdnd-win32.c: Use MISC selector for GDK_NOTE, not
our old DND.
* gdk/win32/gdkdrawable-win32.c (gdk_win32_draw_text): Don't try
to interpret single characters as UTF-8. Thanks to Hans Breuer.
Use correct function name in warning messages.
* gdk/win32/gdkevents-win32.c: Use correct parameter lists for the
GSourceFuncs gdk_event_prepare and gdk_event_check.
(gdk_event_get_graphics_expose): Do implement, use
PeekMessage. Thanks to Hans Breuer.
(event_mask_string): Debugging function to print an GdkEventMask.
(gdk_pointer_grab): Use it.
* gdk/win32/gdkfont-win32.c: The Unicode subrange that the
(old) book I used claimed was Hangul actually is CJK Unified
Ideographs Extension A. Also, Hangul Syllables were missing.
Improve logging.
* gdk/win32/gdkgc-win32.c: Largish changes.
* gdk/win32/gdkim-win32.c (gdk_set_locale): Use
g_win32_getlocale() from GLib, and not setlocale() to get current
locale name.
* gdk/win32/gdkprivate-win32.h
* gdk/win32/gdkwin32.h: Move stuff from gdkprivate-win32.h to
gdkwin32.h, similarily as in the X11 backend.
* gdk/win32/gdkwindow-win32.c (gdk_propagate_shapes): Bugfix,
assignment was used instead of equals in if test. Thanks to Hans
Breuer.
* gdk/win32/makefile.{cygwin,msc}
* gtk/makefile.{cygwin,msc}: Updates. Better kludge to get the
path to the Win32 headers that works also with the mingw compiler.
* gtk/gtkstyle.c: Include <string.h>.
2000-05-01 22:06:49 +00:00
|
|
|
#endif /* USE_BACKING_STORE */
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
2000-05-15 16:09:53 +00:00
|
|
|
static void
|
|
|
|
gdk_window_free_paint_stack (GdkWindow *window)
|
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2000-05-15 16:09:53 +00:00
|
|
|
if (private->paint_stack)
|
|
|
|
{
|
|
|
|
GSList *tmp_list = private->paint_stack;
|
|
|
|
|
|
|
|
while (tmp_list)
|
|
|
|
{
|
|
|
|
GdkWindowPaint *paint = tmp_list->data;
|
2000-06-20 20:20:38 +00:00
|
|
|
|
2000-05-15 16:09:53 +00:00
|
|
|
if (tmp_list == private->paint_stack)
|
2002-09-25 07:23:55 +00:00
|
|
|
g_object_unref (paint->pixmap);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2000-05-15 16:09:53 +00:00
|
|
|
gdk_region_destroy (paint->region);
|
|
|
|
g_free (paint);
|
|
|
|
|
|
|
|
tmp_list = tmp_list->next;
|
|
|
|
}
|
|
|
|
|
|
|
|
g_slist_free (private->paint_stack);
|
|
|
|
private->paint_stack = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-12-09 19:13:02 +00:00
|
|
|
static void
|
2009-02-08 12:10:42 +00:00
|
|
|
do_move_region_bits_on_impl (GdkWindowObject *impl_window,
|
|
|
|
GdkRegion *dest_region, /* In impl window coords */
|
2008-12-09 19:13:02 +00:00
|
|
|
int dx, int dy)
|
|
|
|
{
|
|
|
|
GdkGC *tmp_gc;
|
|
|
|
GdkRectangle copy_rect;
|
2009-02-08 12:10:42 +00:00
|
|
|
GdkWindowObject *private;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2009-01-20 21:29:19 +00:00
|
|
|
|
2009-01-14 21:24:41 +00:00
|
|
|
/* We need to get data from subwindows here, because we might have
|
2009-01-20 21:29:19 +00:00
|
|
|
* shaped a native window over the moving region (with bg none,
|
|
|
|
* so the pixels are still there). In fact we might need to get data
|
|
|
|
* from overlapping native window that are not children of this window,
|
|
|
|
* so we copy from the toplevel with INCLUDE_INFERIORS.
|
|
|
|
*/
|
2009-02-08 12:10:42 +00:00
|
|
|
private = impl_window;
|
2009-08-31 08:59:21 +00:00
|
|
|
while (!gdk_window_is_toplevel (private))
|
2009-01-20 21:29:19 +00:00
|
|
|
{
|
|
|
|
dx -= private->parent->abs_x + private->x;
|
|
|
|
dy -= private->parent->abs_y + private->y;
|
|
|
|
private = gdk_window_get_impl_window (private->parent);
|
|
|
|
}
|
2009-01-14 21:24:41 +00:00
|
|
|
tmp_gc = _gdk_drawable_get_subwindow_scratch_gc ((GdkWindow *)private);
|
2009-02-08 12:10:42 +00:00
|
|
|
|
2009-08-13 12:25:35 +00:00
|
|
|
gdk_region_get_clipbox (dest_region, ©_rect);
|
|
|
|
gdk_gc_set_clip_region (tmp_gc, dest_region);
|
|
|
|
|
2009-02-08 12:10:42 +00:00
|
|
|
/* The region area is moved and we queue translations for all expose events
|
|
|
|
to the source area that were sent prior to the copy */
|
2009-08-13 12:25:35 +00:00
|
|
|
gdk_region_offset (dest_region, -dx, -dy); /* Move to source region */
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
|
|
|
|
impl_iface->queue_translation ((GdkWindow *)impl_window,
|
|
|
|
tmp_gc,
|
|
|
|
dest_region, dx, dy);
|
2009-02-08 12:10:42 +00:00
|
|
|
|
|
|
|
gdk_draw_drawable (impl_window->impl,
|
2008-12-09 19:13:02 +00:00
|
|
|
tmp_gc,
|
|
|
|
private->impl,
|
|
|
|
copy_rect.x-dx, copy_rect.y-dy,
|
2009-01-27 14:42:12 +00:00
|
|
|
copy_rect.x, copy_rect.y,
|
2008-12-09 19:13:02 +00:00
|
|
|
copy_rect.width, copy_rect.height);
|
|
|
|
gdk_gc_set_clip_region (tmp_gc, NULL);
|
|
|
|
}
|
|
|
|
|
2009-02-08 12:17:37 +00:00
|
|
|
static GdkWindowRegionMove *
|
|
|
|
gdk_window_region_move_new (GdkRegion *region,
|
|
|
|
int dx, int dy)
|
2008-12-09 19:13:02 +00:00
|
|
|
{
|
2009-02-07 17:46:31 +00:00
|
|
|
GdkWindowRegionMove *move;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-09 19:13:02 +00:00
|
|
|
move = g_slice_new (GdkWindowRegionMove);
|
2009-02-08 12:13:56 +00:00
|
|
|
move->dest_region = gdk_region_copy (region);
|
2008-12-09 19:13:02 +00:00
|
|
|
move->dx = dx;
|
|
|
|
move->dy = dy;
|
|
|
|
|
2009-02-08 12:17:37 +00:00
|
|
|
return move;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
gdk_window_region_move_free (GdkWindowRegionMove *move)
|
|
|
|
{
|
|
|
|
gdk_region_destroy (move->dest_region);
|
|
|
|
g_slice_free (GdkWindowRegionMove, move);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
append_move_region (GdkWindowObject *impl_window,
|
2009-02-09 13:18:27 +00:00
|
|
|
GdkRegion *new_dest_region,
|
2009-02-08 12:17:37 +00:00
|
|
|
int dx, int dy)
|
|
|
|
{
|
2009-02-09 13:18:27 +00:00
|
|
|
GdkWindowRegionMove *move, *old_move;
|
|
|
|
GdkRegion *new_total_region, *old_total_region;
|
|
|
|
GdkRegion *source_overlaps_destination;
|
|
|
|
GdkRegion *non_overwritten;
|
|
|
|
gboolean added_move;
|
|
|
|
GList *l, *prev;
|
|
|
|
|
|
|
|
if (gdk_region_empty (new_dest_region))
|
|
|
|
return;
|
|
|
|
|
|
|
|
/* In principle this could just append the move to the list of outstanding
|
|
|
|
moves that will be replayed before drawing anything when we're handling
|
|
|
|
exposes. However, we'd like to do a bit better since its commonly the case
|
|
|
|
that we get multiple copies where A is copied to B and then B is copied
|
|
|
|
to C, and we'd like to express this as a simple copy A to C operation. */
|
|
|
|
|
|
|
|
/* We approach this by taking the new move and pushing it ahead of moves
|
|
|
|
starting at the end of the list and stopping when its not safe to do so.
|
2009-06-24 18:59:29 +00:00
|
|
|
It's not safe to push past a move if either the source of the new move
|
2009-02-09 13:18:27 +00:00
|
|
|
is in the destination of the old move, or if the destination of the new
|
|
|
|
move is in the source of the new move, or if the destination of the new
|
|
|
|
move overlaps the destination of the old move. We simplify this by
|
|
|
|
just comparing the total regions (src + dest) */
|
|
|
|
new_total_region = gdk_region_copy (new_dest_region);
|
|
|
|
gdk_region_offset (new_total_region, -dx, -dy);
|
|
|
|
gdk_region_union (new_total_region, new_dest_region);
|
|
|
|
|
|
|
|
added_move = FALSE;
|
|
|
|
for (l = g_list_last (impl_window->outstanding_moves); l != NULL; l = prev)
|
|
|
|
{
|
|
|
|
prev = l->prev;
|
|
|
|
old_move = l->data;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-09 13:18:27 +00:00
|
|
|
old_total_region = gdk_region_copy (old_move->dest_region);
|
|
|
|
gdk_region_offset (old_total_region, -old_move->dx, -old_move->dy);
|
|
|
|
gdk_region_union (old_total_region, old_move->dest_region);
|
|
|
|
|
|
|
|
gdk_region_intersect (old_total_region, new_total_region);
|
|
|
|
/* If these regions intersect then its not safe to push the
|
|
|
|
new region before the old one */
|
|
|
|
if (!gdk_region_empty (old_total_region))
|
|
|
|
{
|
|
|
|
/* The area where the new moves source overlaps the old ones
|
|
|
|
destination */
|
|
|
|
source_overlaps_destination = gdk_region_copy (new_dest_region);
|
|
|
|
gdk_region_offset (source_overlaps_destination, -dx, -dy);
|
|
|
|
gdk_region_intersect (source_overlaps_destination, old_move->dest_region);
|
|
|
|
gdk_region_offset (source_overlaps_destination, dx, dy);
|
|
|
|
|
|
|
|
/* We can do all sort of optimizations here, but to do things safely it becomes
|
|
|
|
quite complicated. However, a very common case is that you copy something first,
|
|
|
|
then copy all that or a subset of it to a new location (i.e. if you scroll twice
|
|
|
|
in the same direction). We'd like to detect this case and optimize it to one
|
|
|
|
copy. */
|
|
|
|
if (gdk_region_equal (source_overlaps_destination, new_dest_region))
|
|
|
|
{
|
|
|
|
/* This means we might be able to replace the old move and the new one
|
|
|
|
with the new one read from the old ones source, and a second copy of
|
|
|
|
the non-overwritten parts of the old move. However, such a split
|
|
|
|
is only valid if the source in the old move isn't overwritten
|
|
|
|
by the destination of the new one */
|
|
|
|
|
|
|
|
/* the new destination of old move if split is ok: */
|
|
|
|
non_overwritten = gdk_region_copy (old_move->dest_region);
|
|
|
|
gdk_region_subtract (non_overwritten, new_dest_region);
|
|
|
|
/* move to source region */
|
|
|
|
gdk_region_offset (non_overwritten, -old_move->dx, -old_move->dy);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-09 13:18:27 +00:00
|
|
|
gdk_region_intersect (non_overwritten, new_dest_region);
|
|
|
|
if (gdk_region_empty (non_overwritten))
|
|
|
|
{
|
|
|
|
added_move = TRUE;
|
|
|
|
move = gdk_window_region_move_new (new_dest_region,
|
|
|
|
dx + old_move->dx,
|
|
|
|
dy + old_move->dy);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-09 13:18:27 +00:00
|
|
|
impl_window->outstanding_moves =
|
|
|
|
g_list_insert_before (impl_window->outstanding_moves,
|
|
|
|
l, move);
|
|
|
|
gdk_region_subtract (old_move->dest_region, new_dest_region);
|
|
|
|
}
|
|
|
|
gdk_region_destroy (non_overwritten);
|
|
|
|
}
|
|
|
|
|
|
|
|
gdk_region_destroy (source_overlaps_destination);
|
|
|
|
gdk_region_destroy (old_total_region);
|
2009-06-01 10:04:36 +00:00
|
|
|
break;
|
2009-02-09 13:18:27 +00:00
|
|
|
}
|
|
|
|
gdk_region_destroy (old_total_region);
|
|
|
|
}
|
2009-02-08 12:17:37 +00:00
|
|
|
|
2009-02-09 13:18:27 +00:00
|
|
|
gdk_region_destroy (new_total_region);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-09 13:18:27 +00:00
|
|
|
if (!added_move)
|
|
|
|
{
|
|
|
|
move = gdk_window_region_move_new (new_dest_region, dx, dy);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-09 13:18:27 +00:00
|
|
|
if (l == NULL)
|
|
|
|
impl_window->outstanding_moves =
|
|
|
|
g_list_prepend (impl_window->outstanding_moves,
|
|
|
|
move);
|
|
|
|
else
|
|
|
|
impl_window->outstanding_moves =
|
|
|
|
g_list_insert_before (impl_window->outstanding_moves,
|
|
|
|
l->next, move);
|
|
|
|
}
|
2008-12-09 19:13:02 +00:00
|
|
|
}
|
|
|
|
|
2009-08-13 11:35:58 +00:00
|
|
|
/* Moves bits and update area by dx/dy in impl window.
|
|
|
|
Takes ownership of region to avoid copy (because we may change it) */
|
2008-12-09 19:13:02 +00:00
|
|
|
static void
|
2009-09-14 11:38:47 +00:00
|
|
|
move_region_on_impl (GdkWindowObject *impl_window,
|
2008-12-09 19:13:02 +00:00
|
|
|
GdkRegion *region, /* In impl window coords */
|
|
|
|
int dx, int dy)
|
|
|
|
{
|
2009-01-20 21:17:06 +00:00
|
|
|
if ((dx == 0 && dy == 0) ||
|
|
|
|
gdk_region_empty (region))
|
2009-02-09 09:35:19 +00:00
|
|
|
{
|
|
|
|
gdk_region_destroy (region);
|
|
|
|
return;
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-09-14 11:38:47 +00:00
|
|
|
g_assert (impl_window == gdk_window_get_impl_window (impl_window));
|
2008-12-09 19:13:02 +00:00
|
|
|
|
|
|
|
/* Move any old invalid regions in the copy source area by dx/dy */
|
|
|
|
if (impl_window->update_area)
|
|
|
|
{
|
|
|
|
GdkRegion *update_area;
|
2009-09-14 11:38:47 +00:00
|
|
|
|
2008-12-09 19:13:02 +00:00
|
|
|
update_area = gdk_region_copy (region);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-09 19:13:02 +00:00
|
|
|
/* Convert from target to source */
|
|
|
|
gdk_region_offset (update_area, -dx, -dy);
|
|
|
|
gdk_region_intersect (update_area, impl_window->update_area);
|
2009-08-13 11:04:28 +00:00
|
|
|
/* We only copy the area, so keep the old update area invalid.
|
|
|
|
It would be safe to remove it too, as code that uses
|
|
|
|
move_region_on_impl generally also invalidate the source
|
|
|
|
area. However, it would just use waste cycles. */
|
2009-02-07 17:46:31 +00:00
|
|
|
|
2008-12-09 19:13:02 +00:00
|
|
|
/* Convert back */
|
|
|
|
gdk_region_offset (update_area, dx, dy);
|
|
|
|
gdk_region_union (impl_window->update_area, update_area);
|
2009-02-08 12:35:17 +00:00
|
|
|
|
|
|
|
/* This area of the destination is now invalid,
|
|
|
|
so no need to copy to it. */
|
|
|
|
gdk_region_subtract (region, update_area);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-09 19:13:02 +00:00
|
|
|
gdk_region_destroy (update_area);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-09-14 11:38:47 +00:00
|
|
|
/* If we're currently exposing this window, don't copy to this
|
|
|
|
destination, as it will be overdrawn when the expose is done,
|
|
|
|
instead invalidate it and repaint later. */
|
|
|
|
if (impl_window->implicit_paint)
|
|
|
|
{
|
|
|
|
GdkWindowPaint *implicit_paint = impl_window->implicit_paint;
|
|
|
|
GdkRegion *exposing;
|
|
|
|
|
|
|
|
exposing = gdk_region_copy (implicit_paint->region);
|
|
|
|
gdk_region_intersect (exposing, region);
|
|
|
|
gdk_region_subtract (region, exposing);
|
|
|
|
|
|
|
|
impl_window_add_update_area (impl_window, exposing);
|
|
|
|
gdk_region_destroy (exposing);
|
|
|
|
}
|
|
|
|
|
2010-01-19 13:44:52 +00:00
|
|
|
if (impl_window->outstanding_surfaces == 0) /* Enable flicker free handling of moves. */
|
2009-02-08 12:35:17 +00:00
|
|
|
append_move_region (impl_window, region, dx, dy);
|
|
|
|
else
|
|
|
|
do_move_region_bits_on_impl (impl_window,
|
|
|
|
region, dx, dy);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-08 12:35:17 +00:00
|
|
|
gdk_region_destroy (region);
|
2008-12-09 19:13:02 +00:00
|
|
|
}
|
|
|
|
|
2008-12-09 11:26:01 +00:00
|
|
|
/* Flushes all outstanding changes to the window, call this
|
|
|
|
* before drawing directly to the window (i.e. outside a begin/end_paint pair).
|
|
|
|
*/
|
|
|
|
static void
|
2009-01-22 19:50:06 +00:00
|
|
|
gdk_window_flush_outstanding_moves (GdkWindow *window)
|
2008-12-09 11:26:01 +00:00
|
|
|
{
|
2008-12-09 19:13:02 +00:00
|
|
|
GdkWindowObject *private;
|
|
|
|
GdkWindowObject *impl_window;
|
|
|
|
GList *l;
|
|
|
|
GdkWindowRegionMove *move;
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-09 19:13:02 +00:00
|
|
|
impl_window = gdk_window_get_impl_window (private);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-09 19:13:02 +00:00
|
|
|
for (l = impl_window->outstanding_moves; l != NULL; l = l->next)
|
|
|
|
{
|
|
|
|
move = l->data;
|
|
|
|
|
2009-02-08 12:10:42 +00:00
|
|
|
do_move_region_bits_on_impl (impl_window,
|
2009-02-08 12:13:56 +00:00
|
|
|
move->dest_region, move->dx, move->dy);
|
2008-12-09 19:13:02 +00:00
|
|
|
|
2009-02-08 12:17:37 +00:00
|
|
|
gdk_window_region_move_free (move);
|
2008-12-09 19:13:02 +00:00
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-09 19:13:02 +00:00
|
|
|
g_list_free (impl_window->outstanding_moves);
|
|
|
|
impl_window->outstanding_moves = NULL;
|
2009-01-22 19:50:06 +00:00
|
|
|
}
|
|
|
|
|
2009-09-14 14:07:25 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_flush:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
*
|
|
|
|
* Flush all outstanding cached operations on a window, leaving the
|
|
|
|
* window in a state which reflects all that has been drawn before.
|
|
|
|
*
|
|
|
|
* Gdk uses multiple kinds of caching to get better performance and
|
|
|
|
* nicer drawing. For instance, during exposes all paints to a window
|
|
|
|
* using double buffered rendering are keep on a pixmap until the last
|
|
|
|
* window has been exposed. It also delays window moves/scrolls until
|
|
|
|
* as long as possible until next update to avoid tearing when moving
|
|
|
|
* windows.
|
|
|
|
*
|
|
|
|
* Normally this should be completely invisible to applications, as
|
|
|
|
* we automatically flush the windows when required, but this might
|
|
|
|
* be needed if you for instance mix direct native drawing with
|
|
|
|
* gdk drawing. For Gtk widgets that don't use double buffering this
|
|
|
|
* will be called automatically before sending the expose event.
|
|
|
|
*
|
|
|
|
* Since: 2.18
|
|
|
|
**/
|
|
|
|
void
|
2009-01-22 19:50:06 +00:00
|
|
|
gdk_window_flush (GdkWindow *window)
|
|
|
|
{
|
|
|
|
gdk_window_flush_outstanding_moves (window);
|
2008-12-09 11:26:01 +00:00
|
|
|
gdk_window_flush_implicit_paint (window);
|
|
|
|
}
|
|
|
|
|
2009-09-14 11:44:09 +00:00
|
|
|
/* If we're about to move/resize or otherwise change the
|
|
|
|
* hierarchy of a client side window in an impl and we're
|
|
|
|
* called from an expose event handler then we need to
|
|
|
|
* flush any already painted parts of the implicit paint
|
|
|
|
* that are not part of the current paint, as these may
|
|
|
|
* be used when scrolling or may overdraw the changes
|
|
|
|
* caused by the hierarchy change.
|
|
|
|
*/
|
|
|
|
static void
|
|
|
|
gdk_window_flush_if_exposing (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
|
|
|
GdkWindowObject *impl_window;
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
impl_window = gdk_window_get_impl_window (private);
|
|
|
|
|
|
|
|
/* If we're in an implicit paint (i.e. in an expose handler, flush
|
|
|
|
all the already finished exposes to get things to an uptodate state. */
|
|
|
|
if (impl_window->implicit_paint)
|
|
|
|
gdk_window_flush (window);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
static void
|
|
|
|
gdk_window_flush_recursive_helper (GdkWindowObject *window,
|
|
|
|
GdkWindow *impl)
|
|
|
|
{
|
|
|
|
GdkWindowObject *child;
|
|
|
|
GList *l;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
for (l = window->children; l != NULL; l = l->next)
|
|
|
|
{
|
|
|
|
child = l->data;
|
|
|
|
|
|
|
|
if (child->impl == impl)
|
|
|
|
/* Same impl, ignore */
|
|
|
|
gdk_window_flush_recursive_helper (child, impl);
|
|
|
|
else
|
|
|
|
gdk_window_flush_recursive (child);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
gdk_window_flush_recursive (GdkWindowObject *window)
|
|
|
|
{
|
|
|
|
gdk_window_flush ((GdkWindow *)window);
|
|
|
|
gdk_window_flush_recursive_helper (window, window->impl);
|
|
|
|
}
|
|
|
|
|
2000-03-28 01:24:44 +00:00
|
|
|
static void
|
|
|
|
gdk_window_get_offsets (GdkWindow *window,
|
|
|
|
gint *x_offset,
|
|
|
|
gint *y_offset)
|
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
2008-07-02 20:22:30 +00:00
|
|
|
|
2000-03-28 01:24:44 +00:00
|
|
|
if (private->paint_stack)
|
|
|
|
{
|
|
|
|
GdkWindowPaint *paint = private->paint_stack->data;
|
|
|
|
*x_offset = paint->x_offset;
|
|
|
|
*y_offset = paint->y_offset;
|
|
|
|
}
|
|
|
|
else
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
*x_offset = -private->abs_x;
|
|
|
|
*y_offset = -private->abs_y;
|
|
|
|
}
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
2001-07-18 20:09:28 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_get_internal_paint_info:
|
|
|
|
* @window: a #GdkWindow
|
2009-08-18 18:35:10 +00:00
|
|
|
* @real_drawable: (out): location to store the drawable to which drawing should be
|
2002-01-13 20:13:34 +00:00
|
|
|
* done.
|
2009-08-18 18:35:10 +00:00
|
|
|
* @x_offset: (out): location to store the X offset between coordinates in @window,
|
2009-06-01 10:04:36 +00:00
|
|
|
* and the underlying window system primitive coordinates for
|
2002-01-13 20:13:34 +00:00
|
|
|
* *@real_drawable.
|
2009-08-18 18:35:10 +00:00
|
|
|
* @y_offset: (out): location to store the Y offset between coordinates in @window,
|
2002-01-13 20:13:34 +00:00
|
|
|
* and the underlying window system primitive coordinates for
|
|
|
|
* *@real_drawable.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-07-18 20:09:28 +00:00
|
|
|
* If you bypass the GDK layer and use windowing system primitives to
|
|
|
|
* draw directly onto a #GdkWindow, then you need to deal with two
|
|
|
|
* details: there may be an offset between GDK coordinates and windowing
|
|
|
|
* system coordinates, and GDK may have redirected drawing to a offscreen
|
|
|
|
* pixmap as the result of a gdk_window_begin_paint_region() calls.
|
|
|
|
* This function allows retrieving the information you need to compensate
|
|
|
|
* for these effects.
|
|
|
|
*
|
|
|
|
* This function exposes details of the GDK implementation, and is thus
|
|
|
|
* likely to change in future releases of GDK.
|
|
|
|
**/
|
|
|
|
void
|
|
|
|
gdk_window_get_internal_paint_info (GdkWindow *window,
|
|
|
|
GdkDrawable **real_drawable,
|
|
|
|
gint *x_offset,
|
|
|
|
gint *y_offset)
|
|
|
|
{
|
|
|
|
gint x_off, y_off;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2001-07-18 20:09:28 +00:00
|
|
|
GdkWindowObject *private;
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
private = (GdkWindowObject *)window;
|
|
|
|
|
|
|
|
if (real_drawable)
|
|
|
|
{
|
|
|
|
if (private->paint_stack)
|
|
|
|
{
|
|
|
|
GdkWindowPaint *paint = private->paint_stack->data;
|
|
|
|
*real_drawable = paint->pixmap;
|
|
|
|
}
|
|
|
|
else
|
2009-01-22 19:46:08 +00:00
|
|
|
{
|
|
|
|
/* This means you're probably gonna be doing some weird shit
|
|
|
|
directly to the window, so we flush all outstanding stuff */
|
|
|
|
gdk_window_flush (window);
|
|
|
|
*real_drawable = window;
|
|
|
|
}
|
2001-07-18 20:09:28 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
gdk_window_get_offsets (window, &x_off, &y_off);
|
|
|
|
|
|
|
|
if (x_offset)
|
|
|
|
*x_offset = x_off;
|
|
|
|
if (y_offset)
|
|
|
|
*y_offset = y_off;
|
|
|
|
}
|
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
static GdkDrawable *
|
|
|
|
start_draw_helper (GdkDrawable *drawable,
|
|
|
|
GdkGC *gc,
|
|
|
|
gint *x_offset_out,
|
|
|
|
gint *y_offset_out)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *)drawable;
|
2009-06-01 12:45:22 +00:00
|
|
|
gint x_offset, y_offset;
|
|
|
|
GdkDrawable *impl;
|
|
|
|
gint old_clip_x = gc->clip_x_origin;
|
|
|
|
gint old_clip_y = gc->clip_y_origin;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkRegion *clip;
|
2009-06-01 12:45:22 +00:00
|
|
|
guint32 clip_region_tag;
|
|
|
|
GdkWindowPaint *paint;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
paint = NULL;
|
|
|
|
if (private->paint_stack)
|
|
|
|
paint = private->paint_stack->data;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
if (paint)
|
|
|
|
{
|
|
|
|
x_offset = paint->x_offset;
|
|
|
|
y_offset = paint->y_offset;
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
else
|
2009-06-01 12:45:22 +00:00
|
|
|
{
|
|
|
|
x_offset = -private->abs_x;
|
|
|
|
y_offset = -private->abs_y;
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
if (x_offset != 0 || y_offset != 0)
|
|
|
|
{
|
|
|
|
gdk_gc_set_clip_origin (gc,
|
|
|
|
old_clip_x - x_offset,
|
|
|
|
old_clip_y - y_offset);
|
|
|
|
gdk_gc_set_ts_origin (gc,
|
|
|
|
gc->ts_x_origin - x_offset,
|
|
|
|
gc->ts_y_origin - y_offset);
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
*x_offset_out = x_offset;
|
|
|
|
*y_offset_out = y_offset;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
/* Add client side window clip region to gc */
|
|
|
|
clip = NULL;
|
|
|
|
if (paint)
|
|
|
|
{
|
|
|
|
/* Only need clipping if using implicit paint, otherwise
|
|
|
|
the pixmap is clipped when copying to the window in end_paint */
|
|
|
|
if (paint->uses_implicit)
|
|
|
|
{
|
|
|
|
/* This includes the window clip */
|
|
|
|
clip = paint->region;
|
|
|
|
}
|
|
|
|
clip_region_tag = paint->region_tag;
|
2000-03-28 01:24:44 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
/* After having set up the drawable clip rect on a GC we need to make sure
|
|
|
|
* that we draw to th the impl, otherwise the pixmap code will reset the
|
|
|
|
* drawable clip. */
|
|
|
|
impl = ((GdkPixmapObject *)(paint->pixmap))->impl;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* Drawing directly to the window, flush anything outstanding to
|
|
|
|
guarantee ordering. */
|
|
|
|
gdk_window_flush ((GdkWindow *)drawable);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-08-24 13:18:10 +00:00
|
|
|
/* Don't clip when drawing to root or all native */
|
|
|
|
if (!_gdk_native_windows && private->window_type != GDK_WINDOW_ROOT)
|
2009-06-01 12:45:22 +00:00
|
|
|
{
|
|
|
|
if (_gdk_gc_get_subwindow (gc) == GDK_CLIP_BY_CHILDREN)
|
|
|
|
clip = private->clip_region_with_children;
|
|
|
|
else
|
|
|
|
clip = private->clip_region;
|
|
|
|
}
|
|
|
|
clip_region_tag = private->clip_tag;
|
|
|
|
impl = private->impl;
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
if (clip)
|
|
|
|
_gdk_gc_add_drawable_clip (gc,
|
|
|
|
clip_region_tag, clip,
|
|
|
|
/* If there was a clip origin set appart from the
|
|
|
|
* window offset, need to take that into
|
|
|
|
* consideration */
|
|
|
|
-old_clip_x, -old_clip_y);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
return impl;
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
#define BEGIN_DRAW \
|
|
|
|
{ \
|
|
|
|
GdkDrawable *impl; \
|
|
|
|
gint x_offset, y_offset; \
|
|
|
|
gint old_clip_x = gc->clip_x_origin; \
|
|
|
|
gint old_clip_y = gc->clip_y_origin; \
|
|
|
|
gint old_ts_x = gc->ts_x_origin; \
|
|
|
|
gint old_ts_y = gc->ts_y_origin; \
|
|
|
|
impl = start_draw_helper (drawable, gc, \
|
|
|
|
&x_offset, &y_offset);
|
|
|
|
|
|
|
|
#define END_DRAW \
|
|
|
|
if (x_offset != 0 || y_offset != 0) \
|
|
|
|
{ \
|
|
|
|
gdk_gc_set_clip_origin (gc, old_clip_x, old_clip_y); \
|
|
|
|
gdk_gc_set_ts_origin (gc, old_ts_x, old_ts_y); \
|
|
|
|
} \
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2000-03-28 01:24:44 +00:00
|
|
|
static GdkGC *
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
gdk_window_create_gc (GdkDrawable *drawable,
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkGCValues *values,
|
|
|
|
GdkGCValuesMask mask)
|
2000-03-28 01:24:44 +00:00
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (drawable), NULL);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (drawable))
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
return gdk_gc_new_with_values (((GdkWindowObject *) drawable)->impl,
|
2009-06-01 10:04:36 +00:00
|
|
|
values, mask);
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
gdk_window_draw_rectangle (GdkDrawable *drawable,
|
|
|
|
GdkGC *gc,
|
2002-10-16 18:41:42 +00:00
|
|
|
gboolean filled,
|
2000-03-28 01:24:44 +00:00
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
gint width,
|
|
|
|
gint height)
|
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (drawable))
|
|
|
|
return;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
BEGIN_DRAW;
|
|
|
|
gdk_draw_rectangle (impl, gc, filled,
|
|
|
|
x - x_offset, y - y_offset, width, height);
|
|
|
|
END_DRAW;
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
gdk_window_draw_arc (GdkDrawable *drawable,
|
|
|
|
GdkGC *gc,
|
2002-10-16 18:41:42 +00:00
|
|
|
gboolean filled,
|
2000-03-28 01:24:44 +00:00
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
gint width,
|
|
|
|
gint height,
|
|
|
|
gint angle1,
|
|
|
|
gint angle2)
|
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (drawable))
|
|
|
|
return;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
BEGIN_DRAW;
|
|
|
|
gdk_draw_arc (impl, gc, filled,
|
|
|
|
x - x_offset, y - y_offset,
|
|
|
|
width, height, angle1, angle2);
|
|
|
|
END_DRAW;
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
gdk_window_draw_polygon (GdkDrawable *drawable,
|
|
|
|
GdkGC *gc,
|
2002-10-16 18:41:42 +00:00
|
|
|
gboolean filled,
|
2000-03-28 01:24:44 +00:00
|
|
|
GdkPoint *points,
|
|
|
|
gint npoints)
|
|
|
|
{
|
|
|
|
GdkPoint *new_points;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (drawable))
|
|
|
|
return;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
BEGIN_DRAW;
|
|
|
|
|
2000-03-28 01:24:44 +00:00
|
|
|
if (x_offset != 0 || y_offset != 0)
|
|
|
|
{
|
|
|
|
int i;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2000-03-28 01:24:44 +00:00
|
|
|
new_points = g_new (GdkPoint, npoints);
|
|
|
|
for (i=0; i<npoints; i++)
|
|
|
|
{
|
|
|
|
new_points[i].x = points[i].x - x_offset;
|
|
|
|
new_points[i].y = points[i].y - y_offset;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
new_points = points;
|
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
gdk_draw_polygon (impl, gc, filled, new_points, npoints);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2000-03-28 01:24:44 +00:00
|
|
|
if (new_points != points)
|
|
|
|
g_free (new_points);
|
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
END_DRAW;
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
gdk_window_draw_text (GdkDrawable *drawable,
|
|
|
|
GdkFont *font,
|
|
|
|
GdkGC *gc,
|
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
const gchar *text,
|
|
|
|
gint text_length)
|
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (drawable))
|
|
|
|
return;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
BEGIN_DRAW;
|
|
|
|
gdk_draw_text (impl, font, gc,
|
|
|
|
x - x_offset, y - y_offset, text, text_length);
|
|
|
|
END_DRAW;
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
gdk_window_draw_text_wc (GdkDrawable *drawable,
|
|
|
|
GdkFont *font,
|
|
|
|
GdkGC *gc,
|
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
const GdkWChar *text,
|
|
|
|
gint text_length)
|
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (drawable))
|
|
|
|
return;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
BEGIN_DRAW;
|
|
|
|
gdk_draw_text_wc (impl, font, gc,
|
|
|
|
x - x_offset, y - y_offset, text, text_length);
|
|
|
|
END_DRAW;
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static GdkDrawable *
|
|
|
|
gdk_window_get_source_drawable (GdkDrawable *drawable)
|
|
|
|
{
|
|
|
|
GdkWindow *window = GDK_WINDOW (drawable);
|
|
|
|
GdkWindowObject *private;
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
if (GDK_DRAWABLE_GET_CLASS (private->impl)->get_source_drawable)
|
|
|
|
return GDK_DRAWABLE_GET_CLASS (private->impl)->get_source_drawable (private->impl);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
return drawable;
|
|
|
|
}
|
|
|
|
|
|
|
|
static GdkDrawable *
|
2003-07-09 18:00:21 +00:00
|
|
|
gdk_window_get_composite_drawable (GdkDrawable *drawable,
|
2009-06-01 10:04:36 +00:00
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
gint width,
|
|
|
|
gint height,
|
|
|
|
gint *composite_x_offset,
|
|
|
|
gint *composite_y_offset)
|
2000-10-24 00:15:14 +00:00
|
|
|
{
|
2003-07-09 18:00:21 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *)drawable;
|
2003-08-20 21:11:25 +00:00
|
|
|
GSList *list;
|
2000-10-24 00:15:14 +00:00
|
|
|
GdkPixmap *tmp_pixmap;
|
|
|
|
GdkRectangle rect;
|
|
|
|
GdkGC *tmp_gc;
|
2003-08-20 21:11:25 +00:00
|
|
|
gboolean overlap_buffer;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkDrawable *source;
|
|
|
|
GdkWindowObject *impl_window;
|
|
|
|
GdkWindowPaint *implicit_paint;
|
2000-10-24 00:15:14 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
*composite_x_offset = -private->abs_x;
|
|
|
|
*composite_y_offset = -private->abs_y;
|
2000-10-24 00:15:14 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if ((GDK_IS_WINDOW (drawable) && GDK_WINDOW_DESTROYED (drawable)))
|
|
|
|
return g_object_ref (_gdk_drawable_get_source_drawable (drawable));
|
|
|
|
|
|
|
|
/* See if any buffered part is overlapping the part we want
|
2000-10-24 00:15:14 +00:00
|
|
|
* to get
|
|
|
|
*/
|
|
|
|
rect.x = x;
|
|
|
|
rect.y = y;
|
|
|
|
rect.width = width;
|
|
|
|
rect.height = height;
|
|
|
|
|
2003-08-20 21:11:25 +00:00
|
|
|
overlap_buffer = FALSE;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2003-08-20 21:11:25 +00:00
|
|
|
for (list = private->paint_stack; list != NULL; list = list->next)
|
2000-10-24 00:15:14 +00:00
|
|
|
{
|
2003-08-20 21:11:25 +00:00
|
|
|
GdkWindowPaint *paint = list->data;
|
|
|
|
GdkOverlapType overlap;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2003-08-20 21:11:25 +00:00
|
|
|
overlap = gdk_region_rect_in (paint->region, &rect);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2003-08-20 21:11:25 +00:00
|
|
|
if (overlap == GDK_OVERLAP_RECTANGLE_IN)
|
|
|
|
{
|
|
|
|
*composite_x_offset = paint->x_offset;
|
|
|
|
*composite_y_offset = paint->y_offset;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2003-08-20 21:11:25 +00:00
|
|
|
return g_object_ref (paint->pixmap);
|
|
|
|
}
|
|
|
|
else if (overlap == GDK_OVERLAP_RECTANGLE_PART)
|
|
|
|
{
|
|
|
|
overlap_buffer = TRUE;
|
|
|
|
break;
|
|
|
|
}
|
2000-10-24 00:15:14 +00:00
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
impl_window = gdk_window_get_impl_window (private);
|
|
|
|
implicit_paint = impl_window->implicit_paint;
|
|
|
|
if (implicit_paint)
|
|
|
|
{
|
|
|
|
GdkOverlapType overlap;
|
|
|
|
|
|
|
|
rect.x += private->abs_x;
|
|
|
|
rect.y += private->abs_y;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
overlap = gdk_region_rect_in (implicit_paint->region, &rect);
|
|
|
|
if (overlap == GDK_OVERLAP_RECTANGLE_IN)
|
|
|
|
{
|
|
|
|
*composite_x_offset = -private->abs_x + implicit_paint->x_offset;
|
|
|
|
*composite_y_offset = -private->abs_y + implicit_paint->y_offset;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
return g_object_ref (implicit_paint->pixmap);
|
|
|
|
}
|
|
|
|
else if (overlap == GDK_OVERLAP_RECTANGLE_PART)
|
|
|
|
overlap_buffer = TRUE;
|
|
|
|
}
|
2003-08-20 21:11:25 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (!overlap_buffer)
|
|
|
|
return g_object_ref (_gdk_drawable_get_source_drawable (drawable));
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2003-08-20 21:11:25 +00:00
|
|
|
tmp_pixmap = gdk_pixmap_new (drawable, width, height, -1);
|
2004-02-18 00:59:14 +00:00
|
|
|
tmp_gc = _gdk_drawable_get_scratch_gc (tmp_pixmap, FALSE);
|
2000-10-24 00:15:14 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
source = _gdk_drawable_get_source_drawable (drawable);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2000-10-24 00:15:14 +00:00
|
|
|
/* Copy the current window contents */
|
|
|
|
gdk_draw_drawable (tmp_pixmap,
|
2009-06-01 10:04:36 +00:00
|
|
|
tmp_gc,
|
|
|
|
GDK_WINDOW_OBJECT (source)->impl,
|
|
|
|
x - *composite_x_offset,
|
|
|
|
y - *composite_y_offset,
|
|
|
|
0, 0,
|
|
|
|
width, height);
|
2000-10-24 00:15:14 +00:00
|
|
|
|
2003-08-20 21:11:25 +00:00
|
|
|
/* paint the backing stores */
|
2008-07-18 13:03:42 +00:00
|
|
|
if (implicit_paint)
|
|
|
|
{
|
|
|
|
GdkWindowPaint *paint = list->data;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_gc_set_clip_region (tmp_gc, paint->region);
|
|
|
|
gdk_gc_set_clip_origin (tmp_gc, -x - paint->x_offset, -y - paint->y_offset);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_draw_drawable (tmp_pixmap, tmp_gc, paint->pixmap,
|
|
|
|
x - paint->x_offset,
|
|
|
|
y - paint->y_offset,
|
|
|
|
0, 0, width, height);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2003-08-20 21:11:25 +00:00
|
|
|
for (list = private->paint_stack; list != NULL; list = list->next)
|
|
|
|
{
|
|
|
|
GdkWindowPaint *paint = list->data;
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (paint->uses_implicit)
|
|
|
|
continue; /* We already copied this above */
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2003-08-20 21:11:25 +00:00
|
|
|
gdk_gc_set_clip_region (tmp_gc, paint->region);
|
|
|
|
gdk_gc_set_clip_origin (tmp_gc, -x, -y);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2003-08-20 21:11:25 +00:00
|
|
|
gdk_draw_drawable (tmp_pixmap, tmp_gc, paint->pixmap,
|
|
|
|
x - paint->x_offset,
|
|
|
|
y - paint->y_offset,
|
|
|
|
0, 0, width, height);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2004-02-18 13:52:12 +00:00
|
|
|
/* Reset clip region of the cached GdkGC */
|
|
|
|
gdk_gc_set_clip_region (tmp_gc, NULL);
|
|
|
|
|
2000-10-24 00:15:14 +00:00
|
|
|
/* Set these to location of tmp_pixmap within the window */
|
|
|
|
*composite_x_offset = x;
|
|
|
|
*composite_y_offset = y;
|
|
|
|
|
|
|
|
return tmp_pixmap;
|
|
|
|
}
|
|
|
|
|
2000-12-15 01:46:41 +00:00
|
|
|
static GdkRegion*
|
|
|
|
gdk_window_get_clip_region (GdkDrawable *drawable)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *)drawable;
|
|
|
|
GdkRegion *result;
|
|
|
|
|
2009-07-20 21:18:41 +00:00
|
|
|
result = gdk_region_copy (private->clip_region);
|
2000-12-15 01:46:41 +00:00
|
|
|
|
|
|
|
if (private->paint_stack)
|
|
|
|
{
|
|
|
|
GdkRegion *paint_region = gdk_region_new ();
|
|
|
|
GSList *tmp_list = private->paint_stack;
|
|
|
|
|
|
|
|
while (tmp_list)
|
|
|
|
{
|
|
|
|
GdkWindowPaint *paint = tmp_list->data;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2000-12-15 01:46:41 +00:00
|
|
|
gdk_region_union (paint_region, paint->region);
|
Clip the retrieved image data to the screen, using a server grab to avoid
2001-06-28 Havoc Pennington <hp@pobox.com>
* gdk/x11/gdkimage-x11.c (_gdk_x11_get_image): Clip the retrieved
image data to the screen, using a server grab to avoid race
conditions.
* gtk/gtkitemfactory.c (gtk_item_factory_create_item): remove
check for NULL return from gtk_image_new_from_stock(), it never
returns NULL.
(gtk_item_factory_create_item): fix bug where we parsed the stock
ID as an inline pixbuf
* gtk/gtktext.c (gtk_text_key_press): numeric keypad support
* gtk/gtkspinbutton.c (gtk_spin_button_key_press): numeric keypad
support (should be using binding set here)
* gtk/gtkoptionmenu.c (gtk_option_menu_key_press): numeric keypad
support (should be using binding set here)
* gtk/gtkmenushell.c (gtk_menu_shell_class_init): numeric keypad
support
* gtk/gtkmenu.c (gtk_menu_class_init): numeric keypad support
* gtk/gtkmenubar.c (gtk_menu_bar_class_init): numeric keypad
* gtk/gtklistitem.c (gtk_list_item_class_init): numeric keypad
* gtk/gtkimcontextsimple.c
(gtk_im_context_simple_filter_keypress): keypad
* gtk/gtkfilesel.c (gtk_file_selection_key_press): keypad
* gtk/gtkentry.c (gtk_entry_class_init): numeric keypad fixes
* gtk/gtkctree.c (gtk_ctree_class_init): numeric keypad support
* gtk/gtkcolorsel.c (palette_activate): keypad support (of course,
should be binding-setted)
* gtk/gtkwindow.c (gtk_window_class_init): numeric keypad fixes
* gtk/gtkclist.c (gtk_clist_class_init): numeric keypad fixes
* gtk/gtkcalendar.c: numeric keypad fixes
* gtk/gtktextview.c (gtk_text_view_class_init): numeric keypad
support
* gdk/gdkwindow.c (gdk_window_get_clip_region): fix infinite loop
screwup
* gdk/gdkpixbuf-render.c (gdk_pixbuf_render_to_drawable_alpha):
clip the render area to the drawable's clip region in advance,
so we don't get data from the server that we don't need.
* gdk/gdkpixbuf-render.c (gdk_pixbuf_render_to_drawable_alpha):
check return value of gdk_pixbuf_get_from_drawable(), fall back
to bilevel alpha if we can't get the pixbuf to composite against.
* gdk/gdkdraw.c (gdk_drawable_get_image): set the image colormap
* gdk/gdkimage.c (gdk_image_get_colormap): add
gdk_image_set_colormap, gdk_image_get_colormap
* gdk/gdkpixbuf-drawable.c (rgbconvert): Change all converters to
take a region of the image, instead of converting the entire
image.
* gtk/gtkwidget.h (struct _GtkWidgetClass): add show_help
keybinding signal. Add default bindings for it. Add default
handler for show_help that shows the tooltip for the widget.
* gtk/gtkdialog.c (gtk_dialog_class_init): add binding set and
"close" keybinding signal, remove key press handler.
* gtk/gtktooltips.c (gtk_tooltips_set_colors): Just remove this,
it's not our usual practice to leave a deprecated function around
with a runtime warning, plus we don't want it to appear in docs,
plus if we make them yellow no one will want to change them
anyhow.
2001-06-29 01:59:02 +00:00
|
|
|
|
2009-06-01 10:04:36 +00:00
|
|
|
tmp_list = tmp_list->next;
|
2000-12-15 01:46:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
gdk_region_intersect (result, paint_region);
|
|
|
|
gdk_region_destroy (paint_region);
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2009-07-20 21:18:41 +00:00
|
|
|
static GdkRegion*
|
|
|
|
gdk_window_get_visible_region (GdkDrawable *drawable)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject*) drawable;
|
|
|
|
|
|
|
|
return gdk_region_copy (private->clip_region);
|
|
|
|
}
|
|
|
|
|
2000-03-28 01:24:44 +00:00
|
|
|
static void
|
|
|
|
gdk_window_draw_drawable (GdkDrawable *drawable,
|
|
|
|
GdkGC *gc,
|
|
|
|
GdkPixmap *src,
|
|
|
|
gint xsrc,
|
|
|
|
gint ysrc,
|
|
|
|
gint xdest,
|
|
|
|
gint ydest,
|
|
|
|
gint width,
|
2009-07-01 14:13:31 +00:00
|
|
|
gint height,
|
|
|
|
GdkDrawable *original_src)
|
2000-03-28 01:24:44 +00:00
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *)drawable;
|
2009-05-27 15:08:09 +00:00
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (drawable))
|
|
|
|
return;
|
2000-10-24 00:15:14 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
BEGIN_DRAW;
|
2009-05-27 15:08:09 +00:00
|
|
|
|
2009-08-25 08:34:10 +00:00
|
|
|
/* Call the method directly to avoid getting the composite drawable again */
|
|
|
|
GDK_DRAWABLE_GET_CLASS (impl)->draw_drawable_with_src (impl, gc,
|
|
|
|
src,
|
|
|
|
xsrc, ysrc,
|
|
|
|
xdest - x_offset,
|
|
|
|
ydest - y_offset,
|
|
|
|
width, height,
|
|
|
|
original_src);
|
2009-06-01 12:45:22 +00:00
|
|
|
|
|
|
|
if (!private->paint_stack)
|
|
|
|
{
|
2009-05-27 15:08:09 +00:00
|
|
|
/* We might have drawn from an obscured part of a client
|
|
|
|
side window, if so we need to send graphics exposures */
|
|
|
|
if (_gdk_gc_get_exposures (gc) &&
|
|
|
|
GDK_IS_WINDOW (original_src))
|
|
|
|
{
|
|
|
|
GdkRegion *exposure_region;
|
|
|
|
GdkRegion *clip;
|
|
|
|
GdkRectangle r;
|
|
|
|
|
|
|
|
r.x = xdest;
|
|
|
|
r.y = ydest;
|
|
|
|
r.width = width;
|
|
|
|
r.height = height;
|
|
|
|
exposure_region = gdk_region_rectangle (&r);
|
|
|
|
|
|
|
|
if (_gdk_gc_get_subwindow (gc) == GDK_CLIP_BY_CHILDREN)
|
|
|
|
clip = private->clip_region_with_children;
|
|
|
|
else
|
|
|
|
clip = private->clip_region;
|
|
|
|
gdk_region_intersect (exposure_region, clip);
|
|
|
|
|
2009-09-04 14:01:35 +00:00
|
|
|
_gdk_gc_remove_drawable_clip (gc);
|
2009-05-27 15:08:09 +00:00
|
|
|
clip = _gdk_gc_get_clip_region (gc);
|
|
|
|
if (clip)
|
|
|
|
{
|
|
|
|
gdk_region_offset (exposure_region,
|
|
|
|
old_clip_x,
|
|
|
|
old_clip_y);
|
|
|
|
gdk_region_intersect (exposure_region, clip);
|
|
|
|
gdk_region_offset (exposure_region,
|
|
|
|
-old_clip_x,
|
|
|
|
-old_clip_y);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Note: We don't clip by the clip mask if set, so this
|
|
|
|
may invalidate to much */
|
|
|
|
|
|
|
|
/* Remove the area that is correctly copied from the src.
|
|
|
|
* Note that xsrc/ysrc has been corrected for abs_x/y offsets already,
|
|
|
|
* which need to be undone */
|
|
|
|
clip = gdk_drawable_get_visible_region (original_src);
|
|
|
|
gdk_region_offset (clip,
|
|
|
|
xdest - (xsrc - GDK_WINDOW_OBJECT (original_src)->abs_x),
|
|
|
|
ydest - (ysrc - GDK_WINDOW_OBJECT (original_src)->abs_y));
|
|
|
|
gdk_region_subtract (exposure_region, clip);
|
|
|
|
gdk_region_destroy (clip);
|
|
|
|
|
2009-11-04 13:03:04 +00:00
|
|
|
gdk_window_invalidate_region_full (GDK_WINDOW (private),
|
|
|
|
exposure_region,
|
|
|
|
_gdk_gc_get_subwindow (gc) == GDK_INCLUDE_INFERIORS,
|
|
|
|
CLEAR_BG_ALL);
|
2009-05-27 15:08:09 +00:00
|
|
|
|
|
|
|
gdk_region_destroy (exposure_region);
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
2000-10-24 00:15:14 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
END_DRAW;
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
gdk_window_draw_points (GdkDrawable *drawable,
|
|
|
|
GdkGC *gc,
|
|
|
|
GdkPoint *points,
|
|
|
|
gint npoints)
|
|
|
|
{
|
|
|
|
GdkPoint *new_points;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (drawable))
|
|
|
|
return;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
BEGIN_DRAW;
|
|
|
|
|
2000-03-28 01:24:44 +00:00
|
|
|
if (x_offset != 0 || y_offset != 0)
|
|
|
|
{
|
|
|
|
gint i;
|
|
|
|
|
|
|
|
new_points = g_new (GdkPoint, npoints);
|
|
|
|
for (i=0; i<npoints; i++)
|
|
|
|
{
|
|
|
|
new_points[i].x = points[i].x - x_offset;
|
|
|
|
new_points[i].y = points[i].y - y_offset;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
new_points = points;
|
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
gdk_draw_points (impl, gc, new_points, npoints);
|
2000-03-28 01:24:44 +00:00
|
|
|
|
|
|
|
if (new_points != points)
|
|
|
|
g_free (new_points);
|
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
END_DRAW;
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
gdk_window_draw_segments (GdkDrawable *drawable,
|
|
|
|
GdkGC *gc,
|
|
|
|
GdkSegment *segs,
|
|
|
|
gint nsegs)
|
|
|
|
{
|
|
|
|
GdkSegment *new_segs;
|
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (drawable))
|
|
|
|
return;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
BEGIN_DRAW;
|
|
|
|
|
2000-03-28 01:24:44 +00:00
|
|
|
if (x_offset != 0 || y_offset != 0)
|
|
|
|
{
|
|
|
|
gint i;
|
|
|
|
|
|
|
|
new_segs = g_new (GdkSegment, nsegs);
|
|
|
|
for (i=0; i<nsegs; i++)
|
|
|
|
{
|
|
|
|
new_segs[i].x1 = segs[i].x1 - x_offset;
|
|
|
|
new_segs[i].y1 = segs[i].y1 - y_offset;
|
|
|
|
new_segs[i].x2 = segs[i].x2 - x_offset;
|
|
|
|
new_segs[i].y2 = segs[i].y2 - y_offset;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
new_segs = segs;
|
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
gdk_draw_segments (impl, gc, new_segs, nsegs);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2000-03-28 01:24:44 +00:00
|
|
|
if (new_segs != segs)
|
|
|
|
g_free (new_segs);
|
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
END_DRAW;
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
gdk_window_draw_lines (GdkDrawable *drawable,
|
|
|
|
GdkGC *gc,
|
|
|
|
GdkPoint *points,
|
|
|
|
gint npoints)
|
|
|
|
{
|
|
|
|
GdkPoint *new_points;
|
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (drawable))
|
|
|
|
return;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
BEGIN_DRAW;
|
|
|
|
|
2000-03-28 01:24:44 +00:00
|
|
|
if (x_offset != 0 || y_offset != 0)
|
|
|
|
{
|
|
|
|
gint i;
|
|
|
|
|
|
|
|
new_points = g_new (GdkPoint, npoints);
|
|
|
|
for (i=0; i<npoints; i++)
|
|
|
|
{
|
|
|
|
new_points[i].x = points[i].x - x_offset;
|
|
|
|
new_points[i].y = points[i].y - y_offset;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
new_points = points;
|
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
gdk_draw_lines (impl, gc, new_points, npoints);
|
2000-03-28 01:24:44 +00:00
|
|
|
|
|
|
|
if (new_points != points)
|
|
|
|
g_free (new_points);
|
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
END_DRAW;
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
Remove all references to offscreen flag which was no longer used.
Thu Jun 1 23:05:13 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c: Remove all references to
offscreen flag which was no longer used.
* gtk/gtkprivate.h (enum): Remove unused flags and compress.
* gtk/gtkframe.c (gtk_frame_set_label_widget): Check
for non-null label_widget->parent.
* gtk/gtkentry.c: Get rid of code to deal with PangoAttribute
which no longer was used.
* gdk/gdkpango.c (gdk_pango_context_get_info): make static.
* gdk/gdkpango.c (gdk_draw_layout[_line]): Add checks
for null arguments.
* gdk/x11/gdkgeometry-x11.c (gdk_window_scroll): add
check for destroyed windows.
Thu Jun 1 13:48:45 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimmulticontext.c: Add a finalize method and unref
the slave context there.
* gtk/gtkinvisible.[ch]: Make reference counting behavior
identical to GtkWindow.
Thu Jun 1 01:54:11 2000 Owen Taylor <otaylor@redhat.com>
* Makefile.am gdk/gdkpango.c: Copy the layout render function from
pangox to here, so we can write them independent of rendering
system, using GDK primitives.
* gdk/gdkdrawable.h gdk/gdkdraw.c gdk/gdkwindow.c
gdk/x11/gdkdrawable-x11.c: Remove draw_layout() from the vtable,
since we have a rendering-system independent implementation in
terms of draw_glyphs().
* gdk/gdkpango.c gdkdrawable.h (gdk_draw_layout_line): New
function to render a single line.
* gdk/x11/gdkpango.c: Move the guts of this file mostly
into ../gdkpango.c, which simplifies things, since we
don't have to deal with raw X gc's.
Fri May 19 04:28:16 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.[ch]: Add get_log_attrs() function to
get the logical attributes for a given GtkTextLine.
Tue May 30 16:05:39 2000 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkfont-x11.c (gdk_font_charset_for_locale): Track
g_locale_get_codeset() to g_get_codeset() change.
Tue May 30 15:03:19 2000 Owen Taylor <otaylor@redhat.com>
* gtk/testcalendar.c (calendar_font_selection_ok): Use font
descriptions.
* gtk/gtkentry.c (gtk_entry_draw_text): Center text within
the entry.
* gtk/gtkfontsel.c (gtk_font_selection_dialog_init): Start of
redoing (vastly simplifying) for Pango. Still needs quite
a bit of work. (Size selection is currently poor. List of
predefined sizes is not a good idea, since all of these
sizes won't necessarily be distinct.)
Tue May 30 13:50:19 2000 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkfont-x11.c (gdk_font_charset_for_locale): Handle
CODESET results for LANG=C.
Mon May 29 15:49:10 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkrc.[ch]: Add a 'font_name' declaration to RC
which takes a stringized pango font description;
ignore the older 'font' and 'fontset' declarations.
* gtk/gtkstyle.c gtk/gtkrc.c: Fill in the style->font
field with a GdkFont derived via gdk_font_from_description(),
for compatibility. (Should we just remove it entirely?
Probably too much compatibility breakage, but people
should be migrating to the new Pango stuff as quickly
as possible.)
Mon May 29 15:47:41 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.c gtk/gtkclist.c: s/pango_font_unref/g_object_unref/.
Mon May 29 15:44:46 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkcalender.c: Roughly pango-ized. Really needs
redoing; there are some bugs in size allocation right
now, the semi-existant distinction between header / day
fonts was removed, but, with Pango, could actually
be made functional in a nice way.
* gtk/testcalender: Move calender from examples into this
directory as a test program. (We really need to restrcture
testgtk into a whole directory full of tests for every
widget or functionality group, separated into multiple .c
files.)
Mon May 29 15:19:56 2000 Owen Taylor <otaylor@redhat.com>
* gtk/testgtk.c (file_exists): Fix stupid typo that
was keeping RC file from being loaded.
* gtk/testgtkrc gtk/testgtkrc2: Test new pango-ized
RC file font code.
Mon May 29 14:31:27 2000 Owen Taylor <otaylor@redhat.com>
* gdk/gdkfont.h gdk/x11/gdkfont-x11.c (gdk_font_from_description):
Add function to load a GdkFont from a PangoFontDescription.
Fri May 26 17:16:40 2000 Owen Taylor <otaylor@redhat.com>
* gtk/frame.[ch] gtkaspectframe.c: Make frame widgets able
to have any widget for the label, use a GtkLabel widget
to display the text. (Based partially on a patch from
Anders Carlson.)
(Quite a bit of code reorganization - strip 90% of the
guts out of gtkaspectframe and add a single virtual
func to GtkFrameClass - compute_child_allocation.)
Fri May 26 12:00:02 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkctree.c gtk/gtkclist.[ch]: Pangoized.
(Removed clist->row_center_offset field because caching
it wasn't saving time or code, added private function
_gtk_clist_create_cell_layout()).
Wed May 24 15:59:37 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkaccellabel.c: Pangoized.
* gtk/[hv]ruler.c: Pangoized
Mon May 22 19:23:59 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkfilesel.c (gtk_file_selection_init):
Use gtk_clist_set_column_auto_resize() to remove need
need for manual column width computations.
Mon May 22 18:50:26 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktooltips.[ch]: Replace custom drawing with a GtkLabel,
ensuring Pango correctness, and considerably simplifying the
code.
* gtk/gtklabel.c gtk[hv]scale.c: 1000 => PANGO_SCALE.
* gtk/gtklabel.c (gtk_label_size_request): Fixed incorrect
getting of numbers of lines.
* gtk/gtklabel.c (gtk_label_size_request): Set the requisition
to the actual requested width of the lable, not to the wrap
width we set.
* gtk/gtktextchild.h: Remove extraneous include of gtk/gtk.h.
* gtk/gtktextbtree.c gtk/gtktextbuffer.c gtk/gtktextlayout.c
gtk/gtktextview.c gtk/gtktextview.[ch]: Fix up includes.
* gtk/gtktextview.c: Fix structure inheritance.
* gtk/gtkprogressbar.c: Pangoize.
Mon May 22 15:47:30 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextview.c (gtk_text_view_get_first_para_iter): Encapsulate
in a function.
* gtk/gtktextlayout.c (find_display_line_above): Fixed
bug with computing line tops.
* gtk/gtktextview.c (changed_handler): Fix < , <= confusion.
Thu May 18 18:53:31 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextdisplay.c (gtk_text_layout_draw): Fix up the x_offset
and y_offset coordinates to do what we need now. (The offset between
buffer and layout coordinates has been reintroduced, but is a
bit different than before.)
* gtk/gtktextview.[ch]: No longer inherit from GtkLayout; instead
handle the adjustments ourselves, and scroll as necessary using
the new gdk_window_scroll().
The advantage of this is that when we are incrementally revalidating,
we are essentially rearranging things around the visible portion
of the screen. With the old setup, the visible portion of the
screen was moved around in the layout, so scrolling and redrawing
to track that caused jumping of the display. Since we now
control the scrolling ourselves, we can suppress this and
only redraw when things actually change.
Thu May 18 18:47:25 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextbtree.c (redisplay_mark): We need to invalidate
the region not just redisplay it after-all, since we store the
cursors in the LineDisplay. (Ugly interactions here between
GtkLayout and GtkTextBTree here.)
* gtk/gtktextbtree.c (redisplay_region): Fixed reversed comparison.
Thu May 18 18:43:21 2000 Owen Taylor <otaylor@redhat.com>
* gdk/gdkwindow.h gdk/x11/gdkgeometry-x11.c (gdk_window_scroll):
Added function to scroll contents of a window while keeping the
window constant. Works by XCopyArea or guffaw-scrolling depending
on the details of how the window is set up. (guffaw-scrolling
still needs to be filled in.)
Wed May 17 22:36:53 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextiter.c gtk/gtkmain.c: Add a debug key for the text widget,
move the debugging that was tied to a global variable
to that.
* gtk/gtkmarshal.list: Add NONE:INT,INT,INT
* gtk/gtktextbtree.[ch] gtk/gtktextlayout.c: Keep a separate
validated flag, in line data instead of setting height/width to
-1. This allows us to perform operations with partially invalid
buffer (using the old size for invalid lines) and thus to do
incremental vaidation. Keep height/width aggregates up to date
when deleting text and rebalancing the tree.
* gtk/gtktextbtree.[ch]: Add functions validate a line
(gtk_text_btree_validate_line), and to validate up
to a number of pixels (gtk_text_btree_validate).
* gtk/gtktextlayout.[ch]: Add an ::invalidated signal
that indicates that something is changed and a revalidation
pass is needed. Change ::need_repaint to ::changed, and
make it take old and new yranges instead of a rectangle.
* gtk/gtktextbtree.[ch] gtk/gtktextlayout.[ch]: Move
the line_data_destroy() function from
gtk_text_btree_add_view() to a virtual function in
GtkTextLayout
* gtk/gtktextbtree.[ch]: Remove gtk_text_btree_get_damage_range(),
since we are handling partial repaints in a different fashion
now.
* gtk/gtktextbtree.[ch]: Only repaint the changed portion
of the selection instead of queueing a repaint on the
entire widget.
* gtk/gtktextbuffer.[ch] gtk/gtktextbtree.[ch]: Move
get_selection_bounds() down to btree, make the function
in buffer a wrapper around the btree function.
* gtk/gtktextlayout.[ch]: Add functions to check if the
layout is valid and to recompute either a range of pixels
aroudn a line or a certain total number of pixels.
* gtk/gtktextlayout.[ch]: Cache a single line display;
now that we only redraw the needed portions, the hit rate
for this cache is quite high.
* gtk/gtktextview.[ch]: Keep track of the first paragraph
on the screen so that when re-laying-out the buffer, we can
keep the same place. This requires connecting to ::value_changed
on the adjustments
* gtk/gtktextview.[ch]: Add idle functions to revalidate
the buffer after we receive an ::invalidated signal.
Wed May 17 22:10:47 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_size_allocate): Set upper
to max of allocation and layout size, not just to the
layout size.
* gtk/gtk[hv]scrollbar.c (gtk_[hv]scrollbar_calc_slider_size):
Invalidate window so it gets redrawn properly.
* gdk/gdkwindow.c (gdk_window_invalidate_rect): Allow rect == NULL
to mean the entire window.
* gdk/gdkevents.h: Move definition for GDK_PRIORITY_REDRAW
into public header.
Mon May 15 14:51:31 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextmark.c (gtk_text_mark_get_name): Add function
to get the name of a mark.
* gtk/gtktextlayout.c (gtk_text_layout_get_line_at_y): Add a function
to find the paragraph from a y position.
Thu May 11 12:57:20 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextbtree.c (gtk_text_btree_node_invalidate_upward): Valid
nodes have width/height >= 0, not > 0.
Tue May 9 21:29:06 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.[ch] gtk/gtktextdisplay.c (gtk_text_layout_get_line_display):
Add a size_only flag, so when we only need the size, we don't create
useless appearance attributes.
* gtk/gtktextview.c (gtk_text_view_ensure_layout): Remove
duplicate setting of font description.
* gtk/gtkscale.c: Use PANGO_SCALE instead of 1000
Wed Apr 26 01:53:23 2000 Owen Taylor <otaylor@redhat.com>
* gtk/Makefile.am (EXTRA_DIST): Add OLD_STAMP into
EXTRA_DIST. It does not work well when the file that
everything depends on is not in the tarball.
Wed Apr 26 00:56:14 2000 Owen Taylor <otaylor@redhat.com>
* gtk/testgtk.c: Some hacks and fixes so that it basically
works when not sitting in the GTK+ build tree.
2000-05-03 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbtree.c (gtk_text_line_next_could_contain_tag):
Properly determine the ordering of the tag root and the current
line within the tree. Previous algorithm only worked if the tag
root's immediate parent was the common root of both the current
line and the tag root.
Wed Apr 26 00:43:00 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.c (set_para_values): Fix some bugs in
alignment.
* gtk/gtktextview.c (gtk_text_view_ensure_layout): Track
the widget text directional dynamically.
* gtk/gtktextview.[ch]: Added functions to get and set default
wrap mode.
Tue Apr 25 23:47:38 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.c (gtk_text_layout_get_iter_location): Fix bug
in cursor location computation.
Tue Apr 25 23:22:59 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_set_size): Clamp hadjustment/
vadjusment values properly when layout gets smaller.
* gtk/gtktextview.c (need_repaint_handler): Areas being
passed in are far completely inaccurate, and sometimes
too small, so, for now, just queue a redraw on the
whole visible region.
2000-04-25 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbtree.c (summary_destroy): new function to
destroy tag summary nodes
(gtk_text_line_next_could_contain_tag): this function was
totally broken if the line passed in wasn't below the tag
root. Fix it.
(gtk_text_btree_first_could_contain_tag): In the tag == NULL
"wildcard" case, we have to do a linear scan. Blah.
(gtk_text_btree_last_could_contain_tag): In tag == NULL case,
we have to do the linear scan
(tag_removed_cb): When a tag is removed from the tag table,
remove the GtkTextTagInfo node from the btree.
(gtk_text_btree_spew): Implement the spew function, for
our debugging pleasure.
Tue Apr 25 19:40:18 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.c (gtk_text_layout_set_buffer): Fix
a problem with referring to the wrong buffer.
* gtk/gtkentry.c: Fix focus-in/focus-out confusion.
* gtk/gtkrc.c gtk/gtkstyle.c: Moving setting default
font description to gtk_style_new() - otherwise things
don't work without a .gtkrc file.
* gtk/gtktextbuffer.c (gtk_text_buffer_new): Sink the
tags table if we create it ourself, too.
* gdk/gdktypes.h (enum): Move GDK_RELEASE_MASK, since
it was conflicting with XKB modifiers.
* gtk/gtktextview.[ch]: Add simple support for
GtkIMContext.
Mon Apr 24 19:34:18 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.c (gtk_entry_move_cursor_visually): Fix problem
with deletion from last commit.
Mon Apr 24 19:29:40 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_create_pango_context): Set the language
in the context from the current locale.
* gtk/gtkentry.c (gtk_entry_size_request): Use language from the
context, not hardcoded value.
* gtk/gtkentry.c (gtk_entry_move_cursor): Make character movement visual,
not logical.
Sun Apr 23 23:39:18 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.c gtk/gtktextdisplay.c: Don't handle selections as
attributes - that doesn't handle partial-glyph selection
properly. Instead use new pango_layout_line_get_x_ranges()
functionality to draw the selection.
* gtk/gtkentry.c: Simplify code since pango_layout_line_index_to_x()
now properly handles out-of-range coordinates.
* gtk/gtktextbuffer.c: Emit "mark_set" when the cursor is moved.
* gtk/gtktextiter.h gtk/gtktextiterprivate.h: Make gtk_text_iter_get_line_byte()
public.
* gtk/gtktextlayout.[ch]: Properly set the direction in the PangoContext
for paragraphs opposite to the base direction of the widget.
* gtk/gtktextlayout.[ch] gtk/gtktextdisplay.c: Fixes for alignment.
* gtk/gtktextlayout.c: Don't split segments on marks, since that
causes Arabic words to reshape as you cursor through.
* gtk/gtktextlayout.[ch] gtk/gtktextview.[ch]: Implement virtual
cursor position when moving vertically with the arrow keys and
scrolling with page-up/page-down. (Arrow keys save only the X,
scrolling saves both X and Y.)
This means you can line-up / line-down or page-up / page-down
without losing your place, and also that moving vertically
with the cursor keys keeps the same X position, not the same
character count:
* gtk/gtktextlayout.[ch] gtk/gtktextview.[ch]: Make vertical
arrow keys move by display lines, not paragraphs.
Tue Apr 18 14:16:50 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c: Make sure that the bin window is at least
as big as the allocation. (Should we also make sure that the
bin window is big enough to completely cover widget->window?)
* gtk/gtktextview.c (gtk_text_view_get_visible_rect): Add
function to get the onscreen rectangle.
* gdk/x11/gdkwindow-x11.c (gdk_window_get_pointer): Correctly account
for offsets in window coordinates.
Sun Apr 16 16:13:27 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.c (gtk_entry_get_cursor_locations): Fix index/offset
confusion.
* gtk/gtktextview.c (gtk_text_view_ensure_layout): Set the default direction
from the widget direction.
* gtk/gtktexttag.c gtk/gtktexttagprivate.h (gtk_text_tag_set_arg):
Add a "direction" attribute.
* gtk/gtktextview.c: global s/tkxt/text_view/.
* gtk/testtext.c: Added long block of text in Arabic, to test out
the direction attributes. (Some problems with the shaping system
for arabic become obvious - like the fact the cursor splits words
into unjoined pieces.)
Fri Apr 14 12:54:34 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextdisplay.c (render_layout): Add overstrike handling.
* gtk/gtktextlayout.c: Fix up alignment.
* gtk/testtext.c: Add some tests for centering, wrapping.
Fri Apr 14 09:26:22 2000 Owen Taylor <otaylor@redhat.com>
* gdk/gdkdrawable.h gdk/gdkdraw.c gdk/gdkwindow.c gdk/x11/gdkdrawable-x11.c:
Add a draw_glyphs() operation to the drawable vtable and gdk_draw_glyphs().
If we wrote GTK+-specific layout-render function this could just replace
the draw_layout() operation in the vtable.
* gtk/gtkentry.c: Move guts of gtk_entry_get_cursor_locations to
pango_layout_get_cursor_pos() and use that function.
* gtk/gtktextchild.[ch]: add gtk_ onto pixmap_segment_new(), since it
is a non-static symbol.
* gtk/gtktextbtree.[ch]: Replace gtk_text_btree_find_line_data_by_y()
with gtk_text_btree_find_line_by_y()
* gtk/gtktextdisplay.c: Rewrote for Pango - uses a custom layout
renderer that handles GtkTextAppearance attributes.
* gtk/gtktexttag.[ch] gtk/gtktexttagprivate.h:
- Move the values in the style that don't affect geometry into a
GtkTextAppearance structure.
- Change underline to take a PangoUnderline and "font" a string
representation of a font description
- Add a "font_desc" attribute which takes a FontDescription structure.
* gtk/gtktextlayout.[ch]:
- Get rid of the display-line list per each line. Instead, we
generate, on demand, a GtkTextLineDisplay structure which]
contains a PangoLayout * and other necesary information
(offsets, cursor locations) for displaying a paragraph.
- Get rid of the code to wrap lines, create display chunks,
etc. Instead, we just go through a paragraph and convert
it into the necessary inputs to a PangoLayout.
- Implement a new attribute type, GtkTextAttrAppearance. This
holds a GtkTextAppearance, and is used to pass colors,
stipple, etc, through from the layout to the display without
having to use lots and lots of individual attributes.
- Reimplement gtk_layout_get_iter_at_pixel() gtk_layout_get_iter_pos()
in terms of PangoLayout functions.
* gtk/gtktextview.c:
- Handle passing the necessary PangoContext to the layout
- Some fixups in painting to deal with the automatic backing store
and offsetting of GTK+-1.4
- Add a style_set handler so that the default style reacts
properly to theme changes.
* gtk/gtktext?*.[ch]: Random code-style fixes.
* gtk/testtext.c: Substitute in languages that Pango handles now for Thai
Mon Apr 10 10:33:45 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktext?*.[ch]: Check in Havoc's port of the Tk text widget,
in original form preparatory to Pango-ization and gdkimcontext-ization.
Thu Apr 6 19:25:39 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimcontext.c: Move default implementations to real_* vfuncs,
so that we can derive from gtkimcontext in language bindings properly.
Thu Apr 6 16:02:52 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimcontextsimple.[ch]: Use gdk_keyval_to_unicode to gdk_unicode_to_keyval.
Add a compose table including (almost) all the compose combinations
from X. This is 6k of static, shared data as opposed to 50k or so of dynamic
data in the XIM implementation.
* gdk/gdk.h gdk/gdkkeyuni.c gdk/win32/gdkevents-win32.c (gdk_keyval_to_unicode, gdk_unicode_to_keyval):
Moved functions to convert keyvalues from and to unicode here from
the win32 port and made them public.
Wed Apr 5 16:37:29 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkeditable.c (gtk_editable_insert_text): Allow new_text_length == -1.
Wed Apr 5 16:27:45 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimcontext.[ch]: Base class for new input context system
* gtk/gtkimmulticontext.[ch]: Proxy input context that allows
the real input context implementation to be loaded from modules
and switched on the fly.
* gtk/gtkcontextsimple.[ch]: Simple implementation of an input
context that just does direct keysymbol => unicode translation.
* gtk/gtkentry.[ch]: Start switching editing over to using
GtkInputContext. (No handling of preedit yet.)
Wed Apr 5 15:48:41 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktypeutils.h (GTK_CHECK_GET_CLASS): Fix problem with one too
many substitutions. (klass should not be subsituted.)
Wed Apr 5 00:18:14 2000 Owen Taylor <otaylor@redhat.com>
* configure.in: Add checks for Pango
* configure.in docs/Makefile.am: Add test for sgml2html
and allow 'make dist' without building html, but print out
warnings in that case. (For making snapshots)
* gdk/Makefile.am gdk/x11/Makefile.am gtk/Makefile.am:
Add Pango libraries and C flags
* gdk/gdkdraw.c gdk/gdkdrawable.h gdkwindow.c gdk/x11/gdkdrawable-x11.c:
Add function (gdk_draw_layout) to draw a pango layout.
* gdk/gdkpango.h gdk/x11/gdkpango-x11.c: New file with functions
for getting Pango contexts for GDK.
* gtk/gtkeditable.c: Get rid of dead code gtk_editable_parent_set()
* gtk/gtkentry.[ch]: Complete rewrite to use Pango, add bidirectional
editing.
* gtk/gtkentry.c: Hack in simple Hebrew input with direct
keysym => unicode translations. More languages can be added
here, but real input-method support is needed.
* docs/Changes-1.4.txt: Added note about entry behavior.
* gtk/gtkenums.h gtk/gtkwidget.[ch] testgtk.c gtkprivate.h: Add functions
to set the reading direction for a widget and the global direction.
Add test which allows toggling the global direction. Two private
flags are used to store the direction. (GTK_DIRECTION_SET + GTK_DIRECTION_LTR)
* gtk/gtkcheckbutton.c gtk/gtkframe.c gtk/gtkhbbox.c gtk/gtkhbox.c
gtk/gtkradiobutton.c gtk/gtkspinbutton.c gtk/gtktable.c
* gtk/gtk[hv]scale.c gtk/gtkscale.[ch]: Draw numbers using Pango
* gtk/gtklabel.[ch]: Moved to Pango and considerably rewritten. Line breaking,
underlining now handled by Pango.
* gtk/gtkstyle.[ch] gtk/gtkrc.[ch]: Add a PangoFontDescription
to RCStyle and Style. (Having both this and the old font name and GdkFont
is temporary.)
* gtk/gtkwidget.[ch] (gtk_widget_create_pango_{context,layout}): Added
convenience functions for creating contexts and layouts for widgets.
* gtk/testgtk.c: Enhance label tests with multilingual labels.
2000-06-02 03:14:07 +00:00
|
|
|
static void
|
|
|
|
gdk_window_draw_glyphs (GdkDrawable *drawable,
|
|
|
|
GdkGC *gc,
|
|
|
|
PangoFont *font,
|
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
PangoGlyphString *glyphs)
|
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (drawable))
|
|
|
|
return;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
BEGIN_DRAW;
|
|
|
|
gdk_draw_glyphs (impl, gc, font,
|
|
|
|
x - x_offset, y - y_offset, glyphs);
|
|
|
|
END_DRAW;
|
Remove all references to offscreen flag which was no longer used.
Thu Jun 1 23:05:13 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c: Remove all references to
offscreen flag which was no longer used.
* gtk/gtkprivate.h (enum): Remove unused flags and compress.
* gtk/gtkframe.c (gtk_frame_set_label_widget): Check
for non-null label_widget->parent.
* gtk/gtkentry.c: Get rid of code to deal with PangoAttribute
which no longer was used.
* gdk/gdkpango.c (gdk_pango_context_get_info): make static.
* gdk/gdkpango.c (gdk_draw_layout[_line]): Add checks
for null arguments.
* gdk/x11/gdkgeometry-x11.c (gdk_window_scroll): add
check for destroyed windows.
Thu Jun 1 13:48:45 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimmulticontext.c: Add a finalize method and unref
the slave context there.
* gtk/gtkinvisible.[ch]: Make reference counting behavior
identical to GtkWindow.
Thu Jun 1 01:54:11 2000 Owen Taylor <otaylor@redhat.com>
* Makefile.am gdk/gdkpango.c: Copy the layout render function from
pangox to here, so we can write them independent of rendering
system, using GDK primitives.
* gdk/gdkdrawable.h gdk/gdkdraw.c gdk/gdkwindow.c
gdk/x11/gdkdrawable-x11.c: Remove draw_layout() from the vtable,
since we have a rendering-system independent implementation in
terms of draw_glyphs().
* gdk/gdkpango.c gdkdrawable.h (gdk_draw_layout_line): New
function to render a single line.
* gdk/x11/gdkpango.c: Move the guts of this file mostly
into ../gdkpango.c, which simplifies things, since we
don't have to deal with raw X gc's.
Fri May 19 04:28:16 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.[ch]: Add get_log_attrs() function to
get the logical attributes for a given GtkTextLine.
Tue May 30 16:05:39 2000 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkfont-x11.c (gdk_font_charset_for_locale): Track
g_locale_get_codeset() to g_get_codeset() change.
Tue May 30 15:03:19 2000 Owen Taylor <otaylor@redhat.com>
* gtk/testcalendar.c (calendar_font_selection_ok): Use font
descriptions.
* gtk/gtkentry.c (gtk_entry_draw_text): Center text within
the entry.
* gtk/gtkfontsel.c (gtk_font_selection_dialog_init): Start of
redoing (vastly simplifying) for Pango. Still needs quite
a bit of work. (Size selection is currently poor. List of
predefined sizes is not a good idea, since all of these
sizes won't necessarily be distinct.)
Tue May 30 13:50:19 2000 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkfont-x11.c (gdk_font_charset_for_locale): Handle
CODESET results for LANG=C.
Mon May 29 15:49:10 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkrc.[ch]: Add a 'font_name' declaration to RC
which takes a stringized pango font description;
ignore the older 'font' and 'fontset' declarations.
* gtk/gtkstyle.c gtk/gtkrc.c: Fill in the style->font
field with a GdkFont derived via gdk_font_from_description(),
for compatibility. (Should we just remove it entirely?
Probably too much compatibility breakage, but people
should be migrating to the new Pango stuff as quickly
as possible.)
Mon May 29 15:47:41 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.c gtk/gtkclist.c: s/pango_font_unref/g_object_unref/.
Mon May 29 15:44:46 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkcalender.c: Roughly pango-ized. Really needs
redoing; there are some bugs in size allocation right
now, the semi-existant distinction between header / day
fonts was removed, but, with Pango, could actually
be made functional in a nice way.
* gtk/testcalender: Move calender from examples into this
directory as a test program. (We really need to restrcture
testgtk into a whole directory full of tests for every
widget or functionality group, separated into multiple .c
files.)
Mon May 29 15:19:56 2000 Owen Taylor <otaylor@redhat.com>
* gtk/testgtk.c (file_exists): Fix stupid typo that
was keeping RC file from being loaded.
* gtk/testgtkrc gtk/testgtkrc2: Test new pango-ized
RC file font code.
Mon May 29 14:31:27 2000 Owen Taylor <otaylor@redhat.com>
* gdk/gdkfont.h gdk/x11/gdkfont-x11.c (gdk_font_from_description):
Add function to load a GdkFont from a PangoFontDescription.
Fri May 26 17:16:40 2000 Owen Taylor <otaylor@redhat.com>
* gtk/frame.[ch] gtkaspectframe.c: Make frame widgets able
to have any widget for the label, use a GtkLabel widget
to display the text. (Based partially on a patch from
Anders Carlson.)
(Quite a bit of code reorganization - strip 90% of the
guts out of gtkaspectframe and add a single virtual
func to GtkFrameClass - compute_child_allocation.)
Fri May 26 12:00:02 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkctree.c gtk/gtkclist.[ch]: Pangoized.
(Removed clist->row_center_offset field because caching
it wasn't saving time or code, added private function
_gtk_clist_create_cell_layout()).
Wed May 24 15:59:37 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkaccellabel.c: Pangoized.
* gtk/[hv]ruler.c: Pangoized
Mon May 22 19:23:59 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkfilesel.c (gtk_file_selection_init):
Use gtk_clist_set_column_auto_resize() to remove need
need for manual column width computations.
Mon May 22 18:50:26 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktooltips.[ch]: Replace custom drawing with a GtkLabel,
ensuring Pango correctness, and considerably simplifying the
code.
* gtk/gtklabel.c gtk[hv]scale.c: 1000 => PANGO_SCALE.
* gtk/gtklabel.c (gtk_label_size_request): Fixed incorrect
getting of numbers of lines.
* gtk/gtklabel.c (gtk_label_size_request): Set the requisition
to the actual requested width of the lable, not to the wrap
width we set.
* gtk/gtktextchild.h: Remove extraneous include of gtk/gtk.h.
* gtk/gtktextbtree.c gtk/gtktextbuffer.c gtk/gtktextlayout.c
gtk/gtktextview.c gtk/gtktextview.[ch]: Fix up includes.
* gtk/gtktextview.c: Fix structure inheritance.
* gtk/gtkprogressbar.c: Pangoize.
Mon May 22 15:47:30 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextview.c (gtk_text_view_get_first_para_iter): Encapsulate
in a function.
* gtk/gtktextlayout.c (find_display_line_above): Fixed
bug with computing line tops.
* gtk/gtktextview.c (changed_handler): Fix < , <= confusion.
Thu May 18 18:53:31 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextdisplay.c (gtk_text_layout_draw): Fix up the x_offset
and y_offset coordinates to do what we need now. (The offset between
buffer and layout coordinates has been reintroduced, but is a
bit different than before.)
* gtk/gtktextview.[ch]: No longer inherit from GtkLayout; instead
handle the adjustments ourselves, and scroll as necessary using
the new gdk_window_scroll().
The advantage of this is that when we are incrementally revalidating,
we are essentially rearranging things around the visible portion
of the screen. With the old setup, the visible portion of the
screen was moved around in the layout, so scrolling and redrawing
to track that caused jumping of the display. Since we now
control the scrolling ourselves, we can suppress this and
only redraw when things actually change.
Thu May 18 18:47:25 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextbtree.c (redisplay_mark): We need to invalidate
the region not just redisplay it after-all, since we store the
cursors in the LineDisplay. (Ugly interactions here between
GtkLayout and GtkTextBTree here.)
* gtk/gtktextbtree.c (redisplay_region): Fixed reversed comparison.
Thu May 18 18:43:21 2000 Owen Taylor <otaylor@redhat.com>
* gdk/gdkwindow.h gdk/x11/gdkgeometry-x11.c (gdk_window_scroll):
Added function to scroll contents of a window while keeping the
window constant. Works by XCopyArea or guffaw-scrolling depending
on the details of how the window is set up. (guffaw-scrolling
still needs to be filled in.)
Wed May 17 22:36:53 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextiter.c gtk/gtkmain.c: Add a debug key for the text widget,
move the debugging that was tied to a global variable
to that.
* gtk/gtkmarshal.list: Add NONE:INT,INT,INT
* gtk/gtktextbtree.[ch] gtk/gtktextlayout.c: Keep a separate
validated flag, in line data instead of setting height/width to
-1. This allows us to perform operations with partially invalid
buffer (using the old size for invalid lines) and thus to do
incremental vaidation. Keep height/width aggregates up to date
when deleting text and rebalancing the tree.
* gtk/gtktextbtree.[ch]: Add functions validate a line
(gtk_text_btree_validate_line), and to validate up
to a number of pixels (gtk_text_btree_validate).
* gtk/gtktextlayout.[ch]: Add an ::invalidated signal
that indicates that something is changed and a revalidation
pass is needed. Change ::need_repaint to ::changed, and
make it take old and new yranges instead of a rectangle.
* gtk/gtktextbtree.[ch] gtk/gtktextlayout.[ch]: Move
the line_data_destroy() function from
gtk_text_btree_add_view() to a virtual function in
GtkTextLayout
* gtk/gtktextbtree.[ch]: Remove gtk_text_btree_get_damage_range(),
since we are handling partial repaints in a different fashion
now.
* gtk/gtktextbtree.[ch]: Only repaint the changed portion
of the selection instead of queueing a repaint on the
entire widget.
* gtk/gtktextbuffer.[ch] gtk/gtktextbtree.[ch]: Move
get_selection_bounds() down to btree, make the function
in buffer a wrapper around the btree function.
* gtk/gtktextlayout.[ch]: Add functions to check if the
layout is valid and to recompute either a range of pixels
aroudn a line or a certain total number of pixels.
* gtk/gtktextlayout.[ch]: Cache a single line display;
now that we only redraw the needed portions, the hit rate
for this cache is quite high.
* gtk/gtktextview.[ch]: Keep track of the first paragraph
on the screen so that when re-laying-out the buffer, we can
keep the same place. This requires connecting to ::value_changed
on the adjustments
* gtk/gtktextview.[ch]: Add idle functions to revalidate
the buffer after we receive an ::invalidated signal.
Wed May 17 22:10:47 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_size_allocate): Set upper
to max of allocation and layout size, not just to the
layout size.
* gtk/gtk[hv]scrollbar.c (gtk_[hv]scrollbar_calc_slider_size):
Invalidate window so it gets redrawn properly.
* gdk/gdkwindow.c (gdk_window_invalidate_rect): Allow rect == NULL
to mean the entire window.
* gdk/gdkevents.h: Move definition for GDK_PRIORITY_REDRAW
into public header.
Mon May 15 14:51:31 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextmark.c (gtk_text_mark_get_name): Add function
to get the name of a mark.
* gtk/gtktextlayout.c (gtk_text_layout_get_line_at_y): Add a function
to find the paragraph from a y position.
Thu May 11 12:57:20 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextbtree.c (gtk_text_btree_node_invalidate_upward): Valid
nodes have width/height >= 0, not > 0.
Tue May 9 21:29:06 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.[ch] gtk/gtktextdisplay.c (gtk_text_layout_get_line_display):
Add a size_only flag, so when we only need the size, we don't create
useless appearance attributes.
* gtk/gtktextview.c (gtk_text_view_ensure_layout): Remove
duplicate setting of font description.
* gtk/gtkscale.c: Use PANGO_SCALE instead of 1000
Wed Apr 26 01:53:23 2000 Owen Taylor <otaylor@redhat.com>
* gtk/Makefile.am (EXTRA_DIST): Add OLD_STAMP into
EXTRA_DIST. It does not work well when the file that
everything depends on is not in the tarball.
Wed Apr 26 00:56:14 2000 Owen Taylor <otaylor@redhat.com>
* gtk/testgtk.c: Some hacks and fixes so that it basically
works when not sitting in the GTK+ build tree.
2000-05-03 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbtree.c (gtk_text_line_next_could_contain_tag):
Properly determine the ordering of the tag root and the current
line within the tree. Previous algorithm only worked if the tag
root's immediate parent was the common root of both the current
line and the tag root.
Wed Apr 26 00:43:00 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.c (set_para_values): Fix some bugs in
alignment.
* gtk/gtktextview.c (gtk_text_view_ensure_layout): Track
the widget text directional dynamically.
* gtk/gtktextview.[ch]: Added functions to get and set default
wrap mode.
Tue Apr 25 23:47:38 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.c (gtk_text_layout_get_iter_location): Fix bug
in cursor location computation.
Tue Apr 25 23:22:59 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_set_size): Clamp hadjustment/
vadjusment values properly when layout gets smaller.
* gtk/gtktextview.c (need_repaint_handler): Areas being
passed in are far completely inaccurate, and sometimes
too small, so, for now, just queue a redraw on the
whole visible region.
2000-04-25 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbtree.c (summary_destroy): new function to
destroy tag summary nodes
(gtk_text_line_next_could_contain_tag): this function was
totally broken if the line passed in wasn't below the tag
root. Fix it.
(gtk_text_btree_first_could_contain_tag): In the tag == NULL
"wildcard" case, we have to do a linear scan. Blah.
(gtk_text_btree_last_could_contain_tag): In tag == NULL case,
we have to do the linear scan
(tag_removed_cb): When a tag is removed from the tag table,
remove the GtkTextTagInfo node from the btree.
(gtk_text_btree_spew): Implement the spew function, for
our debugging pleasure.
Tue Apr 25 19:40:18 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.c (gtk_text_layout_set_buffer): Fix
a problem with referring to the wrong buffer.
* gtk/gtkentry.c: Fix focus-in/focus-out confusion.
* gtk/gtkrc.c gtk/gtkstyle.c: Moving setting default
font description to gtk_style_new() - otherwise things
don't work without a .gtkrc file.
* gtk/gtktextbuffer.c (gtk_text_buffer_new): Sink the
tags table if we create it ourself, too.
* gdk/gdktypes.h (enum): Move GDK_RELEASE_MASK, since
it was conflicting with XKB modifiers.
* gtk/gtktextview.[ch]: Add simple support for
GtkIMContext.
Mon Apr 24 19:34:18 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.c (gtk_entry_move_cursor_visually): Fix problem
with deletion from last commit.
Mon Apr 24 19:29:40 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_create_pango_context): Set the language
in the context from the current locale.
* gtk/gtkentry.c (gtk_entry_size_request): Use language from the
context, not hardcoded value.
* gtk/gtkentry.c (gtk_entry_move_cursor): Make character movement visual,
not logical.
Sun Apr 23 23:39:18 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.c gtk/gtktextdisplay.c: Don't handle selections as
attributes - that doesn't handle partial-glyph selection
properly. Instead use new pango_layout_line_get_x_ranges()
functionality to draw the selection.
* gtk/gtkentry.c: Simplify code since pango_layout_line_index_to_x()
now properly handles out-of-range coordinates.
* gtk/gtktextbuffer.c: Emit "mark_set" when the cursor is moved.
* gtk/gtktextiter.h gtk/gtktextiterprivate.h: Make gtk_text_iter_get_line_byte()
public.
* gtk/gtktextlayout.[ch]: Properly set the direction in the PangoContext
for paragraphs opposite to the base direction of the widget.
* gtk/gtktextlayout.[ch] gtk/gtktextdisplay.c: Fixes for alignment.
* gtk/gtktextlayout.c: Don't split segments on marks, since that
causes Arabic words to reshape as you cursor through.
* gtk/gtktextlayout.[ch] gtk/gtktextview.[ch]: Implement virtual
cursor position when moving vertically with the arrow keys and
scrolling with page-up/page-down. (Arrow keys save only the X,
scrolling saves both X and Y.)
This means you can line-up / line-down or page-up / page-down
without losing your place, and also that moving vertically
with the cursor keys keeps the same X position, not the same
character count:
* gtk/gtktextlayout.[ch] gtk/gtktextview.[ch]: Make vertical
arrow keys move by display lines, not paragraphs.
Tue Apr 18 14:16:50 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c: Make sure that the bin window is at least
as big as the allocation. (Should we also make sure that the
bin window is big enough to completely cover widget->window?)
* gtk/gtktextview.c (gtk_text_view_get_visible_rect): Add
function to get the onscreen rectangle.
* gdk/x11/gdkwindow-x11.c (gdk_window_get_pointer): Correctly account
for offsets in window coordinates.
Sun Apr 16 16:13:27 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.c (gtk_entry_get_cursor_locations): Fix index/offset
confusion.
* gtk/gtktextview.c (gtk_text_view_ensure_layout): Set the default direction
from the widget direction.
* gtk/gtktexttag.c gtk/gtktexttagprivate.h (gtk_text_tag_set_arg):
Add a "direction" attribute.
* gtk/gtktextview.c: global s/tkxt/text_view/.
* gtk/testtext.c: Added long block of text in Arabic, to test out
the direction attributes. (Some problems with the shaping system
for arabic become obvious - like the fact the cursor splits words
into unjoined pieces.)
Fri Apr 14 12:54:34 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextdisplay.c (render_layout): Add overstrike handling.
* gtk/gtktextlayout.c: Fix up alignment.
* gtk/testtext.c: Add some tests for centering, wrapping.
Fri Apr 14 09:26:22 2000 Owen Taylor <otaylor@redhat.com>
* gdk/gdkdrawable.h gdk/gdkdraw.c gdk/gdkwindow.c gdk/x11/gdkdrawable-x11.c:
Add a draw_glyphs() operation to the drawable vtable and gdk_draw_glyphs().
If we wrote GTK+-specific layout-render function this could just replace
the draw_layout() operation in the vtable.
* gtk/gtkentry.c: Move guts of gtk_entry_get_cursor_locations to
pango_layout_get_cursor_pos() and use that function.
* gtk/gtktextchild.[ch]: add gtk_ onto pixmap_segment_new(), since it
is a non-static symbol.
* gtk/gtktextbtree.[ch]: Replace gtk_text_btree_find_line_data_by_y()
with gtk_text_btree_find_line_by_y()
* gtk/gtktextdisplay.c: Rewrote for Pango - uses a custom layout
renderer that handles GtkTextAppearance attributes.
* gtk/gtktexttag.[ch] gtk/gtktexttagprivate.h:
- Move the values in the style that don't affect geometry into a
GtkTextAppearance structure.
- Change underline to take a PangoUnderline and "font" a string
representation of a font description
- Add a "font_desc" attribute which takes a FontDescription structure.
* gtk/gtktextlayout.[ch]:
- Get rid of the display-line list per each line. Instead, we
generate, on demand, a GtkTextLineDisplay structure which]
contains a PangoLayout * and other necesary information
(offsets, cursor locations) for displaying a paragraph.
- Get rid of the code to wrap lines, create display chunks,
etc. Instead, we just go through a paragraph and convert
it into the necessary inputs to a PangoLayout.
- Implement a new attribute type, GtkTextAttrAppearance. This
holds a GtkTextAppearance, and is used to pass colors,
stipple, etc, through from the layout to the display without
having to use lots and lots of individual attributes.
- Reimplement gtk_layout_get_iter_at_pixel() gtk_layout_get_iter_pos()
in terms of PangoLayout functions.
* gtk/gtktextview.c:
- Handle passing the necessary PangoContext to the layout
- Some fixups in painting to deal with the automatic backing store
and offsetting of GTK+-1.4
- Add a style_set handler so that the default style reacts
properly to theme changes.
* gtk/gtktext?*.[ch]: Random code-style fixes.
* gtk/testtext.c: Substitute in languages that Pango handles now for Thai
Mon Apr 10 10:33:45 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktext?*.[ch]: Check in Havoc's port of the Tk text widget,
in original form preparatory to Pango-ization and gdkimcontext-ization.
Thu Apr 6 19:25:39 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimcontext.c: Move default implementations to real_* vfuncs,
so that we can derive from gtkimcontext in language bindings properly.
Thu Apr 6 16:02:52 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimcontextsimple.[ch]: Use gdk_keyval_to_unicode to gdk_unicode_to_keyval.
Add a compose table including (almost) all the compose combinations
from X. This is 6k of static, shared data as opposed to 50k or so of dynamic
data in the XIM implementation.
* gdk/gdk.h gdk/gdkkeyuni.c gdk/win32/gdkevents-win32.c (gdk_keyval_to_unicode, gdk_unicode_to_keyval):
Moved functions to convert keyvalues from and to unicode here from
the win32 port and made them public.
Wed Apr 5 16:37:29 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkeditable.c (gtk_editable_insert_text): Allow new_text_length == -1.
Wed Apr 5 16:27:45 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimcontext.[ch]: Base class for new input context system
* gtk/gtkimmulticontext.[ch]: Proxy input context that allows
the real input context implementation to be loaded from modules
and switched on the fly.
* gtk/gtkcontextsimple.[ch]: Simple implementation of an input
context that just does direct keysymbol => unicode translation.
* gtk/gtkentry.[ch]: Start switching editing over to using
GtkInputContext. (No handling of preedit yet.)
Wed Apr 5 15:48:41 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktypeutils.h (GTK_CHECK_GET_CLASS): Fix problem with one too
many substitutions. (klass should not be subsituted.)
Wed Apr 5 00:18:14 2000 Owen Taylor <otaylor@redhat.com>
* configure.in: Add checks for Pango
* configure.in docs/Makefile.am: Add test for sgml2html
and allow 'make dist' without building html, but print out
warnings in that case. (For making snapshots)
* gdk/Makefile.am gdk/x11/Makefile.am gtk/Makefile.am:
Add Pango libraries and C flags
* gdk/gdkdraw.c gdk/gdkdrawable.h gdkwindow.c gdk/x11/gdkdrawable-x11.c:
Add function (gdk_draw_layout) to draw a pango layout.
* gdk/gdkpango.h gdk/x11/gdkpango-x11.c: New file with functions
for getting Pango contexts for GDK.
* gtk/gtkeditable.c: Get rid of dead code gtk_editable_parent_set()
* gtk/gtkentry.[ch]: Complete rewrite to use Pango, add bidirectional
editing.
* gtk/gtkentry.c: Hack in simple Hebrew input with direct
keysym => unicode translations. More languages can be added
here, but real input-method support is needed.
* docs/Changes-1.4.txt: Added note about entry behavior.
* gtk/gtkenums.h gtk/gtkwidget.[ch] testgtk.c gtkprivate.h: Add functions
to set the reading direction for a widget and the global direction.
Add test which allows toggling the global direction. Two private
flags are used to store the direction. (GTK_DIRECTION_SET + GTK_DIRECTION_LTR)
* gtk/gtkcheckbutton.c gtk/gtkframe.c gtk/gtkhbbox.c gtk/gtkhbox.c
gtk/gtkradiobutton.c gtk/gtkspinbutton.c gtk/gtktable.c
* gtk/gtk[hv]scale.c gtk/gtkscale.[ch]: Draw numbers using Pango
* gtk/gtklabel.[ch]: Moved to Pango and considerably rewritten. Line breaking,
underlining now handled by Pango.
* gtk/gtkstyle.[ch] gtk/gtkrc.[ch]: Add a PangoFontDescription
to RCStyle and Style. (Having both this and the old font name and GdkFont
is temporary.)
* gtk/gtkwidget.[ch] (gtk_widget_create_pango_{context,layout}): Added
convenience functions for creating contexts and layouts for widgets.
* gtk/testgtk.c: Enhance label tests with multilingual labels.
2000-06-02 03:14:07 +00:00
|
|
|
}
|
|
|
|
|
2004-11-21 16:24:01 +00:00
|
|
|
static void
|
|
|
|
gdk_window_draw_glyphs_transformed (GdkDrawable *drawable,
|
|
|
|
GdkGC *gc,
|
|
|
|
PangoMatrix *matrix,
|
|
|
|
PangoFont *font,
|
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
PangoGlyphString *glyphs)
|
|
|
|
{
|
|
|
|
PangoMatrix tmp_matrix;
|
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (drawable))
|
|
|
|
return;
|
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
BEGIN_DRAW;
|
|
|
|
|
2004-11-21 16:24:01 +00:00
|
|
|
if (x_offset != 0 || y_offset != 0)
|
|
|
|
{
|
|
|
|
if (matrix)
|
|
|
|
{
|
|
|
|
tmp_matrix = *matrix;
|
|
|
|
tmp_matrix.x0 -= x_offset;
|
|
|
|
tmp_matrix.y0 -= y_offset;
|
|
|
|
matrix = &tmp_matrix;
|
|
|
|
}
|
2007-01-05 06:16:32 +00:00
|
|
|
else if (GDK_PANGO_UNITS_OVERFLOWS (x_offset, y_offset))
|
|
|
|
{
|
|
|
|
PangoMatrix identity = PANGO_MATRIX_INIT;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2007-01-05 06:16:32 +00:00
|
|
|
tmp_matrix = identity;
|
|
|
|
tmp_matrix.x0 -= x_offset;
|
|
|
|
tmp_matrix.y0 -= y_offset;
|
|
|
|
matrix = &tmp_matrix;
|
|
|
|
}
|
2004-11-21 16:24:01 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
x -= x_offset * PANGO_SCALE;
|
|
|
|
y -= y_offset * PANGO_SCALE;
|
|
|
|
}
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
gdk_draw_glyphs_transformed (impl, gc, matrix, font, x, y, glyphs);
|
2004-11-21 16:24:01 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
END_DRAW;
|
2004-11-21 16:24:01 +00:00
|
|
|
}
|
|
|
|
|
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320, which used
2006-02-03 Federico Mena Quintero <federico@ximian.com>
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320,
which used to be our own
http://bugzilla.gnome.org/show_bug.cgi?id=314616. If one uses a
pixmap for a pattern in Cairo, and sets the pattern to
CAIRO_EXTEND_REPEAT; and if the destination surface is also a
pixmap, Cairo does a slow copy instead of using XCopyArea(). So,
we use the same code that we used in GTK+ 2.6 (pre-cairo), by
filling the double-buffer pixmap with a tiled GC and
XFillRectangle().
* gdk/gdkwindow.c (BackingRectMethod): New structure with a
cairo_t and a GdkGC field. Depending on which of these fields
gets filled in, we'll use Cairo or GDK to clear the double-buffer
pixmap when painting a window.
(setup_backing_rect_method): Fill a BackingRectMethod as
appropriate, depending on the window's configuration and our
knowledge of whether Cairo is fast or slow when doing repeating
patterns.
(gdk_window_clear_backing_rect): Call
setup_backing_rect_method(). Depending on what it returns, use
Cairo to clear the double-buffer pixmap, or plain GDK.
2006-02-03 21:17:34 +00:00
|
|
|
typedef struct {
|
|
|
|
cairo_t *cr; /* if non-null, it means use this cairo context */
|
|
|
|
GdkGC *gc; /* if non-null, it means use this GC instead */
|
|
|
|
} BackingRectMethod;
|
|
|
|
|
2005-03-17 01:54:40 +00:00
|
|
|
static void
|
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320, which used
2006-02-03 Federico Mena Quintero <federico@ximian.com>
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320,
which used to be our own
http://bugzilla.gnome.org/show_bug.cgi?id=314616. If one uses a
pixmap for a pattern in Cairo, and sets the pattern to
CAIRO_EXTEND_REPEAT; and if the destination surface is also a
pixmap, Cairo does a slow copy instead of using XCopyArea(). So,
we use the same code that we used in GTK+ 2.6 (pre-cairo), by
filling the double-buffer pixmap with a tiled GC and
XFillRectangle().
* gdk/gdkwindow.c (BackingRectMethod): New structure with a
cairo_t and a GdkGC field. Depending on which of these fields
gets filled in, we'll use Cairo or GDK to clear the double-buffer
pixmap when painting a window.
(setup_backing_rect_method): Fill a BackingRectMethod as
appropriate, depending on the window's configuration and our
knowledge of whether Cairo is fast or slow when doing repeating
patterns.
(gdk_window_clear_backing_rect): Call
setup_backing_rect_method(). Depending on what it returns, use
Cairo to clear the double-buffer pixmap, or plain GDK.
2006-02-03 21:17:34 +00:00
|
|
|
setup_backing_rect_method (BackingRectMethod *method, GdkWindow *window, GdkWindowPaint *paint, int x_offset_cairo, int y_offset_cairo)
|
2004-02-18 17:03:46 +00:00
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
|
|
|
|
|
|
|
if (private->bg_pixmap == GDK_PARENT_RELATIVE_BG && private->parent)
|
|
|
|
{
|
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320, which used
2006-02-03 Federico Mena Quintero <federico@ximian.com>
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320,
which used to be our own
http://bugzilla.gnome.org/show_bug.cgi?id=314616. If one uses a
pixmap for a pattern in Cairo, and sets the pattern to
CAIRO_EXTEND_REPEAT; and if the destination surface is also a
pixmap, Cairo does a slow copy instead of using XCopyArea(). So,
we use the same code that we used in GTK+ 2.6 (pre-cairo), by
filling the double-buffer pixmap with a tiled GC and
XFillRectangle().
* gdk/gdkwindow.c (BackingRectMethod): New structure with a
cairo_t and a GdkGC field. Depending on which of these fields
gets filled in, we'll use Cairo or GDK to clear the double-buffer
pixmap when painting a window.
(setup_backing_rect_method): Fill a BackingRectMethod as
appropriate, depending on the window's configuration and our
knowledge of whether Cairo is fast or slow when doing repeating
patterns.
(gdk_window_clear_backing_rect): Call
setup_backing_rect_method(). Depending on what it returns, use
Cairo to clear the double-buffer pixmap, or plain GDK.
2006-02-03 21:17:34 +00:00
|
|
|
GdkWindowPaint tmp_paint;
|
|
|
|
|
|
|
|
tmp_paint = *paint;
|
|
|
|
tmp_paint.x_offset += private->x;
|
|
|
|
tmp_paint.y_offset += private->y;
|
|
|
|
|
|
|
|
x_offset_cairo += private->x;
|
|
|
|
y_offset_cairo += private->y;
|
|
|
|
|
|
|
|
setup_backing_rect_method (method, GDK_WINDOW (private->parent), &tmp_paint, x_offset_cairo, y_offset_cairo);
|
2004-02-18 17:03:46 +00:00
|
|
|
}
|
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320, which used
2006-02-03 Federico Mena Quintero <federico@ximian.com>
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320,
which used to be our own
http://bugzilla.gnome.org/show_bug.cgi?id=314616. If one uses a
pixmap for a pattern in Cairo, and sets the pattern to
CAIRO_EXTEND_REPEAT; and if the destination surface is also a
pixmap, Cairo does a slow copy instead of using XCopyArea(). So,
we use the same code that we used in GTK+ 2.6 (pre-cairo), by
filling the double-buffer pixmap with a tiled GC and
XFillRectangle().
* gdk/gdkwindow.c (BackingRectMethod): New structure with a
cairo_t and a GdkGC field. Depending on which of these fields
gets filled in, we'll use Cairo or GDK to clear the double-buffer
pixmap when painting a window.
(setup_backing_rect_method): Fill a BackingRectMethod as
appropriate, depending on the window's configuration and our
knowledge of whether Cairo is fast or slow when doing repeating
patterns.
(gdk_window_clear_backing_rect): Call
setup_backing_rect_method(). Depending on what it returns, use
Cairo to clear the double-buffer pixmap, or plain GDK.
2006-02-03 21:17:34 +00:00
|
|
|
else if (private->bg_pixmap &&
|
|
|
|
private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
|
|
|
|
private->bg_pixmap != GDK_NO_BG)
|
2004-02-18 17:03:46 +00:00
|
|
|
{
|
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320, which used
2006-02-03 Federico Mena Quintero <federico@ximian.com>
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320,
which used to be our own
http://bugzilla.gnome.org/show_bug.cgi?id=314616. If one uses a
pixmap for a pattern in Cairo, and sets the pattern to
CAIRO_EXTEND_REPEAT; and if the destination surface is also a
pixmap, Cairo does a slow copy instead of using XCopyArea(). So,
we use the same code that we used in GTK+ 2.6 (pre-cairo), by
filling the double-buffer pixmap with a tiled GC and
XFillRectangle().
* gdk/gdkwindow.c (BackingRectMethod): New structure with a
cairo_t and a GdkGC field. Depending on which of these fields
gets filled in, we'll use Cairo or GDK to clear the double-buffer
pixmap when painting a window.
(setup_backing_rect_method): Fill a BackingRectMethod as
appropriate, depending on the window's configuration and our
knowledge of whether Cairo is fast or slow when doing repeating
patterns.
(gdk_window_clear_backing_rect): Call
setup_backing_rect_method(). Depending on what it returns, use
Cairo to clear the double-buffer pixmap, or plain GDK.
2006-02-03 21:17:34 +00:00
|
|
|
/* This is a workaround for https://bugs.freedesktop.org/show_bug.cgi?id=4320.
|
|
|
|
* In it, using a pixmap as a repeating pattern in Cairo, and painting it to a
|
|
|
|
* pixmap destination surface, can be very slow (on the order of seconds for a
|
|
|
|
* whole-screen copy). The workaround is to use pretty much the same code that
|
|
|
|
* we used in GTK+ 2.6 (pre-Cairo), which clears the double-buffer pixmap with
|
|
|
|
* a tiled GC XFillRectangle().
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* Actually computing this flag is left as an exercise for the reader */
|
|
|
|
#if defined (G_OS_UNIX)
|
|
|
|
# define GDK_CAIRO_REPEAT_IS_FAST 0
|
|
|
|
#else
|
|
|
|
# define GDK_CAIRO_REPEAT_IS_FAST 1
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if GDK_CAIRO_REPEAT_IS_FAST
|
2005-03-17 01:54:40 +00:00
|
|
|
cairo_surface_t *surface = _gdk_drawable_ref_cairo_surface (private->bg_pixmap);
|
|
|
|
cairo_pattern_t *pattern = cairo_pattern_create_for_surface (surface);
|
|
|
|
cairo_surface_destroy (surface);
|
2004-02-18 17:03:46 +00:00
|
|
|
|
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320, which used
2006-02-03 Federico Mena Quintero <federico@ximian.com>
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320,
which used to be our own
http://bugzilla.gnome.org/show_bug.cgi?id=314616. If one uses a
pixmap for a pattern in Cairo, and sets the pattern to
CAIRO_EXTEND_REPEAT; and if the destination surface is also a
pixmap, Cairo does a slow copy instead of using XCopyArea(). So,
we use the same code that we used in GTK+ 2.6 (pre-cairo), by
filling the double-buffer pixmap with a tiled GC and
XFillRectangle().
* gdk/gdkwindow.c (BackingRectMethod): New structure with a
cairo_t and a GdkGC field. Depending on which of these fields
gets filled in, we'll use Cairo or GDK to clear the double-buffer
pixmap when painting a window.
(setup_backing_rect_method): Fill a BackingRectMethod as
appropriate, depending on the window's configuration and our
knowledge of whether Cairo is fast or slow when doing repeating
patterns.
(gdk_window_clear_backing_rect): Call
setup_backing_rect_method(). Depending on what it returns, use
Cairo to clear the double-buffer pixmap, or plain GDK.
2006-02-03 21:17:34 +00:00
|
|
|
if (x_offset_cairo != 0 || y_offset_cairo != 0)
|
2005-03-17 01:54:40 +00:00
|
|
|
{
|
2005-05-07 18:51:18 +00:00
|
|
|
cairo_matrix_t matrix;
|
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320, which used
2006-02-03 Federico Mena Quintero <federico@ximian.com>
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320,
which used to be our own
http://bugzilla.gnome.org/show_bug.cgi?id=314616. If one uses a
pixmap for a pattern in Cairo, and sets the pattern to
CAIRO_EXTEND_REPEAT; and if the destination surface is also a
pixmap, Cairo does a slow copy instead of using XCopyArea(). So,
we use the same code that we used in GTK+ 2.6 (pre-cairo), by
filling the double-buffer pixmap with a tiled GC and
XFillRectangle().
* gdk/gdkwindow.c (BackingRectMethod): New structure with a
cairo_t and a GdkGC field. Depending on which of these fields
gets filled in, we'll use Cairo or GDK to clear the double-buffer
pixmap when painting a window.
(setup_backing_rect_method): Fill a BackingRectMethod as
appropriate, depending on the window's configuration and our
knowledge of whether Cairo is fast or slow when doing repeating
patterns.
(gdk_window_clear_backing_rect): Call
setup_backing_rect_method(). Depending on what it returns, use
Cairo to clear the double-buffer pixmap, or plain GDK.
2006-02-03 21:17:34 +00:00
|
|
|
cairo_matrix_init_translate (&matrix, x_offset_cairo, y_offset_cairo);
|
2005-05-07 18:51:18 +00:00
|
|
|
cairo_pattern_set_matrix (pattern, &matrix);
|
2005-03-17 01:54:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT);
|
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320, which used
2006-02-03 Federico Mena Quintero <federico@ximian.com>
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320,
which used to be our own
http://bugzilla.gnome.org/show_bug.cgi?id=314616. If one uses a
pixmap for a pattern in Cairo, and sets the pattern to
CAIRO_EXTEND_REPEAT; and if the destination surface is also a
pixmap, Cairo does a slow copy instead of using XCopyArea(). So,
we use the same code that we used in GTK+ 2.6 (pre-cairo), by
filling the double-buffer pixmap with a tiled GC and
XFillRectangle().
* gdk/gdkwindow.c (BackingRectMethod): New structure with a
cairo_t and a GdkGC field. Depending on which of these fields
gets filled in, we'll use Cairo or GDK to clear the double-buffer
pixmap when painting a window.
(setup_backing_rect_method): Fill a BackingRectMethod as
appropriate, depending on the window's configuration and our
knowledge of whether Cairo is fast or slow when doing repeating
patterns.
(gdk_window_clear_backing_rect): Call
setup_backing_rect_method(). Depending on what it returns, use
Cairo to clear the double-buffer pixmap, or plain GDK.
2006-02-03 21:17:34 +00:00
|
|
|
|
|
|
|
method->cr = cairo_create (paint->surface);
|
|
|
|
method->gc = NULL;
|
|
|
|
|
|
|
|
cairo_set_source (method->cr, pattern);
|
2005-03-17 01:54:40 +00:00
|
|
|
cairo_pattern_destroy (pattern);
|
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320, which used
2006-02-03 Federico Mena Quintero <federico@ximian.com>
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320,
which used to be our own
http://bugzilla.gnome.org/show_bug.cgi?id=314616. If one uses a
pixmap for a pattern in Cairo, and sets the pattern to
CAIRO_EXTEND_REPEAT; and if the destination surface is also a
pixmap, Cairo does a slow copy instead of using XCopyArea(). So,
we use the same code that we used in GTK+ 2.6 (pre-cairo), by
filling the double-buffer pixmap with a tiled GC and
XFillRectangle().
* gdk/gdkwindow.c (BackingRectMethod): New structure with a
cairo_t and a GdkGC field. Depending on which of these fields
gets filled in, we'll use Cairo or GDK to clear the double-buffer
pixmap when painting a window.
(setup_backing_rect_method): Fill a BackingRectMethod as
appropriate, depending on the window's configuration and our
knowledge of whether Cairo is fast or slow when doing repeating
patterns.
(gdk_window_clear_backing_rect): Call
setup_backing_rect_method(). Depending on what it returns, use
Cairo to clear the double-buffer pixmap, or plain GDK.
2006-02-03 21:17:34 +00:00
|
|
|
#else
|
|
|
|
guint gc_mask;
|
|
|
|
GdkGCValues gc_values;
|
|
|
|
|
|
|
|
gc_values.fill = GDK_TILED;
|
|
|
|
gc_values.tile = private->bg_pixmap;
|
|
|
|
gc_values.ts_x_origin = -x_offset_cairo;
|
|
|
|
gc_values.ts_y_origin = -y_offset_cairo;
|
|
|
|
|
|
|
|
gc_mask = GDK_GC_FILL | GDK_GC_TILE | GDK_GC_TS_X_ORIGIN | GDK_GC_TS_Y_ORIGIN;
|
|
|
|
|
|
|
|
method->gc = gdk_gc_new_with_values (paint->pixmap, &gc_values, gc_mask);
|
|
|
|
#endif
|
2004-02-18 17:03:46 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320, which used
2006-02-03 Federico Mena Quintero <federico@ximian.com>
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320,
which used to be our own
http://bugzilla.gnome.org/show_bug.cgi?id=314616. If one uses a
pixmap for a pattern in Cairo, and sets the pattern to
CAIRO_EXTEND_REPEAT; and if the destination surface is also a
pixmap, Cairo does a slow copy instead of using XCopyArea(). So,
we use the same code that we used in GTK+ 2.6 (pre-cairo), by
filling the double-buffer pixmap with a tiled GC and
XFillRectangle().
* gdk/gdkwindow.c (BackingRectMethod): New structure with a
cairo_t and a GdkGC field. Depending on which of these fields
gets filled in, we'll use Cairo or GDK to clear the double-buffer
pixmap when painting a window.
(setup_backing_rect_method): Fill a BackingRectMethod as
appropriate, depending on the window's configuration and our
knowledge of whether Cairo is fast or slow when doing repeating
patterns.
(gdk_window_clear_backing_rect): Call
setup_backing_rect_method(). Depending on what it returns, use
Cairo to clear the double-buffer pixmap, or plain GDK.
2006-02-03 21:17:34 +00:00
|
|
|
method->cr = cairo_create (paint->surface);
|
|
|
|
|
|
|
|
gdk_cairo_set_source_color (method->cr, &private->bg_color);
|
2005-03-17 01:54:40 +00:00
|
|
|
}
|
|
|
|
}
|
2004-02-18 17:03:46 +00:00
|
|
|
|
2000-03-28 01:24:44 +00:00
|
|
|
static void
|
2009-02-05 13:53:07 +00:00
|
|
|
gdk_window_clear_backing_region (GdkWindow *window,
|
|
|
|
GdkRegion *region)
|
2000-03-28 01:24:44 +00:00
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
2000-03-28 01:24:44 +00:00
|
|
|
GdkWindowPaint *paint = private->paint_stack->data;
|
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320, which used
2006-02-03 Federico Mena Quintero <federico@ximian.com>
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320,
which used to be our own
http://bugzilla.gnome.org/show_bug.cgi?id=314616. If one uses a
pixmap for a pattern in Cairo, and sets the pattern to
CAIRO_EXTEND_REPEAT; and if the destination surface is also a
pixmap, Cairo does a slow copy instead of using XCopyArea(). So,
we use the same code that we used in GTK+ 2.6 (pre-cairo), by
filling the double-buffer pixmap with a tiled GC and
XFillRectangle().
* gdk/gdkwindow.c (BackingRectMethod): New structure with a
cairo_t and a GdkGC field. Depending on which of these fields
gets filled in, we'll use Cairo or GDK to clear the double-buffer
pixmap when painting a window.
(setup_backing_rect_method): Fill a BackingRectMethod as
appropriate, depending on the window's configuration and our
knowledge of whether Cairo is fast or slow when doing repeating
patterns.
(gdk_window_clear_backing_rect): Call
setup_backing_rect_method(). Depending on what it returns, use
Cairo to clear the double-buffer pixmap, or plain GDK.
2006-02-03 21:17:34 +00:00
|
|
|
BackingRectMethod method;
|
2009-02-05 13:53:07 +00:00
|
|
|
GdkRegion *clip;
|
|
|
|
GdkRectangle clipbox;
|
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320, which used
2006-02-03 Federico Mena Quintero <federico@ximian.com>
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320,
which used to be our own
http://bugzilla.gnome.org/show_bug.cgi?id=314616. If one uses a
pixmap for a pattern in Cairo, and sets the pattern to
CAIRO_EXTEND_REPEAT; and if the destination surface is also a
pixmap, Cairo does a slow copy instead of using XCopyArea(). So,
we use the same code that we used in GTK+ 2.6 (pre-cairo), by
filling the double-buffer pixmap with a tiled GC and
XFillRectangle().
* gdk/gdkwindow.c (BackingRectMethod): New structure with a
cairo_t and a GdkGC field. Depending on which of these fields
gets filled in, we'll use Cairo or GDK to clear the double-buffer
pixmap when painting a window.
(setup_backing_rect_method): Fill a BackingRectMethod as
appropriate, depending on the window's configuration and our
knowledge of whether Cairo is fast or slow when doing repeating
patterns.
(gdk_window_clear_backing_rect): Call
setup_backing_rect_method(). Depending on what it returns, use
Cairo to clear the double-buffer pixmap, or plain GDK.
2006-02-03 21:17:34 +00:00
|
|
|
#if 0
|
|
|
|
GTimer *timer;
|
|
|
|
double elapsed;
|
|
|
|
#endif
|
2000-03-28 01:24:44 +00:00
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
return;
|
2003-08-20 21:11:25 +00:00
|
|
|
|
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320, which used
2006-02-03 Federico Mena Quintero <federico@ximian.com>
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320,
which used to be our own
http://bugzilla.gnome.org/show_bug.cgi?id=314616. If one uses a
pixmap for a pattern in Cairo, and sets the pattern to
CAIRO_EXTEND_REPEAT; and if the destination surface is also a
pixmap, Cairo does a slow copy instead of using XCopyArea(). So,
we use the same code that we used in GTK+ 2.6 (pre-cairo), by
filling the double-buffer pixmap with a tiled GC and
XFillRectangle().
* gdk/gdkwindow.c (BackingRectMethod): New structure with a
cairo_t and a GdkGC field. Depending on which of these fields
gets filled in, we'll use Cairo or GDK to clear the double-buffer
pixmap when painting a window.
(setup_backing_rect_method): Fill a BackingRectMethod as
appropriate, depending on the window's configuration and our
knowledge of whether Cairo is fast or slow when doing repeating
patterns.
(gdk_window_clear_backing_rect): Call
setup_backing_rect_method(). Depending on what it returns, use
Cairo to clear the double-buffer pixmap, or plain GDK.
2006-02-03 21:17:34 +00:00
|
|
|
#if 0
|
|
|
|
timer = g_timer_new ();
|
|
|
|
#endif
|
|
|
|
|
|
|
|
method.cr = NULL;
|
|
|
|
method.gc = NULL;
|
|
|
|
setup_backing_rect_method (&method, window, paint, 0, 0);
|
|
|
|
|
2009-02-05 13:53:07 +00:00
|
|
|
clip = gdk_region_copy (paint->region);
|
|
|
|
gdk_region_intersect (clip, region);
|
|
|
|
gdk_region_get_clipbox (clip, &clipbox);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
|
|
|
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320, which used
2006-02-03 Federico Mena Quintero <federico@ximian.com>
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320,
which used to be our own
http://bugzilla.gnome.org/show_bug.cgi?id=314616. If one uses a
pixmap for a pattern in Cairo, and sets the pattern to
CAIRO_EXTEND_REPEAT; and if the destination surface is also a
pixmap, Cairo does a slow copy instead of using XCopyArea(). So,
we use the same code that we used in GTK+ 2.6 (pre-cairo), by
filling the double-buffer pixmap with a tiled GC and
XFillRectangle().
* gdk/gdkwindow.c (BackingRectMethod): New structure with a
cairo_t and a GdkGC field. Depending on which of these fields
gets filled in, we'll use Cairo or GDK to clear the double-buffer
pixmap when painting a window.
(setup_backing_rect_method): Fill a BackingRectMethod as
appropriate, depending on the window's configuration and our
knowledge of whether Cairo is fast or slow when doing repeating
patterns.
(gdk_window_clear_backing_rect): Call
setup_backing_rect_method(). Depending on what it returns, use
Cairo to clear the double-buffer pixmap, or plain GDK.
2006-02-03 21:17:34 +00:00
|
|
|
if (method.cr)
|
|
|
|
{
|
|
|
|
g_assert (method.gc == NULL);
|
|
|
|
|
2009-02-05 13:53:07 +00:00
|
|
|
gdk_cairo_region (method.cr, clip);
|
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320, which used
2006-02-03 Federico Mena Quintero <federico@ximian.com>
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320,
which used to be our own
http://bugzilla.gnome.org/show_bug.cgi?id=314616. If one uses a
pixmap for a pattern in Cairo, and sets the pattern to
CAIRO_EXTEND_REPEAT; and if the destination surface is also a
pixmap, Cairo does a slow copy instead of using XCopyArea(). So,
we use the same code that we used in GTK+ 2.6 (pre-cairo), by
filling the double-buffer pixmap with a tiled GC and
XFillRectangle().
* gdk/gdkwindow.c (BackingRectMethod): New structure with a
cairo_t and a GdkGC field. Depending on which of these fields
gets filled in, we'll use Cairo or GDK to clear the double-buffer
pixmap when painting a window.
(setup_backing_rect_method): Fill a BackingRectMethod as
appropriate, depending on the window's configuration and our
knowledge of whether Cairo is fast or slow when doing repeating
patterns.
(gdk_window_clear_backing_rect): Call
setup_backing_rect_method(). Depending on what it returns, use
Cairo to clear the double-buffer pixmap, or plain GDK.
2006-02-03 21:17:34 +00:00
|
|
|
cairo_fill (method.cr);
|
2003-08-20 21:11:25 +00:00
|
|
|
|
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320, which used
2006-02-03 Federico Mena Quintero <federico@ximian.com>
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320,
which used to be our own
http://bugzilla.gnome.org/show_bug.cgi?id=314616. If one uses a
pixmap for a pattern in Cairo, and sets the pattern to
CAIRO_EXTEND_REPEAT; and if the destination surface is also a
pixmap, Cairo does a slow copy instead of using XCopyArea(). So,
we use the same code that we used in GTK+ 2.6 (pre-cairo), by
filling the double-buffer pixmap with a tiled GC and
XFillRectangle().
* gdk/gdkwindow.c (BackingRectMethod): New structure with a
cairo_t and a GdkGC field. Depending on which of these fields
gets filled in, we'll use Cairo or GDK to clear the double-buffer
pixmap when painting a window.
(setup_backing_rect_method): Fill a BackingRectMethod as
appropriate, depending on the window's configuration and our
knowledge of whether Cairo is fast or slow when doing repeating
patterns.
(gdk_window_clear_backing_rect): Call
setup_backing_rect_method(). Depending on what it returns, use
Cairo to clear the double-buffer pixmap, or plain GDK.
2006-02-03 21:17:34 +00:00
|
|
|
cairo_destroy (method.cr);
|
|
|
|
#if 0
|
|
|
|
elapsed = g_timer_elapsed (timer, NULL);
|
|
|
|
g_print ("Draw the background with Cairo: %fs\n", elapsed);
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
g_assert (method.gc != NULL);
|
2005-03-17 01:54:40 +00:00
|
|
|
|
2009-02-05 13:53:07 +00:00
|
|
|
gdk_gc_set_clip_region (method.gc, clip);
|
|
|
|
gdk_draw_rectangle (window, method.gc, TRUE,
|
|
|
|
clipbox.x, clipbox.y,
|
|
|
|
clipbox.width, clipbox.height);
|
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320, which used
2006-02-03 Federico Mena Quintero <federico@ximian.com>
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320,
which used to be our own
http://bugzilla.gnome.org/show_bug.cgi?id=314616. If one uses a
pixmap for a pattern in Cairo, and sets the pattern to
CAIRO_EXTEND_REPEAT; and if the destination surface is also a
pixmap, Cairo does a slow copy instead of using XCopyArea(). So,
we use the same code that we used in GTK+ 2.6 (pre-cairo), by
filling the double-buffer pixmap with a tiled GC and
XFillRectangle().
* gdk/gdkwindow.c (BackingRectMethod): New structure with a
cairo_t and a GdkGC field. Depending on which of these fields
gets filled in, we'll use Cairo or GDK to clear the double-buffer
pixmap when painting a window.
(setup_backing_rect_method): Fill a BackingRectMethod as
appropriate, depending on the window's configuration and our
knowledge of whether Cairo is fast or slow when doing repeating
patterns.
(gdk_window_clear_backing_rect): Call
setup_backing_rect_method(). Depending on what it returns, use
Cairo to clear the double-buffer pixmap, or plain GDK.
2006-02-03 21:17:34 +00:00
|
|
|
g_object_unref (method.gc);
|
2005-03-17 01:54:40 +00:00
|
|
|
|
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320, which used
2006-02-03 Federico Mena Quintero <federico@ximian.com>
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320,
which used to be our own
http://bugzilla.gnome.org/show_bug.cgi?id=314616. If one uses a
pixmap for a pattern in Cairo, and sets the pattern to
CAIRO_EXTEND_REPEAT; and if the destination surface is also a
pixmap, Cairo does a slow copy instead of using XCopyArea(). So,
we use the same code that we used in GTK+ 2.6 (pre-cairo), by
filling the double-buffer pixmap with a tiled GC and
XFillRectangle().
* gdk/gdkwindow.c (BackingRectMethod): New structure with a
cairo_t and a GdkGC field. Depending on which of these fields
gets filled in, we'll use Cairo or GDK to clear the double-buffer
pixmap when painting a window.
(setup_backing_rect_method): Fill a BackingRectMethod as
appropriate, depending on the window's configuration and our
knowledge of whether Cairo is fast or slow when doing repeating
patterns.
(gdk_window_clear_backing_rect): Call
setup_backing_rect_method(). Depending on what it returns, use
Cairo to clear the double-buffer pixmap, or plain GDK.
2006-02-03 21:17:34 +00:00
|
|
|
#if 0
|
|
|
|
elapsed = g_timer_elapsed (timer, NULL);
|
|
|
|
g_print ("Draw the background with GDK: %fs\n", elapsed);
|
|
|
|
#endif
|
|
|
|
}
|
2005-03-17 01:54:40 +00:00
|
|
|
|
2009-02-05 13:53:07 +00:00
|
|
|
gdk_region_destroy (clip);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320, which used
2006-02-03 Federico Mena Quintero <federico@ximian.com>
Work around https://bugs.freedesktop.org/show_bug.cgi?id=4320,
which used to be our own
http://bugzilla.gnome.org/show_bug.cgi?id=314616. If one uses a
pixmap for a pattern in Cairo, and sets the pattern to
CAIRO_EXTEND_REPEAT; and if the destination surface is also a
pixmap, Cairo does a slow copy instead of using XCopyArea(). So,
we use the same code that we used in GTK+ 2.6 (pre-cairo), by
filling the double-buffer pixmap with a tiled GC and
XFillRectangle().
* gdk/gdkwindow.c (BackingRectMethod): New structure with a
cairo_t and a GdkGC field. Depending on which of these fields
gets filled in, we'll use Cairo or GDK to clear the double-buffer
pixmap when painting a window.
(setup_backing_rect_method): Fill a BackingRectMethod as
appropriate, depending on the window's configuration and our
knowledge of whether Cairo is fast or slow when doing repeating
patterns.
(gdk_window_clear_backing_rect): Call
setup_backing_rect_method(). Depending on what it returns, use
Cairo to clear the double-buffer pixmap, or plain GDK.
2006-02-03 21:17:34 +00:00
|
|
|
#if 0
|
|
|
|
g_timer_destroy (timer);
|
|
|
|
#endif
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
static void
|
2009-02-05 13:53:07 +00:00
|
|
|
gdk_window_clear_backing_region_redirect (GdkWindow *window,
|
|
|
|
GdkRegion *region)
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
|
|
|
GdkWindowRedirect *redirect = private->redirect;
|
|
|
|
GdkRegion *clip_region;
|
2009-02-05 13:53:07 +00:00
|
|
|
GdkRectangle clipbox;
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
gint x_offset, y_offset;
|
|
|
|
BackingRectMethod method;
|
|
|
|
GdkWindowPaint paint;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
return;
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
clip_region = _gdk_window_calculate_full_clip_region (window,
|
|
|
|
GDK_WINDOW (redirect->redirected),
|
|
|
|
TRUE,
|
|
|
|
&x_offset, &y_offset);
|
2009-02-05 13:53:07 +00:00
|
|
|
gdk_region_intersect (clip_region, region);
|
|
|
|
|
2009-03-02 15:32:44 +00:00
|
|
|
/* offset is from redirected window origin to window origin, convert to
|
|
|
|
the offset from the redirected pixmap origin to the window origin */
|
|
|
|
x_offset += redirect->dest_x - redirect->src_x;
|
|
|
|
y_offset += redirect->dest_y - redirect->src_y;
|
|
|
|
|
|
|
|
/* Convert region to pixmap coords */
|
|
|
|
gdk_region_offset (clip_region, x_offset, y_offset);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-03-02 15:32:44 +00:00
|
|
|
paint.x_offset = 0;
|
|
|
|
paint.y_offset = 0;
|
2009-02-28 05:24:07 +00:00
|
|
|
paint.pixmap = redirect->pixmap;
|
|
|
|
paint.surface = _gdk_drawable_ref_cairo_surface (redirect->pixmap);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
method.cr = NULL;
|
|
|
|
method.gc = NULL;
|
2009-03-02 15:32:44 +00:00
|
|
|
setup_backing_rect_method (&method, window, &paint, -x_offset, -y_offset);
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
|
|
|
|
if (method.cr)
|
|
|
|
{
|
|
|
|
g_assert (method.gc == NULL);
|
|
|
|
|
|
|
|
gdk_cairo_region (method.cr, clip_region);
|
|
|
|
cairo_fill (method.cr);
|
|
|
|
|
|
|
|
cairo_destroy (method.cr);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
g_assert (method.gc != NULL);
|
|
|
|
|
2009-02-05 13:53:07 +00:00
|
|
|
gdk_region_get_clipbox (clip_region, &clipbox);
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
gdk_gc_set_clip_region (method.gc, clip_region);
|
2009-03-02 15:32:44 +00:00
|
|
|
gdk_draw_rectangle (redirect->pixmap, method.gc, TRUE,
|
2009-02-05 13:53:07 +00:00
|
|
|
clipbox.x, clipbox.y,
|
|
|
|
clipbox.width, clipbox.height);
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
g_object_unref (method.gc);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
gdk_region_destroy (clip_region);
|
|
|
|
cairo_surface_destroy (paint.surface);
|
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static void
|
2009-02-05 13:53:07 +00:00
|
|
|
gdk_window_clear_backing_region_direct (GdkWindow *window,
|
|
|
|
GdkRegion *region)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
|
|
|
BackingRectMethod method;
|
|
|
|
GdkWindowPaint paint;
|
2009-02-05 13:53:07 +00:00
|
|
|
GdkRegion *clip;
|
|
|
|
GdkRectangle clipbox;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
return;
|
|
|
|
|
|
|
|
paint.x_offset = 0;
|
|
|
|
paint.y_offset = 0;
|
|
|
|
paint.pixmap = window;
|
|
|
|
paint.surface = _gdk_drawable_ref_cairo_surface (window);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
method.cr = NULL;
|
|
|
|
method.gc = NULL;
|
|
|
|
setup_backing_rect_method (&method, window, &paint, 0, 0);
|
|
|
|
|
2009-02-05 13:53:07 +00:00
|
|
|
clip = gdk_region_copy (private->clip_region_with_children);
|
|
|
|
gdk_region_intersect (clip, region);
|
|
|
|
gdk_region_get_clipbox (clip, &clipbox);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (method.cr)
|
|
|
|
{
|
|
|
|
g_assert (method.gc == NULL);
|
|
|
|
|
2009-02-05 13:53:07 +00:00
|
|
|
gdk_cairo_region (method.cr, clip);
|
2008-07-18 13:03:42 +00:00
|
|
|
cairo_fill (method.cr);
|
|
|
|
|
|
|
|
cairo_destroy (method.cr);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
g_assert (method.gc != NULL);
|
|
|
|
|
2009-02-05 13:53:07 +00:00
|
|
|
gdk_gc_set_clip_region (method.gc, clip);
|
|
|
|
gdk_draw_rectangle (window, method.gc, TRUE,
|
|
|
|
clipbox.x, clipbox.y,
|
|
|
|
clipbox.width, clipbox.height);
|
2008-07-18 13:03:42 +00:00
|
|
|
g_object_unref (method.gc);
|
|
|
|
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-05 13:53:07 +00:00
|
|
|
gdk_region_destroy (clip);
|
2008-07-18 13:03:42 +00:00
|
|
|
cairo_surface_destroy (paint.surface);
|
|
|
|
}
|
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_clear:
|
|
|
|
* @window: a #GdkWindow
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
* Clears an entire @window to the background color or background pixmap.
|
|
|
|
**/
|
2000-05-05 15:57:48 +00:00
|
|
|
void
|
|
|
|
gdk_window_clear (GdkWindow *window)
|
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
gint width, height;
|
2008-10-21 21:42:39 +00:00
|
|
|
|
2000-05-05 15:57:48 +00:00
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
gdk_drawable_get_size (GDK_DRAWABLE (window), &width, &height);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2000-05-05 15:57:48 +00:00
|
|
|
gdk_window_clear_area (window, 0, 0,
|
2009-06-01 10:04:36 +00:00
|
|
|
width, height);
|
2000-05-05 15:57:48 +00:00
|
|
|
}
|
|
|
|
|
2009-11-04 13:01:36 +00:00
|
|
|
/* TRUE if the window clears to the same pixels as a native
|
|
|
|
window clear. This means you can use the native window
|
|
|
|
clearing operation, and additionally it means any clearing
|
|
|
|
done by the native window system for you will already be right */
|
2009-08-11 13:41:23 +00:00
|
|
|
static gboolean
|
2009-11-04 13:01:36 +00:00
|
|
|
clears_as_native (GdkWindowObject *private)
|
2009-08-11 13:41:23 +00:00
|
|
|
{
|
|
|
|
GdkWindowObject *next;
|
|
|
|
|
|
|
|
next = private;
|
|
|
|
do
|
|
|
|
{
|
|
|
|
private = next;
|
|
|
|
if (gdk_window_has_impl (private))
|
|
|
|
return TRUE;
|
|
|
|
next = private->parent;
|
|
|
|
}
|
|
|
|
while (private->bg_pixmap == GDK_PARENT_RELATIVE_BG &&
|
|
|
|
next && next->window_type != GDK_WINDOW_ROOT);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2009-02-05 13:53:07 +00:00
|
|
|
static void
|
|
|
|
gdk_window_clear_region_internal (GdkWindow *window,
|
|
|
|
GdkRegion *region,
|
|
|
|
gboolean send_expose)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-05 13:53:07 +00:00
|
|
|
if (private->paint_stack)
|
|
|
|
gdk_window_clear_backing_region (window, region);
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (private->redirect)
|
|
|
|
gdk_window_clear_backing_region_redirect (window, region);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
|
2009-11-04 13:01:36 +00:00
|
|
|
if (impl_iface->clear_region && clears_as_native (private))
|
2009-06-26 15:07:24 +00:00
|
|
|
{
|
|
|
|
GdkRegion *copy;
|
|
|
|
copy = gdk_region_copy (region);
|
2009-08-31 08:44:11 +00:00
|
|
|
gdk_region_intersect (copy,
|
|
|
|
private->clip_region_with_children);
|
2009-06-26 15:07:24 +00:00
|
|
|
|
2009-11-03 13:39:50 +00:00
|
|
|
|
|
|
|
/* Drawing directly to the window, flush anything outstanding to
|
|
|
|
guarantee ordering. */
|
|
|
|
gdk_window_flush (window);
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->clear_region (window, copy, send_expose);
|
2009-06-26 15:07:24 +00:00
|
|
|
|
|
|
|
gdk_region_destroy (copy);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gdk_window_clear_backing_region_direct (window, region);
|
|
|
|
if (send_expose)
|
|
|
|
gdk_window_invalidate_region (window, region, FALSE);
|
|
|
|
}
|
2009-02-05 13:53:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static void
|
|
|
|
gdk_window_clear_area_internal (GdkWindow *window,
|
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
gint width,
|
|
|
|
gint height,
|
|
|
|
gboolean send_expose)
|
|
|
|
{
|
2009-02-05 13:53:07 +00:00
|
|
|
GdkRectangle rect;
|
|
|
|
GdkRegion *region;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-26 13:45:53 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
return;
|
|
|
|
|
2009-09-11 13:21:43 +00:00
|
|
|
/* Terminate early to avoid weird interpretation of
|
|
|
|
zero width/height by XClearArea */
|
|
|
|
if (width == 0 || height == 0)
|
|
|
|
return;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-02-05 13:53:07 +00:00
|
|
|
rect.x = x;
|
2009-02-18 09:54:49 +00:00
|
|
|
rect.y = y;
|
2009-02-05 13:53:07 +00:00
|
|
|
rect.width = width;
|
|
|
|
rect.height = height;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-02-05 13:53:07 +00:00
|
|
|
region = gdk_region_rectangle (&rect);
|
|
|
|
gdk_window_clear_region_internal (window,
|
|
|
|
region,
|
2009-12-18 14:35:04 +00:00
|
|
|
send_expose);
|
2009-02-05 13:53:07 +00:00
|
|
|
gdk_region_destroy (region);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-05 13:53:07 +00:00
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_clear_area:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @x: x coordinate of rectangle to clear
|
|
|
|
* @y: y coordinate of rectangle to clear
|
|
|
|
* @width: width of rectangle to clear
|
|
|
|
* @height: height of rectangle to clear
|
|
|
|
*
|
|
|
|
* Clears an area of @window to the background color or background pixmap.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
**/
|
2000-03-28 01:24:44 +00:00
|
|
|
void
|
|
|
|
gdk_window_clear_area (GdkWindow *window,
|
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
gint width,
|
|
|
|
gint height)
|
|
|
|
{
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_window_clear_area_internal (window,
|
|
|
|
x, y,
|
|
|
|
width, height,
|
|
|
|
FALSE);
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_clear_area_e:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @x: x coordinate of rectangle to clear
|
|
|
|
* @y: y coordinate of rectangle to clear
|
|
|
|
* @width: width of rectangle to clear
|
|
|
|
* @height: height of rectangle to clear
|
|
|
|
*
|
|
|
|
* Like gdk_window_clear_area(), but also generates an expose event for
|
|
|
|
* the cleared area.
|
|
|
|
*
|
|
|
|
* This function has a stupid name because it dates back to the mists
|
|
|
|
* time, pre-GDK-1.0.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
**/
|
2000-03-28 01:24:44 +00:00
|
|
|
void
|
|
|
|
gdk_window_clear_area_e (GdkWindow *window,
|
2009-06-01 10:04:36 +00:00
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
gint width,
|
|
|
|
gint height)
|
2000-03-28 01:24:44 +00:00
|
|
|
{
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_window_clear_area_internal (window,
|
|
|
|
x, y,
|
|
|
|
width, height,
|
|
|
|
TRUE);
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
static void
|
|
|
|
gdk_window_draw_image (GdkDrawable *drawable,
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkGC *gc,
|
|
|
|
GdkImage *image,
|
|
|
|
gint xsrc,
|
|
|
|
gint ysrc,
|
|
|
|
gint xdest,
|
|
|
|
gint ydest,
|
|
|
|
gint width,
|
|
|
|
gint height)
|
2000-03-28 01:24:44 +00:00
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (drawable))
|
|
|
|
return;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
BEGIN_DRAW;
|
|
|
|
gdk_draw_image (impl, gc, image, xsrc, ysrc,
|
|
|
|
xdest - x_offset, ydest - y_offset,
|
|
|
|
width, height);
|
|
|
|
END_DRAW;
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
2002-01-04 05:58:01 +00:00
|
|
|
static void
|
|
|
|
gdk_window_draw_pixbuf (GdkDrawable *drawable,
|
|
|
|
GdkGC *gc,
|
|
|
|
GdkPixbuf *pixbuf,
|
|
|
|
gint src_x,
|
|
|
|
gint src_y,
|
|
|
|
gint dest_x,
|
|
|
|
gint dest_y,
|
|
|
|
gint width,
|
|
|
|
gint height,
|
|
|
|
GdkRgbDither dither,
|
|
|
|
gint x_dither,
|
|
|
|
gint y_dither)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *)drawable;
|
2009-07-23 19:52:32 +00:00
|
|
|
GdkDrawableClass *klass;
|
2002-01-04 05:58:01 +00:00
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (drawable))
|
|
|
|
return;
|
2009-01-16 14:45:18 +00:00
|
|
|
|
|
|
|
/* If no gc => no user clipping, but we need clipping
|
|
|
|
for window emulation, so use a scratch gc */
|
|
|
|
if (!gc)
|
|
|
|
gc = _gdk_drawable_get_scratch_gc (drawable, FALSE);
|
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
BEGIN_DRAW;
|
2009-07-23 19:52:32 +00:00
|
|
|
|
|
|
|
klass = GDK_DRAWABLE_GET_CLASS (impl);
|
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
if (private->paint_stack)
|
2009-07-23 19:52:32 +00:00
|
|
|
klass->draw_pixbuf (impl, gc, pixbuf, src_x, src_y,
|
|
|
|
dest_x - x_offset, dest_y - y_offset,
|
|
|
|
width, height,
|
|
|
|
dither, x_dither - x_offset, y_dither - y_offset);
|
2009-06-01 12:45:22 +00:00
|
|
|
else
|
2009-07-23 19:52:32 +00:00
|
|
|
klass->draw_pixbuf (impl, gc, pixbuf, src_x, src_y,
|
|
|
|
dest_x - x_offset, dest_y - y_offset,
|
|
|
|
width, height,
|
|
|
|
dither, x_dither, y_dither);
|
2009-06-01 12:45:22 +00:00
|
|
|
END_DRAW;
|
2002-01-04 05:58:01 +00:00
|
|
|
}
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
|
2004-11-21 16:24:01 +00:00
|
|
|
static void
|
|
|
|
gdk_window_draw_trapezoids (GdkDrawable *drawable,
|
|
|
|
GdkGC *gc,
|
|
|
|
GdkTrapezoid *trapezoids,
|
|
|
|
gint n_trapezoids)
|
|
|
|
{
|
|
|
|
GdkTrapezoid *new_trapezoids = NULL;
|
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (drawable))
|
|
|
|
return;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
BEGIN_DRAW;
|
|
|
|
|
2004-11-21 16:24:01 +00:00
|
|
|
if (x_offset != 0 || y_offset != 0)
|
|
|
|
{
|
|
|
|
gint i;
|
|
|
|
|
|
|
|
new_trapezoids = g_new (GdkTrapezoid, n_trapezoids);
|
|
|
|
for (i=0; i < n_trapezoids; i++)
|
|
|
|
{
|
|
|
|
new_trapezoids[i].y1 = trapezoids[i].y1 - y_offset;
|
|
|
|
new_trapezoids[i].x11 = trapezoids[i].x11 - x_offset;
|
|
|
|
new_trapezoids[i].x21 = trapezoids[i].x21 - x_offset;
|
|
|
|
new_trapezoids[i].y2 = trapezoids[i].y2 - y_offset;
|
|
|
|
new_trapezoids[i].x12 = trapezoids[i].x12 - x_offset;
|
|
|
|
new_trapezoids[i].x22 = trapezoids[i].x22 - x_offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
trapezoids = new_trapezoids;
|
|
|
|
}
|
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
gdk_draw_trapezoids (impl, gc, trapezoids, n_trapezoids);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2007-03-09 21:57:37 +00:00
|
|
|
g_free (new_trapezoids);
|
2004-11-21 16:24:01 +00:00
|
|
|
|
2009-06-01 12:45:22 +00:00
|
|
|
END_DRAW;
|
2004-11-21 16:24:01 +00:00
|
|
|
}
|
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
static void
|
|
|
|
gdk_window_real_get_size (GdkDrawable *drawable,
|
2009-06-01 10:04:36 +00:00
|
|
|
gint *width,
|
|
|
|
gint *height)
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
{
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *)drawable;
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (width)
|
|
|
|
*width = private->width;
|
|
|
|
if (height)
|
|
|
|
*height = private->height;
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static GdkVisual*
|
|
|
|
gdk_window_real_get_visual (GdkDrawable *drawable)
|
|
|
|
{
|
|
|
|
GdkColormap *colormap;
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (drawable), NULL);
|
|
|
|
|
|
|
|
colormap = gdk_drawable_get_colormap (drawable);
|
|
|
|
return colormap ? gdk_colormap_get_visual (colormap) : NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static gint
|
|
|
|
gdk_window_real_get_depth (GdkDrawable *drawable)
|
|
|
|
{
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (drawable), 0);
|
|
|
|
|
2002-03-21 15:04:41 +00:00
|
|
|
return ((GdkWindowObject *)GDK_WINDOW (drawable))->depth;
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
}
|
|
|
|
|
2002-04-25 22:29:14 +00:00
|
|
|
static GdkScreen*
|
|
|
|
gdk_window_real_get_screen (GdkDrawable *drawable)
|
|
|
|
{
|
|
|
|
return gdk_drawable_get_screen (GDK_WINDOW_OBJECT (drawable)->impl);
|
|
|
|
}
|
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
static void
|
|
|
|
gdk_window_real_set_colormap (GdkDrawable *drawable,
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkColormap *cmap)
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
{
|
2008-12-08 11:19:10 +00:00
|
|
|
GdkWindowObject *private;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (drawable));
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (drawable))
|
|
|
|
return;
|
2008-12-08 11:19:10 +00:00
|
|
|
|
|
|
|
private = (GdkWindowObject *)drawable;
|
|
|
|
|
|
|
|
/* different colormap than parent, requires native window */
|
|
|
|
if (!private->input_only &&
|
|
|
|
cmap != gdk_drawable_get_colormap ((GdkDrawable *)(private->parent)))
|
2009-06-01 09:57:59 +00:00
|
|
|
gdk_window_ensure_native ((GdkWindow *)drawable);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-08 11:19:10 +00:00
|
|
|
gdk_drawable_set_colormap (private->impl, cmap);
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static GdkColormap*
|
|
|
|
gdk_window_real_get_colormap (GdkDrawable *drawable)
|
|
|
|
{
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (drawable), NULL);
|
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (drawable))
|
|
|
|
return NULL;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
return gdk_drawable_get_colormap (((GdkWindowObject*)drawable)->impl);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2000-10-24 00:15:14 +00:00
|
|
|
static GdkImage*
|
2002-01-04 05:58:01 +00:00
|
|
|
gdk_window_copy_to_image (GdkDrawable *drawable,
|
|
|
|
GdkImage *image,
|
|
|
|
gint src_x,
|
|
|
|
gint src_y,
|
|
|
|
gint dest_x,
|
|
|
|
gint dest_y,
|
|
|
|
gint width,
|
|
|
|
gint height)
|
2000-10-24 00:15:14 +00:00
|
|
|
{
|
2008-06-27 14:27:44 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *) drawable;
|
2000-10-24 00:15:14 +00:00
|
|
|
gint x_offset, y_offset;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2000-10-24 00:15:14 +00:00
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (drawable), NULL);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2000-10-24 00:15:14 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (drawable))
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
/* If we're here, a composite image was not necessary, so
|
|
|
|
* we can ignore the paint stack.
|
|
|
|
*/
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
/* TODO: Is this right? */
|
|
|
|
x_offset = 0;
|
2009-06-01 10:04:36 +00:00
|
|
|
y_offset = 0;
|
|
|
|
|
2008-06-27 14:27:44 +00:00
|
|
|
return gdk_drawable_copy_to_image (private->impl,
|
2003-11-17 23:16:49 +00:00
|
|
|
image,
|
|
|
|
src_x - x_offset,
|
|
|
|
src_y - y_offset,
|
|
|
|
dest_x, dest_y,
|
|
|
|
width, height);
|
2000-10-24 00:15:14 +00:00
|
|
|
}
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
|
2010-01-19 15:36:49 +00:00
|
|
|
static void
|
|
|
|
gdk_window_drop_cairo_surface (GdkWindowObject *private)
|
|
|
|
{
|
|
|
|
if (private->cairo_surface)
|
|
|
|
{
|
|
|
|
cairo_surface_finish (private->cairo_surface);
|
|
|
|
cairo_surface_set_user_data (private->cairo_surface, &gdk_window_cairo_key,
|
|
|
|
NULL, NULL);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static void
|
|
|
|
gdk_window_cairo_surface_destroy (void *data)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject*) data;
|
|
|
|
|
|
|
|
private->cairo_surface = NULL;
|
2010-01-19 13:44:52 +00:00
|
|
|
private->impl_window->outstanding_surfaces--;
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
2008-12-15 14:50:41 +00:00
|
|
|
static cairo_surface_t *
|
|
|
|
gdk_window_create_cairo_surface (GdkDrawable *drawable,
|
|
|
|
int width,
|
|
|
|
int height)
|
|
|
|
{
|
|
|
|
return _gdk_windowing_create_cairo_surface (GDK_WINDOW_OBJECT(drawable)->impl,
|
|
|
|
width, height);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-03-17 01:54:40 +00:00
|
|
|
static cairo_surface_t *
|
|
|
|
gdk_window_ref_cairo_surface (GdkDrawable *drawable)
|
2005-02-03 23:29:02 +00:00
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject*) drawable;
|
2005-03-17 01:54:40 +00:00
|
|
|
cairo_surface_t *surface;
|
2005-02-03 23:29:02 +00:00
|
|
|
|
|
|
|
if (private->paint_stack)
|
|
|
|
{
|
|
|
|
GdkWindowPaint *paint = private->paint_stack->data;
|
2005-03-17 01:54:40 +00:00
|
|
|
|
|
|
|
surface = paint->surface;
|
|
|
|
cairo_surface_reference (surface);
|
2005-02-03 23:29:02 +00:00
|
|
|
}
|
|
|
|
else
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* This will be drawing directly to the window, so flush implicit paint */
|
2008-12-09 11:26:01 +00:00
|
|
|
gdk_window_flush ((GdkWindow *)drawable);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (!private->cairo_surface)
|
|
|
|
{
|
|
|
|
int width, height;
|
|
|
|
GdkDrawable *source;
|
|
|
|
|
|
|
|
/* It would be nice if we had some cairo support here so we
|
|
|
|
could set the clip rect on the cairo surface */
|
|
|
|
width = private->abs_x + private->width;
|
|
|
|
height = private->abs_y + private->height;
|
|
|
|
|
|
|
|
source = _gdk_drawable_get_source_drawable (drawable);
|
|
|
|
|
2008-12-15 14:50:41 +00:00
|
|
|
private->cairo_surface = _gdk_drawable_create_cairo_surface (source, width, height);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (private->cairo_surface)
|
|
|
|
{
|
2010-01-19 13:44:52 +00:00
|
|
|
private->impl_window->outstanding_surfaces++;
|
|
|
|
|
2009-06-01 10:04:36 +00:00
|
|
|
cairo_surface_set_device_offset (private->cairo_surface,
|
2008-07-18 13:03:42 +00:00
|
|
|
private->abs_x,
|
|
|
|
private->abs_y);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
cairo_surface_set_user_data (private->cairo_surface, &gdk_window_cairo_key,
|
|
|
|
drawable, gdk_window_cairo_surface_destroy);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
cairo_surface_reference (private->cairo_surface);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
surface = private->cairo_surface;
|
|
|
|
}
|
2005-02-03 23:29:02 +00:00
|
|
|
|
2005-03-17 01:54:40 +00:00
|
|
|
return surface;
|
2005-02-03 23:29:02 +00:00
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static void
|
|
|
|
gdk_window_set_cairo_clip (GdkDrawable *drawable,
|
|
|
|
cairo_t *cr)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject*) drawable;
|
|
|
|
|
|
|
|
if (!private->paint_stack)
|
|
|
|
{
|
2009-08-25 13:43:52 +00:00
|
|
|
cairo_reset_clip (cr);
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
cairo_save (cr);
|
|
|
|
cairo_identity_matrix (cr);
|
2008-12-17 18:45:56 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
cairo_new_path (cr);
|
2009-06-26 12:20:05 +00:00
|
|
|
gdk_cairo_region (cr, private->clip_region_with_children);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
cairo_restore (cr);
|
|
|
|
cairo_clip (cr);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
GdkWindowPaint *paint = private->paint_stack->data;
|
|
|
|
|
|
|
|
/* Only needs to clip to region if piggybacking
|
|
|
|
on an implicit paint pixmap */
|
2009-08-25 13:43:52 +00:00
|
|
|
cairo_reset_clip (cr);
|
2008-07-18 13:03:42 +00:00
|
|
|
if (paint->uses_implicit)
|
|
|
|
{
|
|
|
|
cairo_save (cr);
|
|
|
|
cairo_identity_matrix (cr);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
cairo_new_path (cr);
|
|
|
|
gdk_cairo_region (cr, paint->region);
|
|
|
|
cairo_restore (cr);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
cairo_clip (cr);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2000-03-28 01:24:44 +00:00
|
|
|
/* Code for dirty-region queueing
|
|
|
|
*/
|
|
|
|
static GSList *update_windows = NULL;
|
|
|
|
static guint update_idle = 0;
|
adapt to handle PangoColor
2001-01-26 Havoc Pennington <hp@redhat.com>
* gtk/gtktextlayout.c (convert_color): adapt to handle PangoColor
* gtk/gtktreeview.c (gtk_tree_view_widget_to_tree_coords): fix to
not offset by TREE_VIEW_HEADER_HEIGHT
(gtk_tree_view_tree_to_widget_coords): fix to not offset by
TREE_VIEW_HEADER_HEIGHT
* configure.in (included_loaders): for me, --with-included-loaders
generates the error "the specified loader yes does not exist",
i.e. the arg defaults to "yes", so change test for value ""
to test for value "yes", and include all loaders in that case.
* gtk/gtkrbtree.c (_gtk_rbtree_get_depth): new function
* gtk/gtktreeview.c (gtk_tree_view_get_cell_rect): fix to properly
handle TREE_VIEW_VERTICAL_SEPARATOR
(gtk_tree_view_bin_expose): fix to consider the row offset as
pointing halfway into vertical separator.
(gtk_tree_view_draw_node_focus_rect): ditto
* gtk/gtkdebug.h, gtk/gtkmain.c (gtk_init_check): Add
--gtk-debug=updates, which causes gdk_window_set_debug_updates
(TRUE) to be called.
* gdk/gdkwindow.c (gdk_window_set_debug_updates): Allow enabling a
debug mode where the invalid region is colored in on invalidate,
so you can see the flicker and know whether your redraw code is
doing a good job.
* gtk/gtktreeview.c (gtk_tree_view_queue_draw_node): Work in
tree window coordinates (clip rect is in tree window coords)
* gtk/Makefile.am: add gtktreednd.[hc]
* gtk/gtkliststore.c: implement gtktreednd interfaces.
* gtk/gtktreednd.c, gtk/gtktreednd.h: New interface to support
drag-and-drop data operations on a model (so we can set up tree
drag-and-drop automatically)
* gtk/testgtk.c: Add a window to change sensitivity in the
GtkLabel test; add a way to change the entry frame in GtkEntry
test
* gtk/gtkentry.c (gtk_entry_set_has_frame):
(gtk_entry_get_has_frame): new functions to remove the frame
around an entry
(gtk_entry_size_request): shrink requisition if no frame
(gtk_entry_draw_focus): don't draw frame if no frame
* gtk/gtkstyle.c (gtk_default_draw_check): draw custom look for
checks inside a cell renderer
(gtk_default_draw_option): ditto for options
* gtk/gtktreeviewcolumn.c (update_button_contents): add/remove
children from the alignment, not the button
(gtk_tree_view_column_init): ref/sink the column, to emulate
GObject refcounting.
* gtk/gtkcellrenderer.c (gtk_cell_renderer_init): ref/sink
* gtk/gtkcellrenderertoggle.c (gtk_cell_renderer_toggle_render):
Use theme functions to draw the toggles
* gdk/gdkpango.c (gdk_pango_get_gc): use GdkRGB to alloc colors
* gdk/gdkpango.h, gdk/gdkpango.c: Add GdkPangoAttrStipple and
GdkPangoAttrEmbossed to use in rendering insensitive text
* gdk/gdkpango.c (gdk_draw_layout_line): render new properties
* gtk/gtkstyle.c (gtk_default_draw_layout): handle sensitivity
using new GDK features
2001-01-26 21:12:05 +00:00
|
|
|
static gboolean debug_updates = FALSE;
|
2000-03-28 01:24:44 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static inline gboolean
|
|
|
|
gdk_window_is_ancestor (GdkWindow *window,
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkWindow *ancestor)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
while (window)
|
|
|
|
{
|
|
|
|
GdkWindow *parent = (GdkWindow*) ((GdkWindowObject*) window)->parent;
|
|
|
|
|
|
|
|
if (parent == ancestor)
|
2009-06-01 10:04:36 +00:00
|
|
|
return TRUE;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
window = parent;
|
|
|
|
}
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
gdk_window_add_update_window (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GSList *tmp;
|
|
|
|
GSList *prev = NULL;
|
|
|
|
gboolean has_ancestor_in_list = FALSE;
|
|
|
|
|
|
|
|
for (tmp = update_windows; tmp; tmp = tmp->next)
|
|
|
|
{
|
|
|
|
GdkWindowObject *parent = GDK_WINDOW_OBJECT (window)->parent;
|
|
|
|
|
|
|
|
/* check if tmp is an ancestor of "window"; if it is, set a
|
|
|
|
* flag indicating that all following windows are either
|
|
|
|
* children of "window" or from a differen hierarchy
|
|
|
|
*/
|
|
|
|
if (!has_ancestor_in_list && gdk_window_is_ancestor (window, tmp->data))
|
2009-06-01 10:04:36 +00:00
|
|
|
has_ancestor_in_list = TRUE;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
/* insert in reverse stacking order when adding around siblings,
|
|
|
|
* so processing updates properly paints over lower stacked windows
|
|
|
|
*/
|
|
|
|
if (parent == GDK_WINDOW_OBJECT (tmp->data)->parent)
|
2009-06-01 10:04:36 +00:00
|
|
|
{
|
|
|
|
gint index = g_list_index (parent->children, window);
|
|
|
|
for (; tmp && parent == GDK_WINDOW_OBJECT (tmp->data)->parent; tmp = tmp->next)
|
|
|
|
{
|
|
|
|
gint sibling_index = g_list_index (parent->children, tmp->data);
|
|
|
|
if (index > sibling_index)
|
|
|
|
break;
|
|
|
|
prev = tmp;
|
|
|
|
}
|
|
|
|
/* here, tmp got advanced past all lower stacked siblings */
|
|
|
|
tmp = g_slist_prepend (tmp, window);
|
|
|
|
if (prev)
|
|
|
|
prev->next = tmp;
|
|
|
|
else
|
|
|
|
update_windows = tmp;
|
|
|
|
return;
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
/* if "window" has an ancestor in the list and tmp is one of
|
|
|
|
* "window's" children, insert "window" before tmp
|
|
|
|
*/
|
|
|
|
if (has_ancestor_in_list && gdk_window_is_ancestor (tmp->data, window))
|
2009-06-01 10:04:36 +00:00
|
|
|
{
|
|
|
|
tmp = g_slist_prepend (tmp, window);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-06-01 10:04:36 +00:00
|
|
|
if (prev)
|
|
|
|
prev->next = tmp;
|
|
|
|
else
|
|
|
|
update_windows = tmp;
|
|
|
|
return;
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
/* if we're at the end of the list and had an ancestor it it,
|
|
|
|
* append to the list
|
|
|
|
*/
|
|
|
|
if (! tmp->next && has_ancestor_in_list)
|
2009-06-01 10:04:36 +00:00
|
|
|
{
|
|
|
|
tmp = g_slist_append (tmp, window);
|
|
|
|
return;
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
prev = tmp;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* if all above checks failed ("window" is from a different
|
|
|
|
* hierarchy than what is already in the list) or the list is
|
|
|
|
* empty, prepend
|
|
|
|
*/
|
|
|
|
update_windows = g_slist_prepend (update_windows, window);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
gdk_window_remove_update_window (GdkWindow *window)
|
|
|
|
{
|
|
|
|
update_windows = g_slist_remove (update_windows, window);
|
|
|
|
}
|
|
|
|
|
2004-08-26 14:09:08 +00:00
|
|
|
static gboolean
|
|
|
|
gdk_window_update_idle (gpointer data)
|
|
|
|
{
|
|
|
|
gdk_window_process_all_updates ();
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2004-08-26 14:09:08 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2007-09-12 17:13:24 +00:00
|
|
|
static gboolean
|
|
|
|
gdk_window_is_toplevel_frozen (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *toplevel;
|
|
|
|
|
|
|
|
toplevel = (GdkWindowObject *)gdk_window_get_toplevel (window);
|
|
|
|
|
|
|
|
return toplevel->update_and_descendants_freeze_count > 0;
|
|
|
|
}
|
|
|
|
|
2004-08-26 14:09:08 +00:00
|
|
|
static void
|
|
|
|
gdk_window_schedule_update (GdkWindow *window)
|
|
|
|
{
|
2007-09-12 17:13:24 +00:00
|
|
|
if (window &&
|
|
|
|
(GDK_WINDOW_OBJECT (window)->update_freeze_count ||
|
|
|
|
gdk_window_is_toplevel_frozen (window)))
|
2004-08-26 14:09:08 +00:00
|
|
|
return;
|
|
|
|
|
|
|
|
if (!update_idle)
|
2009-09-10 11:53:29 +00:00
|
|
|
update_idle =
|
|
|
|
gdk_threads_add_idle_full (GDK_PRIORITY_REDRAW,
|
|
|
|
gdk_window_update_idle,
|
|
|
|
NULL, NULL);
|
2004-08-26 14:09:08 +00:00
|
|
|
}
|
|
|
|
|
2009-01-26 18:12:54 +00:00
|
|
|
void
|
|
|
|
_gdk_window_process_updates_recurse (GdkWindow *window,
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkRegion *expose_region)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
|
|
|
GdkWindowObject *child;
|
|
|
|
GdkRegion *child_region;
|
|
|
|
GdkRectangle r;
|
2009-08-13 15:00:00 +00:00
|
|
|
GList *l, *children;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
if (gdk_region_empty (expose_region))
|
|
|
|
return;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-08-13 15:00:00 +00:00
|
|
|
/* Make this reentrancy safe for expose handlers freeing windows */
|
|
|
|
children = g_list_copy (private->children);
|
2009-08-14 09:20:12 +00:00
|
|
|
g_list_foreach (children, (GFunc)g_object_ref, NULL);
|
2009-08-13 15:00:00 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* Iterate over children, starting at topmost */
|
2009-08-13 15:00:00 +00:00
|
|
|
for (l = children; l != NULL; l = l->next)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
child = l->data;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-08-13 15:00:00 +00:00
|
|
|
if (child->destroyed || !GDK_WINDOW_IS_MAPPED (child) || child->input_only || child->composited)
|
2008-07-18 13:03:42 +00:00
|
|
|
continue;
|
|
|
|
|
|
|
|
/* Ignore offscreen children, as they don't draw in their parent and
|
|
|
|
* don't take part in the clipping */
|
|
|
|
if (gdk_window_is_offscreen (child))
|
|
|
|
continue;
|
|
|
|
|
|
|
|
r.x = child->x;
|
|
|
|
r.y = child->y;
|
|
|
|
r.width = child->width;
|
|
|
|
r.height = child->height;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
child_region = gdk_region_rectangle (&r);
|
2008-12-17 18:45:56 +00:00
|
|
|
if (child->shape)
|
2009-07-07 14:51:11 +00:00
|
|
|
{
|
|
|
|
/* Adjust shape region to parent window coords */
|
|
|
|
gdk_region_offset (child->shape, child->x, child->y);
|
|
|
|
gdk_region_intersect (child_region, child->shape);
|
|
|
|
gdk_region_offset (child->shape, -child->x, -child->y);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
|
|
if (child->impl == private->impl)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
/* Client side child, expose */
|
|
|
|
gdk_region_intersect (child_region, expose_region);
|
|
|
|
gdk_region_subtract (expose_region, child_region);
|
|
|
|
gdk_region_offset (child_region, -child->x, -child->y);
|
2009-01-26 18:12:54 +00:00
|
|
|
_gdk_window_process_updates_recurse ((GdkWindow *)child, child_region);
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
else
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
/* Native child, just remove area from expose region */
|
|
|
|
gdk_region_subtract (expose_region, child_region);
|
|
|
|
}
|
|
|
|
gdk_region_destroy (child_region);
|
|
|
|
}
|
|
|
|
|
2009-08-14 09:20:12 +00:00
|
|
|
g_list_foreach (children, (GFunc)g_object_unref, NULL);
|
2009-08-13 15:00:00 +00:00
|
|
|
g_list_free (children);
|
|
|
|
|
2009-08-20 15:09:08 +00:00
|
|
|
if (!gdk_region_empty (expose_region) &&
|
|
|
|
!private->destroyed)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
2009-02-05 14:38:51 +00:00
|
|
|
if (private->event_mask & GDK_EXPOSURE_MASK)
|
|
|
|
{
|
|
|
|
GdkEvent event;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-05 14:38:51 +00:00
|
|
|
event.expose.type = GDK_EXPOSE;
|
|
|
|
event.expose.window = g_object_ref (window);
|
|
|
|
event.expose.send_event = FALSE;
|
|
|
|
event.expose.count = 0;
|
|
|
|
event.expose.region = expose_region;
|
|
|
|
gdk_region_get_clipbox (expose_region, &event.expose.area);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-05 14:38:51 +00:00
|
|
|
(*_gdk_event_func) (&event, _gdk_event_data);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-05 14:38:51 +00:00
|
|
|
g_object_unref (window);
|
|
|
|
}
|
2009-09-24 14:42:52 +00:00
|
|
|
else if (private->bg_pixmap != GDK_NO_BG &&
|
|
|
|
private->window_type != GDK_WINDOW_FOREIGN)
|
2009-02-05 14:38:51 +00:00
|
|
|
{
|
|
|
|
/* No exposure mask set, so nothing will be drawn, the
|
|
|
|
* app relies on the background being what it specified
|
|
|
|
* for the window. So, we need to clear this manually.
|
|
|
|
*
|
2009-09-24 14:42:52 +00:00
|
|
|
* For foreign windows if expose is not set that generally
|
|
|
|
* means some other client paints them, so don't clear
|
|
|
|
* there.
|
|
|
|
*
|
2009-02-05 14:38:51 +00:00
|
|
|
* We use begin/end_paint around the clear so that we can
|
|
|
|
* piggyback on the implicit paint */
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-05 14:38:51 +00:00
|
|
|
gdk_window_begin_paint_region (window, expose_region);
|
|
|
|
gdk_window_clear_region_internal (window, expose_region, FALSE);
|
|
|
|
gdk_window_end_paint (window);
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-08-14 10:09:02 +00:00
|
|
|
/* Process and remove any invalid area on the native window by creating
|
|
|
|
* expose events for the window and all non-native descendants.
|
|
|
|
* Also processes any outstanding moves on the window before doing
|
|
|
|
* any drawing. Note that its possible to have outstanding moves without
|
|
|
|
* any invalid area as we use the update idle mechanism to coalesce
|
|
|
|
* multiple moves as well as multiple invalidations.
|
|
|
|
*/
|
2000-03-28 01:24:44 +00:00
|
|
|
static void
|
|
|
|
gdk_window_process_updates_internal (GdkWindow *window)
|
|
|
|
{
|
2000-07-31 20:48:38 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2000-03-28 01:24:44 +00:00
|
|
|
gboolean save_region = FALSE;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkRectangle clip_box;
|
2000-03-28 01:24:44 +00:00
|
|
|
|
2009-08-20 15:09:08 +00:00
|
|
|
/* Ensure the window lives while updating it */
|
|
|
|
g_object_ref (window);
|
|
|
|
|
2000-05-05 15:57:48 +00:00
|
|
|
/* If an update got queued during update processing, we can get a
|
|
|
|
* window in the update queue that has an empty update_area.
|
|
|
|
* just ignore it.
|
|
|
|
*/
|
|
|
|
if (private->update_area)
|
|
|
|
{
|
|
|
|
GdkRegion *update_area = private->update_area;
|
|
|
|
private->update_area = NULL;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-09-24 14:42:52 +00:00
|
|
|
if (_gdk_event_func && gdk_window_is_viewable (window))
|
2000-05-05 15:57:48 +00:00
|
|
|
{
|
2001-03-09 13:28:26 +00:00
|
|
|
GdkRegion *expose_region;
|
2008-07-18 13:03:42 +00:00
|
|
|
gboolean end_implicit;
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
|
2009-01-22 14:18:03 +00:00
|
|
|
/* Clip to part visible in toplevel */
|
|
|
|
gdk_region_intersect (update_area, private->clip_region);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
|
|
if (debug_updates)
|
|
|
|
{
|
|
|
|
/* Make sure we see the red invalid area before redrawing. */
|
|
|
|
gdk_display_sync (gdk_drawable_get_display (window));
|
|
|
|
g_usleep (70000);
|
|
|
|
}
|
2001-03-09 13:28:26 +00:00
|
|
|
|
2009-08-14 10:09:02 +00:00
|
|
|
/* At this point we will be completely redrawing all of update_area.
|
|
|
|
* If we have any outstanding moves that end up moving stuff inside
|
|
|
|
* this area we don't actually need to move that as that part would
|
|
|
|
* be overdrawn by the expose anyway. So, in order to copy less data
|
|
|
|
* we remove these areas from the outstanding moves.
|
|
|
|
*/
|
2009-02-09 08:28:30 +00:00
|
|
|
if (private->outstanding_moves)
|
|
|
|
{
|
|
|
|
GdkWindowRegionMove *move;
|
|
|
|
GdkRegion *remove;
|
|
|
|
GList *l, *prev;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-09 08:28:30 +00:00
|
|
|
remove = gdk_region_copy (update_area);
|
2009-08-14 10:09:02 +00:00
|
|
|
/* We iterate backwards, starting from the state that would be
|
|
|
|
if we had applied all the moves. */
|
2009-02-09 08:28:30 +00:00
|
|
|
for (l = g_list_last (private->outstanding_moves); l != NULL; l = prev)
|
|
|
|
{
|
|
|
|
prev = l->prev;
|
|
|
|
move = l->data;
|
2009-08-14 10:09:02 +00:00
|
|
|
|
2009-02-09 08:28:30 +00:00
|
|
|
/* Don't need this area */
|
|
|
|
gdk_region_subtract (move->dest_region, remove);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-09 08:28:30 +00:00
|
|
|
/* However if any of the destination we do need has a source
|
|
|
|
in the updated region we do need that as a destination for
|
|
|
|
the earlier moves */
|
|
|
|
gdk_region_offset (move->dest_region, -move->dx, -move->dy);
|
|
|
|
gdk_region_subtract (remove, move->dest_region);
|
|
|
|
|
|
|
|
if (gdk_region_empty (move->dest_region))
|
|
|
|
{
|
|
|
|
gdk_window_region_move_free (move);
|
|
|
|
private->outstanding_moves =
|
|
|
|
g_list_delete_link (private->outstanding_moves, l);
|
|
|
|
}
|
2009-08-14 10:09:02 +00:00
|
|
|
else /* move back */
|
2009-02-09 08:28:30 +00:00
|
|
|
gdk_region_offset (move->dest_region, move->dx, move->dy);
|
|
|
|
}
|
|
|
|
gdk_region_destroy (remove);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-08-14 10:09:02 +00:00
|
|
|
/* By now we a set of window moves that should be applied, and then
|
|
|
|
* an update region that should be repainted. A trivial implementation
|
|
|
|
* would just do that in order, however in order to get nicer drawing
|
|
|
|
* we do some tricks:
|
|
|
|
*
|
|
|
|
* First of all, each subwindow expose may be double buffered by
|
|
|
|
* itself (depending on widget setting) via
|
|
|
|
* gdk_window_begin/end_paint(). But we also do an "implicit" paint,
|
|
|
|
* creating a single pixmap the size of the invalid area on the
|
|
|
|
* native window which all the individual normal paints will draw
|
|
|
|
* into. This way in the normal case there will be only one pixmap
|
|
|
|
* allocated and only once pixmap draw done for all the windows
|
|
|
|
* in this native window.
|
|
|
|
* There are a couple of reasons this may fail, for instance, some
|
|
|
|
* backends (like quartz) do its own double buffering, so we disable
|
|
|
|
* gdk double buffering there. Secondly, some subwindow could be
|
|
|
|
* non-double buffered and draw directly to the window outside a
|
|
|
|
* begin/end_paint pair. That will be lead to a gdk_window_flush
|
|
|
|
* which immediately executes all outstanding moves and paints+removes
|
|
|
|
* the implicit paint (further paints will allocate their own pixmap).
|
|
|
|
*
|
|
|
|
* Secondly, in the case of implicit double buffering we expose all
|
|
|
|
* the child windows into the implicit pixmap before we execute
|
|
|
|
* the outstanding moves. This way we minimize the time between
|
|
|
|
* doing the moves and rendering the new update area, thus minimizing
|
|
|
|
* flashing. Of course, if any subwindow is non-double buffered we
|
|
|
|
* well flush earlier than that.
|
|
|
|
*
|
|
|
|
* Thirdly, after having done the outstanding moves we queue an
|
|
|
|
* "antiexpose" on the area that will be drawn by the expose, which
|
|
|
|
* means that any invalid region on the native window side before
|
|
|
|
* the first expose drawing operation will be discarded, as it
|
|
|
|
* has by then been overdrawn with valid data. This means we can
|
|
|
|
* avoid doing the unnecessary repaint any outstanding expose events.
|
|
|
|
*/
|
|
|
|
|
|
|
|
gdk_region_get_clipbox (update_area, &clip_box);
|
2008-07-18 13:03:42 +00:00
|
|
|
end_implicit = gdk_window_begin_implicit_paint (window, &clip_box);
|
2009-08-14 10:09:02 +00:00
|
|
|
expose_region = gdk_region_copy (update_area);
|
|
|
|
if (!end_implicit)
|
|
|
|
{
|
|
|
|
/* Rendering is not double buffered by gdk, do outstanding
|
|
|
|
* moves and queue antiexposure immediately. No need to do
|
|
|
|
* any tricks */
|
2009-02-05 09:47:11 +00:00
|
|
|
gdk_window_flush_outstanding_moves (window);
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
save_region = impl_iface->queue_antiexpose (window, update_area);
|
2009-08-14 10:09:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Render the invalid areas to the implicit paint, by sending exposes.
|
|
|
|
* May flush if non-double buffered widget draw. */
|
2009-01-26 18:12:54 +00:00
|
|
|
_gdk_windowing_window_process_updates_recurse (window, expose_region);
|
2009-08-14 10:09:02 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (end_implicit)
|
2009-02-05 09:47:11 +00:00
|
|
|
{
|
2009-08-14 10:09:02 +00:00
|
|
|
/* Do moves right before exposes are rendered to the window */
|
2009-02-05 09:47:11 +00:00
|
|
|
gdk_window_flush_outstanding_moves (window);
|
2009-08-14 10:09:02 +00:00
|
|
|
|
|
|
|
/* By this time we know that any outstanding expose for this
|
|
|
|
* area is invalid and we can avoid it, so queue an antiexpose.
|
|
|
|
* However, it may be that due to an non-double buffered expose
|
|
|
|
* we have already started drawing to the window, so it would
|
|
|
|
* be to late to anti-expose now. Since this is merely an
|
|
|
|
* optimization we just avoid doing it at all in that case.
|
|
|
|
*/
|
2009-09-04 11:14:25 +00:00
|
|
|
if (private->implicit_paint != NULL &&
|
|
|
|
!private->implicit_paint->flushed)
|
2009-08-31 08:44:11 +00:00
|
|
|
{
|
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
save_region = impl_iface->queue_antiexpose (window, update_area);
|
|
|
|
}
|
2009-08-14 10:09:02 +00:00
|
|
|
|
2009-02-05 09:47:11 +00:00
|
|
|
gdk_window_end_implicit_paint (window);
|
|
|
|
}
|
2009-08-14 10:09:02 +00:00
|
|
|
gdk_region_destroy (expose_region);
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
2000-05-05 15:57:48 +00:00
|
|
|
if (!save_region)
|
|
|
|
gdk_region_destroy (update_area);
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-18 13:29:28 +00:00
|
|
|
if (private->outstanding_moves)
|
|
|
|
{
|
|
|
|
/* Flush any outstanding moves, may happen if we moved a window but got
|
|
|
|
no actual invalid area */
|
2009-01-22 19:51:41 +00:00
|
|
|
gdk_window_flush_outstanding_moves (window);
|
2008-12-18 13:29:28 +00:00
|
|
|
}
|
2009-08-20 15:09:08 +00:00
|
|
|
|
|
|
|
g_object_unref (window);
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
2003-07-05 01:54:05 +00:00
|
|
|
static void
|
|
|
|
flush_all_displays (void)
|
|
|
|
{
|
|
|
|
GSList *displays = gdk_display_manager_list_displays (gdk_display_manager_get ());
|
|
|
|
GSList *tmp_list;
|
|
|
|
|
|
|
|
for (tmp_list = displays; tmp_list; tmp_list = tmp_list->next)
|
|
|
|
gdk_display_flush (tmp_list->data);
|
|
|
|
|
|
|
|
g_slist_free (displays);
|
|
|
|
}
|
|
|
|
|
2006-04-10 19:43:08 +00:00
|
|
|
/* Currently it is not possible to override
|
|
|
|
* gdk_window_process_all_updates in the same manner as
|
|
|
|
* gdk_window_process_updates and gdk_window_invalidate_maybe_recurse
|
|
|
|
* by implementing the GdkPaintable interface. If in the future a
|
|
|
|
* backend would need this, the right solution would be to add a
|
|
|
|
* method to GdkDisplay that can be optionally
|
|
|
|
* NULL. gdk_window_process_all_updates can then walk the list of open
|
|
|
|
* displays and call the mehod.
|
|
|
|
*/
|
|
|
|
|
2001-02-20 05:21:44 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_process_all_updates:
|
|
|
|
*
|
|
|
|
* Calls gdk_window_process_updates() for all windows (see #GdkWindow)
|
|
|
|
* in the application.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-02-20 05:21:44 +00:00
|
|
|
**/
|
2000-03-28 01:24:44 +00:00
|
|
|
void
|
|
|
|
gdk_window_process_all_updates (void)
|
|
|
|
{
|
|
|
|
GSList *old_update_windows = update_windows;
|
|
|
|
GSList *tmp_list = update_windows;
|
2009-01-26 18:29:26 +00:00
|
|
|
static gboolean in_process_all_updates = FALSE;
|
2009-09-10 11:53:29 +00:00
|
|
|
static gboolean got_recursive_update = FALSE;
|
2009-01-26 18:29:26 +00:00
|
|
|
|
|
|
|
if (in_process_all_updates)
|
2009-09-10 11:53:29 +00:00
|
|
|
{
|
|
|
|
/* We can't do this now since that would recurse, so
|
|
|
|
delay it until after the recursion is done. */
|
|
|
|
got_recursive_update = TRUE;
|
|
|
|
update_idle = 0;
|
|
|
|
return;
|
|
|
|
}
|
2009-01-26 18:29:26 +00:00
|
|
|
|
|
|
|
in_process_all_updates = TRUE;
|
2009-09-10 11:53:29 +00:00
|
|
|
got_recursive_update = FALSE;
|
2000-03-28 01:24:44 +00:00
|
|
|
|
|
|
|
if (update_idle)
|
|
|
|
g_source_remove (update_idle);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2000-03-28 01:24:44 +00:00
|
|
|
update_windows = NULL;
|
|
|
|
update_idle = 0;
|
|
|
|
|
2009-01-26 18:29:26 +00:00
|
|
|
_gdk_windowing_before_process_all_updates ();
|
|
|
|
|
2002-03-14 22:12:51 +00:00
|
|
|
g_slist_foreach (old_update_windows, (GFunc)g_object_ref, NULL);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2000-03-28 01:24:44 +00:00
|
|
|
while (tmp_list)
|
|
|
|
{
|
2004-08-26 14:09:08 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *)tmp_list->data;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2007-11-09 22:44:31 +00:00
|
|
|
if (!GDK_WINDOW_DESTROYED (tmp_list->data))
|
2009-06-01 10:04:36 +00:00
|
|
|
{
|
2007-11-09 22:44:31 +00:00
|
|
|
if (private->update_freeze_count ||
|
|
|
|
gdk_window_is_toplevel_frozen (tmp_list->data))
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_window_add_update_window ((GdkWindow *) private);
|
2007-11-09 22:44:31 +00:00
|
|
|
else
|
|
|
|
gdk_window_process_updates_internal (tmp_list->data);
|
|
|
|
}
|
|
|
|
|
2002-03-14 22:12:51 +00:00
|
|
|
g_object_unref (tmp_list->data);
|
2000-03-28 01:24:44 +00:00
|
|
|
tmp_list = tmp_list->next;
|
|
|
|
}
|
|
|
|
|
|
|
|
g_slist_free (old_update_windows);
|
|
|
|
|
2003-07-05 01:54:05 +00:00
|
|
|
flush_all_displays ();
|
2009-01-26 18:29:26 +00:00
|
|
|
|
|
|
|
_gdk_windowing_after_process_all_updates ();
|
|
|
|
|
|
|
|
in_process_all_updates = FALSE;
|
2009-09-10 11:53:29 +00:00
|
|
|
|
|
|
|
/* If we ignored a recursive call, schedule a
|
|
|
|
redraw now so that it eventually happens,
|
|
|
|
otherwise we could miss an update if nothing
|
|
|
|
else schedules an update. */
|
|
|
|
if (got_recursive_update && !update_idle)
|
|
|
|
update_idle =
|
|
|
|
gdk_threads_add_idle_full (GDK_PRIORITY_REDRAW,
|
|
|
|
gdk_window_update_idle,
|
|
|
|
NULL, NULL);
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
2001-02-20 05:21:44 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_process_updates:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @update_children: whether to also process updates for child windows
|
|
|
|
*
|
2009-06-01 10:04:36 +00:00
|
|
|
* Sends one or more expose events to @window. The areas in each
|
2001-02-20 05:21:44 +00:00
|
|
|
* expose event will cover the entire update area for the window (see
|
|
|
|
* gdk_window_invalidate_region() for details). Normally GDK calls
|
|
|
|
* gdk_window_process_all_updates() on your behalf, so there's no
|
|
|
|
* need to call this function unless you want to force expose events
|
|
|
|
* to be delivered immediately and synchronously (vs. the usual
|
|
|
|
* case, where GDK delivers them in an idle handler). Occasionally
|
|
|
|
* this is useful to produce nicer scrolling behavior, for example.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-02-20 05:21:44 +00:00
|
|
|
**/
|
2000-03-28 01:24:44 +00:00
|
|
|
void
|
|
|
|
gdk_window_process_updates (GdkWindow *window,
|
|
|
|
gboolean update_children)
|
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkWindowObject *impl_window;
|
2000-03-28 01:24:44 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
2008-10-21 21:42:39 +00:00
|
|
|
|
2009-08-20 15:09:08 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
return;
|
|
|
|
|
|
|
|
/* Make sure the window lives during the expose callouts */
|
|
|
|
g_object_ref (window);
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
impl_window = gdk_window_get_impl_window (private);
|
2008-12-18 13:29:28 +00:00
|
|
|
if ((impl_window->update_area ||
|
|
|
|
impl_window->outstanding_moves) &&
|
2008-07-18 13:03:42 +00:00
|
|
|
!impl_window->update_freeze_count &&
|
2009-09-14 11:24:55 +00:00
|
|
|
!gdk_window_is_toplevel_frozen (window) &&
|
|
|
|
|
|
|
|
/* Don't recurse into process_updates_internal, we'll
|
|
|
|
* do the update later when idle instead. */
|
|
|
|
impl_window->implicit_paint == NULL)
|
2009-06-01 10:04:36 +00:00
|
|
|
{
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_window_process_updates_internal ((GdkWindow *)impl_window);
|
|
|
|
gdk_window_remove_update_window ((GdkWindow *)impl_window);
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (update_children)
|
|
|
|
{
|
2008-07-18 13:03:42 +00:00
|
|
|
/* process updates in reverse stacking order so composition or
|
|
|
|
* painting over achieves the desired effect for offscreen windows
|
|
|
|
*/
|
2009-08-20 15:09:08 +00:00
|
|
|
GList *node, *children;
|
|
|
|
|
|
|
|
children = g_list_copy (private->children);
|
|
|
|
g_list_foreach (children, (GFunc)g_object_ref, NULL);
|
|
|
|
|
|
|
|
for (node = g_list_last (children); node; node = node->prev)
|
|
|
|
{
|
|
|
|
gdk_window_process_updates (node->data, TRUE);
|
|
|
|
g_object_unref (node->data);
|
|
|
|
}
|
|
|
|
|
|
|
|
g_list_free (children);
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
2009-08-20 15:09:08 +00:00
|
|
|
|
|
|
|
g_object_unref (window);
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
2009-11-04 13:03:04 +00:00
|
|
|
static void
|
|
|
|
gdk_window_invalidate_rect_full (GdkWindow *window,
|
|
|
|
const GdkRectangle *rect,
|
|
|
|
gboolean invalidate_children,
|
|
|
|
ClearBg clear_bg)
|
2000-03-28 01:24:44 +00:00
|
|
|
{
|
Remove all references to offscreen flag which was no longer used.
Thu Jun 1 23:05:13 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c: Remove all references to
offscreen flag which was no longer used.
* gtk/gtkprivate.h (enum): Remove unused flags and compress.
* gtk/gtkframe.c (gtk_frame_set_label_widget): Check
for non-null label_widget->parent.
* gtk/gtkentry.c: Get rid of code to deal with PangoAttribute
which no longer was used.
* gdk/gdkpango.c (gdk_pango_context_get_info): make static.
* gdk/gdkpango.c (gdk_draw_layout[_line]): Add checks
for null arguments.
* gdk/x11/gdkgeometry-x11.c (gdk_window_scroll): add
check for destroyed windows.
Thu Jun 1 13:48:45 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimmulticontext.c: Add a finalize method and unref
the slave context there.
* gtk/gtkinvisible.[ch]: Make reference counting behavior
identical to GtkWindow.
Thu Jun 1 01:54:11 2000 Owen Taylor <otaylor@redhat.com>
* Makefile.am gdk/gdkpango.c: Copy the layout render function from
pangox to here, so we can write them independent of rendering
system, using GDK primitives.
* gdk/gdkdrawable.h gdk/gdkdraw.c gdk/gdkwindow.c
gdk/x11/gdkdrawable-x11.c: Remove draw_layout() from the vtable,
since we have a rendering-system independent implementation in
terms of draw_glyphs().
* gdk/gdkpango.c gdkdrawable.h (gdk_draw_layout_line): New
function to render a single line.
* gdk/x11/gdkpango.c: Move the guts of this file mostly
into ../gdkpango.c, which simplifies things, since we
don't have to deal with raw X gc's.
Fri May 19 04:28:16 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.[ch]: Add get_log_attrs() function to
get the logical attributes for a given GtkTextLine.
Tue May 30 16:05:39 2000 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkfont-x11.c (gdk_font_charset_for_locale): Track
g_locale_get_codeset() to g_get_codeset() change.
Tue May 30 15:03:19 2000 Owen Taylor <otaylor@redhat.com>
* gtk/testcalendar.c (calendar_font_selection_ok): Use font
descriptions.
* gtk/gtkentry.c (gtk_entry_draw_text): Center text within
the entry.
* gtk/gtkfontsel.c (gtk_font_selection_dialog_init): Start of
redoing (vastly simplifying) for Pango. Still needs quite
a bit of work. (Size selection is currently poor. List of
predefined sizes is not a good idea, since all of these
sizes won't necessarily be distinct.)
Tue May 30 13:50:19 2000 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkfont-x11.c (gdk_font_charset_for_locale): Handle
CODESET results for LANG=C.
Mon May 29 15:49:10 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkrc.[ch]: Add a 'font_name' declaration to RC
which takes a stringized pango font description;
ignore the older 'font' and 'fontset' declarations.
* gtk/gtkstyle.c gtk/gtkrc.c: Fill in the style->font
field with a GdkFont derived via gdk_font_from_description(),
for compatibility. (Should we just remove it entirely?
Probably too much compatibility breakage, but people
should be migrating to the new Pango stuff as quickly
as possible.)
Mon May 29 15:47:41 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.c gtk/gtkclist.c: s/pango_font_unref/g_object_unref/.
Mon May 29 15:44:46 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkcalender.c: Roughly pango-ized. Really needs
redoing; there are some bugs in size allocation right
now, the semi-existant distinction between header / day
fonts was removed, but, with Pango, could actually
be made functional in a nice way.
* gtk/testcalender: Move calender from examples into this
directory as a test program. (We really need to restrcture
testgtk into a whole directory full of tests for every
widget or functionality group, separated into multiple .c
files.)
Mon May 29 15:19:56 2000 Owen Taylor <otaylor@redhat.com>
* gtk/testgtk.c (file_exists): Fix stupid typo that
was keeping RC file from being loaded.
* gtk/testgtkrc gtk/testgtkrc2: Test new pango-ized
RC file font code.
Mon May 29 14:31:27 2000 Owen Taylor <otaylor@redhat.com>
* gdk/gdkfont.h gdk/x11/gdkfont-x11.c (gdk_font_from_description):
Add function to load a GdkFont from a PangoFontDescription.
Fri May 26 17:16:40 2000 Owen Taylor <otaylor@redhat.com>
* gtk/frame.[ch] gtkaspectframe.c: Make frame widgets able
to have any widget for the label, use a GtkLabel widget
to display the text. (Based partially on a patch from
Anders Carlson.)
(Quite a bit of code reorganization - strip 90% of the
guts out of gtkaspectframe and add a single virtual
func to GtkFrameClass - compute_child_allocation.)
Fri May 26 12:00:02 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkctree.c gtk/gtkclist.[ch]: Pangoized.
(Removed clist->row_center_offset field because caching
it wasn't saving time or code, added private function
_gtk_clist_create_cell_layout()).
Wed May 24 15:59:37 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkaccellabel.c: Pangoized.
* gtk/[hv]ruler.c: Pangoized
Mon May 22 19:23:59 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkfilesel.c (gtk_file_selection_init):
Use gtk_clist_set_column_auto_resize() to remove need
need for manual column width computations.
Mon May 22 18:50:26 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktooltips.[ch]: Replace custom drawing with a GtkLabel,
ensuring Pango correctness, and considerably simplifying the
code.
* gtk/gtklabel.c gtk[hv]scale.c: 1000 => PANGO_SCALE.
* gtk/gtklabel.c (gtk_label_size_request): Fixed incorrect
getting of numbers of lines.
* gtk/gtklabel.c (gtk_label_size_request): Set the requisition
to the actual requested width of the lable, not to the wrap
width we set.
* gtk/gtktextchild.h: Remove extraneous include of gtk/gtk.h.
* gtk/gtktextbtree.c gtk/gtktextbuffer.c gtk/gtktextlayout.c
gtk/gtktextview.c gtk/gtktextview.[ch]: Fix up includes.
* gtk/gtktextview.c: Fix structure inheritance.
* gtk/gtkprogressbar.c: Pangoize.
Mon May 22 15:47:30 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextview.c (gtk_text_view_get_first_para_iter): Encapsulate
in a function.
* gtk/gtktextlayout.c (find_display_line_above): Fixed
bug with computing line tops.
* gtk/gtktextview.c (changed_handler): Fix < , <= confusion.
Thu May 18 18:53:31 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextdisplay.c (gtk_text_layout_draw): Fix up the x_offset
and y_offset coordinates to do what we need now. (The offset between
buffer and layout coordinates has been reintroduced, but is a
bit different than before.)
* gtk/gtktextview.[ch]: No longer inherit from GtkLayout; instead
handle the adjustments ourselves, and scroll as necessary using
the new gdk_window_scroll().
The advantage of this is that when we are incrementally revalidating,
we are essentially rearranging things around the visible portion
of the screen. With the old setup, the visible portion of the
screen was moved around in the layout, so scrolling and redrawing
to track that caused jumping of the display. Since we now
control the scrolling ourselves, we can suppress this and
only redraw when things actually change.
Thu May 18 18:47:25 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextbtree.c (redisplay_mark): We need to invalidate
the region not just redisplay it after-all, since we store the
cursors in the LineDisplay. (Ugly interactions here between
GtkLayout and GtkTextBTree here.)
* gtk/gtktextbtree.c (redisplay_region): Fixed reversed comparison.
Thu May 18 18:43:21 2000 Owen Taylor <otaylor@redhat.com>
* gdk/gdkwindow.h gdk/x11/gdkgeometry-x11.c (gdk_window_scroll):
Added function to scroll contents of a window while keeping the
window constant. Works by XCopyArea or guffaw-scrolling depending
on the details of how the window is set up. (guffaw-scrolling
still needs to be filled in.)
Wed May 17 22:36:53 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextiter.c gtk/gtkmain.c: Add a debug key for the text widget,
move the debugging that was tied to a global variable
to that.
* gtk/gtkmarshal.list: Add NONE:INT,INT,INT
* gtk/gtktextbtree.[ch] gtk/gtktextlayout.c: Keep a separate
validated flag, in line data instead of setting height/width to
-1. This allows us to perform operations with partially invalid
buffer (using the old size for invalid lines) and thus to do
incremental vaidation. Keep height/width aggregates up to date
when deleting text and rebalancing the tree.
* gtk/gtktextbtree.[ch]: Add functions validate a line
(gtk_text_btree_validate_line), and to validate up
to a number of pixels (gtk_text_btree_validate).
* gtk/gtktextlayout.[ch]: Add an ::invalidated signal
that indicates that something is changed and a revalidation
pass is needed. Change ::need_repaint to ::changed, and
make it take old and new yranges instead of a rectangle.
* gtk/gtktextbtree.[ch] gtk/gtktextlayout.[ch]: Move
the line_data_destroy() function from
gtk_text_btree_add_view() to a virtual function in
GtkTextLayout
* gtk/gtktextbtree.[ch]: Remove gtk_text_btree_get_damage_range(),
since we are handling partial repaints in a different fashion
now.
* gtk/gtktextbtree.[ch]: Only repaint the changed portion
of the selection instead of queueing a repaint on the
entire widget.
* gtk/gtktextbuffer.[ch] gtk/gtktextbtree.[ch]: Move
get_selection_bounds() down to btree, make the function
in buffer a wrapper around the btree function.
* gtk/gtktextlayout.[ch]: Add functions to check if the
layout is valid and to recompute either a range of pixels
aroudn a line or a certain total number of pixels.
* gtk/gtktextlayout.[ch]: Cache a single line display;
now that we only redraw the needed portions, the hit rate
for this cache is quite high.
* gtk/gtktextview.[ch]: Keep track of the first paragraph
on the screen so that when re-laying-out the buffer, we can
keep the same place. This requires connecting to ::value_changed
on the adjustments
* gtk/gtktextview.[ch]: Add idle functions to revalidate
the buffer after we receive an ::invalidated signal.
Wed May 17 22:10:47 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_size_allocate): Set upper
to max of allocation and layout size, not just to the
layout size.
* gtk/gtk[hv]scrollbar.c (gtk_[hv]scrollbar_calc_slider_size):
Invalidate window so it gets redrawn properly.
* gdk/gdkwindow.c (gdk_window_invalidate_rect): Allow rect == NULL
to mean the entire window.
* gdk/gdkevents.h: Move definition for GDK_PRIORITY_REDRAW
into public header.
Mon May 15 14:51:31 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextmark.c (gtk_text_mark_get_name): Add function
to get the name of a mark.
* gtk/gtktextlayout.c (gtk_text_layout_get_line_at_y): Add a function
to find the paragraph from a y position.
Thu May 11 12:57:20 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextbtree.c (gtk_text_btree_node_invalidate_upward): Valid
nodes have width/height >= 0, not > 0.
Tue May 9 21:29:06 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.[ch] gtk/gtktextdisplay.c (gtk_text_layout_get_line_display):
Add a size_only flag, so when we only need the size, we don't create
useless appearance attributes.
* gtk/gtktextview.c (gtk_text_view_ensure_layout): Remove
duplicate setting of font description.
* gtk/gtkscale.c: Use PANGO_SCALE instead of 1000
Wed Apr 26 01:53:23 2000 Owen Taylor <otaylor@redhat.com>
* gtk/Makefile.am (EXTRA_DIST): Add OLD_STAMP into
EXTRA_DIST. It does not work well when the file that
everything depends on is not in the tarball.
Wed Apr 26 00:56:14 2000 Owen Taylor <otaylor@redhat.com>
* gtk/testgtk.c: Some hacks and fixes so that it basically
works when not sitting in the GTK+ build tree.
2000-05-03 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbtree.c (gtk_text_line_next_could_contain_tag):
Properly determine the ordering of the tag root and the current
line within the tree. Previous algorithm only worked if the tag
root's immediate parent was the common root of both the current
line and the tag root.
Wed Apr 26 00:43:00 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.c (set_para_values): Fix some bugs in
alignment.
* gtk/gtktextview.c (gtk_text_view_ensure_layout): Track
the widget text directional dynamically.
* gtk/gtktextview.[ch]: Added functions to get and set default
wrap mode.
Tue Apr 25 23:47:38 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.c (gtk_text_layout_get_iter_location): Fix bug
in cursor location computation.
Tue Apr 25 23:22:59 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_set_size): Clamp hadjustment/
vadjusment values properly when layout gets smaller.
* gtk/gtktextview.c (need_repaint_handler): Areas being
passed in are far completely inaccurate, and sometimes
too small, so, for now, just queue a redraw on the
whole visible region.
2000-04-25 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbtree.c (summary_destroy): new function to
destroy tag summary nodes
(gtk_text_line_next_could_contain_tag): this function was
totally broken if the line passed in wasn't below the tag
root. Fix it.
(gtk_text_btree_first_could_contain_tag): In the tag == NULL
"wildcard" case, we have to do a linear scan. Blah.
(gtk_text_btree_last_could_contain_tag): In tag == NULL case,
we have to do the linear scan
(tag_removed_cb): When a tag is removed from the tag table,
remove the GtkTextTagInfo node from the btree.
(gtk_text_btree_spew): Implement the spew function, for
our debugging pleasure.
Tue Apr 25 19:40:18 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.c (gtk_text_layout_set_buffer): Fix
a problem with referring to the wrong buffer.
* gtk/gtkentry.c: Fix focus-in/focus-out confusion.
* gtk/gtkrc.c gtk/gtkstyle.c: Moving setting default
font description to gtk_style_new() - otherwise things
don't work without a .gtkrc file.
* gtk/gtktextbuffer.c (gtk_text_buffer_new): Sink the
tags table if we create it ourself, too.
* gdk/gdktypes.h (enum): Move GDK_RELEASE_MASK, since
it was conflicting with XKB modifiers.
* gtk/gtktextview.[ch]: Add simple support for
GtkIMContext.
Mon Apr 24 19:34:18 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.c (gtk_entry_move_cursor_visually): Fix problem
with deletion from last commit.
Mon Apr 24 19:29:40 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_create_pango_context): Set the language
in the context from the current locale.
* gtk/gtkentry.c (gtk_entry_size_request): Use language from the
context, not hardcoded value.
* gtk/gtkentry.c (gtk_entry_move_cursor): Make character movement visual,
not logical.
Sun Apr 23 23:39:18 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.c gtk/gtktextdisplay.c: Don't handle selections as
attributes - that doesn't handle partial-glyph selection
properly. Instead use new pango_layout_line_get_x_ranges()
functionality to draw the selection.
* gtk/gtkentry.c: Simplify code since pango_layout_line_index_to_x()
now properly handles out-of-range coordinates.
* gtk/gtktextbuffer.c: Emit "mark_set" when the cursor is moved.
* gtk/gtktextiter.h gtk/gtktextiterprivate.h: Make gtk_text_iter_get_line_byte()
public.
* gtk/gtktextlayout.[ch]: Properly set the direction in the PangoContext
for paragraphs opposite to the base direction of the widget.
* gtk/gtktextlayout.[ch] gtk/gtktextdisplay.c: Fixes for alignment.
* gtk/gtktextlayout.c: Don't split segments on marks, since that
causes Arabic words to reshape as you cursor through.
* gtk/gtktextlayout.[ch] gtk/gtktextview.[ch]: Implement virtual
cursor position when moving vertically with the arrow keys and
scrolling with page-up/page-down. (Arrow keys save only the X,
scrolling saves both X and Y.)
This means you can line-up / line-down or page-up / page-down
without losing your place, and also that moving vertically
with the cursor keys keeps the same X position, not the same
character count:
* gtk/gtktextlayout.[ch] gtk/gtktextview.[ch]: Make vertical
arrow keys move by display lines, not paragraphs.
Tue Apr 18 14:16:50 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c: Make sure that the bin window is at least
as big as the allocation. (Should we also make sure that the
bin window is big enough to completely cover widget->window?)
* gtk/gtktextview.c (gtk_text_view_get_visible_rect): Add
function to get the onscreen rectangle.
* gdk/x11/gdkwindow-x11.c (gdk_window_get_pointer): Correctly account
for offsets in window coordinates.
Sun Apr 16 16:13:27 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.c (gtk_entry_get_cursor_locations): Fix index/offset
confusion.
* gtk/gtktextview.c (gtk_text_view_ensure_layout): Set the default direction
from the widget direction.
* gtk/gtktexttag.c gtk/gtktexttagprivate.h (gtk_text_tag_set_arg):
Add a "direction" attribute.
* gtk/gtktextview.c: global s/tkxt/text_view/.
* gtk/testtext.c: Added long block of text in Arabic, to test out
the direction attributes. (Some problems with the shaping system
for arabic become obvious - like the fact the cursor splits words
into unjoined pieces.)
Fri Apr 14 12:54:34 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextdisplay.c (render_layout): Add overstrike handling.
* gtk/gtktextlayout.c: Fix up alignment.
* gtk/testtext.c: Add some tests for centering, wrapping.
Fri Apr 14 09:26:22 2000 Owen Taylor <otaylor@redhat.com>
* gdk/gdkdrawable.h gdk/gdkdraw.c gdk/gdkwindow.c gdk/x11/gdkdrawable-x11.c:
Add a draw_glyphs() operation to the drawable vtable and gdk_draw_glyphs().
If we wrote GTK+-specific layout-render function this could just replace
the draw_layout() operation in the vtable.
* gtk/gtkentry.c: Move guts of gtk_entry_get_cursor_locations to
pango_layout_get_cursor_pos() and use that function.
* gtk/gtktextchild.[ch]: add gtk_ onto pixmap_segment_new(), since it
is a non-static symbol.
* gtk/gtktextbtree.[ch]: Replace gtk_text_btree_find_line_data_by_y()
with gtk_text_btree_find_line_by_y()
* gtk/gtktextdisplay.c: Rewrote for Pango - uses a custom layout
renderer that handles GtkTextAppearance attributes.
* gtk/gtktexttag.[ch] gtk/gtktexttagprivate.h:
- Move the values in the style that don't affect geometry into a
GtkTextAppearance structure.
- Change underline to take a PangoUnderline and "font" a string
representation of a font description
- Add a "font_desc" attribute which takes a FontDescription structure.
* gtk/gtktextlayout.[ch]:
- Get rid of the display-line list per each line. Instead, we
generate, on demand, a GtkTextLineDisplay structure which]
contains a PangoLayout * and other necesary information
(offsets, cursor locations) for displaying a paragraph.
- Get rid of the code to wrap lines, create display chunks,
etc. Instead, we just go through a paragraph and convert
it into the necessary inputs to a PangoLayout.
- Implement a new attribute type, GtkTextAttrAppearance. This
holds a GtkTextAppearance, and is used to pass colors,
stipple, etc, through from the layout to the display without
having to use lots and lots of individual attributes.
- Reimplement gtk_layout_get_iter_at_pixel() gtk_layout_get_iter_pos()
in terms of PangoLayout functions.
* gtk/gtktextview.c:
- Handle passing the necessary PangoContext to the layout
- Some fixups in painting to deal with the automatic backing store
and offsetting of GTK+-1.4
- Add a style_set handler so that the default style reacts
properly to theme changes.
* gtk/gtktext?*.[ch]: Random code-style fixes.
* gtk/testtext.c: Substitute in languages that Pango handles now for Thai
Mon Apr 10 10:33:45 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktext?*.[ch]: Check in Havoc's port of the Tk text widget,
in original form preparatory to Pango-ization and gdkimcontext-ization.
Thu Apr 6 19:25:39 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimcontext.c: Move default implementations to real_* vfuncs,
so that we can derive from gtkimcontext in language bindings properly.
Thu Apr 6 16:02:52 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimcontextsimple.[ch]: Use gdk_keyval_to_unicode to gdk_unicode_to_keyval.
Add a compose table including (almost) all the compose combinations
from X. This is 6k of static, shared data as opposed to 50k or so of dynamic
data in the XIM implementation.
* gdk/gdk.h gdk/gdkkeyuni.c gdk/win32/gdkevents-win32.c (gdk_keyval_to_unicode, gdk_unicode_to_keyval):
Moved functions to convert keyvalues from and to unicode here from
the win32 port and made them public.
Wed Apr 5 16:37:29 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkeditable.c (gtk_editable_insert_text): Allow new_text_length == -1.
Wed Apr 5 16:27:45 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimcontext.[ch]: Base class for new input context system
* gtk/gtkimmulticontext.[ch]: Proxy input context that allows
the real input context implementation to be loaded from modules
and switched on the fly.
* gtk/gtkcontextsimple.[ch]: Simple implementation of an input
context that just does direct keysymbol => unicode translation.
* gtk/gtkentry.[ch]: Start switching editing over to using
GtkInputContext. (No handling of preedit yet.)
Wed Apr 5 15:48:41 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktypeutils.h (GTK_CHECK_GET_CLASS): Fix problem with one too
many substitutions. (klass should not be subsituted.)
Wed Apr 5 00:18:14 2000 Owen Taylor <otaylor@redhat.com>
* configure.in: Add checks for Pango
* configure.in docs/Makefile.am: Add test for sgml2html
and allow 'make dist' without building html, but print out
warnings in that case. (For making snapshots)
* gdk/Makefile.am gdk/x11/Makefile.am gtk/Makefile.am:
Add Pango libraries and C flags
* gdk/gdkdraw.c gdk/gdkdrawable.h gdkwindow.c gdk/x11/gdkdrawable-x11.c:
Add function (gdk_draw_layout) to draw a pango layout.
* gdk/gdkpango.h gdk/x11/gdkpango-x11.c: New file with functions
for getting Pango contexts for GDK.
* gtk/gtkeditable.c: Get rid of dead code gtk_editable_parent_set()
* gtk/gtkentry.[ch]: Complete rewrite to use Pango, add bidirectional
editing.
* gtk/gtkentry.c: Hack in simple Hebrew input with direct
keysym => unicode translations. More languages can be added
here, but real input-method support is needed.
* docs/Changes-1.4.txt: Added note about entry behavior.
* gtk/gtkenums.h gtk/gtkwidget.[ch] testgtk.c gtkprivate.h: Add functions
to set the reading direction for a widget and the global direction.
Add test which allows toggling the global direction. Two private
flags are used to store the direction. (GTK_DIRECTION_SET + GTK_DIRECTION_LTR)
* gtk/gtkcheckbutton.c gtk/gtkframe.c gtk/gtkhbbox.c gtk/gtkhbox.c
gtk/gtkradiobutton.c gtk/gtkspinbutton.c gtk/gtktable.c
* gtk/gtk[hv]scale.c gtk/gtkscale.[ch]: Draw numbers using Pango
* gtk/gtklabel.[ch]: Moved to Pango and considerably rewritten. Line breaking,
underlining now handled by Pango.
* gtk/gtkstyle.[ch] gtk/gtkrc.[ch]: Add a PangoFontDescription
to RCStyle and Style. (Having both this and the old font name and GdkFont
is temporary.)
* gtk/gtkwidget.[ch] (gtk_widget_create_pango_{context,layout}): Added
convenience functions for creating contexts and layouts for widgets.
* gtk/testgtk.c: Enhance label tests with multilingual labels.
2000-06-02 03:14:07 +00:00
|
|
|
GdkRectangle window_rect;
|
2000-12-15 01:46:41 +00:00
|
|
|
GdkRegion *region;
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
2000-03-28 01:24:44 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
2000-05-15 16:09:53 +00:00
|
|
|
return;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-07-18 18:37:19 +00:00
|
|
|
if (private->input_only || !private->viewable)
|
2000-07-31 17:18:36 +00:00
|
|
|
return;
|
|
|
|
|
Remove all references to offscreen flag which was no longer used.
Thu Jun 1 23:05:13 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c: Remove all references to
offscreen flag which was no longer used.
* gtk/gtkprivate.h (enum): Remove unused flags and compress.
* gtk/gtkframe.c (gtk_frame_set_label_widget): Check
for non-null label_widget->parent.
* gtk/gtkentry.c: Get rid of code to deal with PangoAttribute
which no longer was used.
* gdk/gdkpango.c (gdk_pango_context_get_info): make static.
* gdk/gdkpango.c (gdk_draw_layout[_line]): Add checks
for null arguments.
* gdk/x11/gdkgeometry-x11.c (gdk_window_scroll): add
check for destroyed windows.
Thu Jun 1 13:48:45 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimmulticontext.c: Add a finalize method and unref
the slave context there.
* gtk/gtkinvisible.[ch]: Make reference counting behavior
identical to GtkWindow.
Thu Jun 1 01:54:11 2000 Owen Taylor <otaylor@redhat.com>
* Makefile.am gdk/gdkpango.c: Copy the layout render function from
pangox to here, so we can write them independent of rendering
system, using GDK primitives.
* gdk/gdkdrawable.h gdk/gdkdraw.c gdk/gdkwindow.c
gdk/x11/gdkdrawable-x11.c: Remove draw_layout() from the vtable,
since we have a rendering-system independent implementation in
terms of draw_glyphs().
* gdk/gdkpango.c gdkdrawable.h (gdk_draw_layout_line): New
function to render a single line.
* gdk/x11/gdkpango.c: Move the guts of this file mostly
into ../gdkpango.c, which simplifies things, since we
don't have to deal with raw X gc's.
Fri May 19 04:28:16 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.[ch]: Add get_log_attrs() function to
get the logical attributes for a given GtkTextLine.
Tue May 30 16:05:39 2000 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkfont-x11.c (gdk_font_charset_for_locale): Track
g_locale_get_codeset() to g_get_codeset() change.
Tue May 30 15:03:19 2000 Owen Taylor <otaylor@redhat.com>
* gtk/testcalendar.c (calendar_font_selection_ok): Use font
descriptions.
* gtk/gtkentry.c (gtk_entry_draw_text): Center text within
the entry.
* gtk/gtkfontsel.c (gtk_font_selection_dialog_init): Start of
redoing (vastly simplifying) for Pango. Still needs quite
a bit of work. (Size selection is currently poor. List of
predefined sizes is not a good idea, since all of these
sizes won't necessarily be distinct.)
Tue May 30 13:50:19 2000 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkfont-x11.c (gdk_font_charset_for_locale): Handle
CODESET results for LANG=C.
Mon May 29 15:49:10 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkrc.[ch]: Add a 'font_name' declaration to RC
which takes a stringized pango font description;
ignore the older 'font' and 'fontset' declarations.
* gtk/gtkstyle.c gtk/gtkrc.c: Fill in the style->font
field with a GdkFont derived via gdk_font_from_description(),
for compatibility. (Should we just remove it entirely?
Probably too much compatibility breakage, but people
should be migrating to the new Pango stuff as quickly
as possible.)
Mon May 29 15:47:41 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.c gtk/gtkclist.c: s/pango_font_unref/g_object_unref/.
Mon May 29 15:44:46 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkcalender.c: Roughly pango-ized. Really needs
redoing; there are some bugs in size allocation right
now, the semi-existant distinction between header / day
fonts was removed, but, with Pango, could actually
be made functional in a nice way.
* gtk/testcalender: Move calender from examples into this
directory as a test program. (We really need to restrcture
testgtk into a whole directory full of tests for every
widget or functionality group, separated into multiple .c
files.)
Mon May 29 15:19:56 2000 Owen Taylor <otaylor@redhat.com>
* gtk/testgtk.c (file_exists): Fix stupid typo that
was keeping RC file from being loaded.
* gtk/testgtkrc gtk/testgtkrc2: Test new pango-ized
RC file font code.
Mon May 29 14:31:27 2000 Owen Taylor <otaylor@redhat.com>
* gdk/gdkfont.h gdk/x11/gdkfont-x11.c (gdk_font_from_description):
Add function to load a GdkFont from a PangoFontDescription.
Fri May 26 17:16:40 2000 Owen Taylor <otaylor@redhat.com>
* gtk/frame.[ch] gtkaspectframe.c: Make frame widgets able
to have any widget for the label, use a GtkLabel widget
to display the text. (Based partially on a patch from
Anders Carlson.)
(Quite a bit of code reorganization - strip 90% of the
guts out of gtkaspectframe and add a single virtual
func to GtkFrameClass - compute_child_allocation.)
Fri May 26 12:00:02 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkctree.c gtk/gtkclist.[ch]: Pangoized.
(Removed clist->row_center_offset field because caching
it wasn't saving time or code, added private function
_gtk_clist_create_cell_layout()).
Wed May 24 15:59:37 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkaccellabel.c: Pangoized.
* gtk/[hv]ruler.c: Pangoized
Mon May 22 19:23:59 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkfilesel.c (gtk_file_selection_init):
Use gtk_clist_set_column_auto_resize() to remove need
need for manual column width computations.
Mon May 22 18:50:26 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktooltips.[ch]: Replace custom drawing with a GtkLabel,
ensuring Pango correctness, and considerably simplifying the
code.
* gtk/gtklabel.c gtk[hv]scale.c: 1000 => PANGO_SCALE.
* gtk/gtklabel.c (gtk_label_size_request): Fixed incorrect
getting of numbers of lines.
* gtk/gtklabel.c (gtk_label_size_request): Set the requisition
to the actual requested width of the lable, not to the wrap
width we set.
* gtk/gtktextchild.h: Remove extraneous include of gtk/gtk.h.
* gtk/gtktextbtree.c gtk/gtktextbuffer.c gtk/gtktextlayout.c
gtk/gtktextview.c gtk/gtktextview.[ch]: Fix up includes.
* gtk/gtktextview.c: Fix structure inheritance.
* gtk/gtkprogressbar.c: Pangoize.
Mon May 22 15:47:30 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextview.c (gtk_text_view_get_first_para_iter): Encapsulate
in a function.
* gtk/gtktextlayout.c (find_display_line_above): Fixed
bug with computing line tops.
* gtk/gtktextview.c (changed_handler): Fix < , <= confusion.
Thu May 18 18:53:31 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextdisplay.c (gtk_text_layout_draw): Fix up the x_offset
and y_offset coordinates to do what we need now. (The offset between
buffer and layout coordinates has been reintroduced, but is a
bit different than before.)
* gtk/gtktextview.[ch]: No longer inherit from GtkLayout; instead
handle the adjustments ourselves, and scroll as necessary using
the new gdk_window_scroll().
The advantage of this is that when we are incrementally revalidating,
we are essentially rearranging things around the visible portion
of the screen. With the old setup, the visible portion of the
screen was moved around in the layout, so scrolling and redrawing
to track that caused jumping of the display. Since we now
control the scrolling ourselves, we can suppress this and
only redraw when things actually change.
Thu May 18 18:47:25 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextbtree.c (redisplay_mark): We need to invalidate
the region not just redisplay it after-all, since we store the
cursors in the LineDisplay. (Ugly interactions here between
GtkLayout and GtkTextBTree here.)
* gtk/gtktextbtree.c (redisplay_region): Fixed reversed comparison.
Thu May 18 18:43:21 2000 Owen Taylor <otaylor@redhat.com>
* gdk/gdkwindow.h gdk/x11/gdkgeometry-x11.c (gdk_window_scroll):
Added function to scroll contents of a window while keeping the
window constant. Works by XCopyArea or guffaw-scrolling depending
on the details of how the window is set up. (guffaw-scrolling
still needs to be filled in.)
Wed May 17 22:36:53 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextiter.c gtk/gtkmain.c: Add a debug key for the text widget,
move the debugging that was tied to a global variable
to that.
* gtk/gtkmarshal.list: Add NONE:INT,INT,INT
* gtk/gtktextbtree.[ch] gtk/gtktextlayout.c: Keep a separate
validated flag, in line data instead of setting height/width to
-1. This allows us to perform operations with partially invalid
buffer (using the old size for invalid lines) and thus to do
incremental vaidation. Keep height/width aggregates up to date
when deleting text and rebalancing the tree.
* gtk/gtktextbtree.[ch]: Add functions validate a line
(gtk_text_btree_validate_line), and to validate up
to a number of pixels (gtk_text_btree_validate).
* gtk/gtktextlayout.[ch]: Add an ::invalidated signal
that indicates that something is changed and a revalidation
pass is needed. Change ::need_repaint to ::changed, and
make it take old and new yranges instead of a rectangle.
* gtk/gtktextbtree.[ch] gtk/gtktextlayout.[ch]: Move
the line_data_destroy() function from
gtk_text_btree_add_view() to a virtual function in
GtkTextLayout
* gtk/gtktextbtree.[ch]: Remove gtk_text_btree_get_damage_range(),
since we are handling partial repaints in a different fashion
now.
* gtk/gtktextbtree.[ch]: Only repaint the changed portion
of the selection instead of queueing a repaint on the
entire widget.
* gtk/gtktextbuffer.[ch] gtk/gtktextbtree.[ch]: Move
get_selection_bounds() down to btree, make the function
in buffer a wrapper around the btree function.
* gtk/gtktextlayout.[ch]: Add functions to check if the
layout is valid and to recompute either a range of pixels
aroudn a line or a certain total number of pixels.
* gtk/gtktextlayout.[ch]: Cache a single line display;
now that we only redraw the needed portions, the hit rate
for this cache is quite high.
* gtk/gtktextview.[ch]: Keep track of the first paragraph
on the screen so that when re-laying-out the buffer, we can
keep the same place. This requires connecting to ::value_changed
on the adjustments
* gtk/gtktextview.[ch]: Add idle functions to revalidate
the buffer after we receive an ::invalidated signal.
Wed May 17 22:10:47 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_size_allocate): Set upper
to max of allocation and layout size, not just to the
layout size.
* gtk/gtk[hv]scrollbar.c (gtk_[hv]scrollbar_calc_slider_size):
Invalidate window so it gets redrawn properly.
* gdk/gdkwindow.c (gdk_window_invalidate_rect): Allow rect == NULL
to mean the entire window.
* gdk/gdkevents.h: Move definition for GDK_PRIORITY_REDRAW
into public header.
Mon May 15 14:51:31 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextmark.c (gtk_text_mark_get_name): Add function
to get the name of a mark.
* gtk/gtktextlayout.c (gtk_text_layout_get_line_at_y): Add a function
to find the paragraph from a y position.
Thu May 11 12:57:20 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextbtree.c (gtk_text_btree_node_invalidate_upward): Valid
nodes have width/height >= 0, not > 0.
Tue May 9 21:29:06 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.[ch] gtk/gtktextdisplay.c (gtk_text_layout_get_line_display):
Add a size_only flag, so when we only need the size, we don't create
useless appearance attributes.
* gtk/gtktextview.c (gtk_text_view_ensure_layout): Remove
duplicate setting of font description.
* gtk/gtkscale.c: Use PANGO_SCALE instead of 1000
Wed Apr 26 01:53:23 2000 Owen Taylor <otaylor@redhat.com>
* gtk/Makefile.am (EXTRA_DIST): Add OLD_STAMP into
EXTRA_DIST. It does not work well when the file that
everything depends on is not in the tarball.
Wed Apr 26 00:56:14 2000 Owen Taylor <otaylor@redhat.com>
* gtk/testgtk.c: Some hacks and fixes so that it basically
works when not sitting in the GTK+ build tree.
2000-05-03 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbtree.c (gtk_text_line_next_could_contain_tag):
Properly determine the ordering of the tag root and the current
line within the tree. Previous algorithm only worked if the tag
root's immediate parent was the common root of both the current
line and the tag root.
Wed Apr 26 00:43:00 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.c (set_para_values): Fix some bugs in
alignment.
* gtk/gtktextview.c (gtk_text_view_ensure_layout): Track
the widget text directional dynamically.
* gtk/gtktextview.[ch]: Added functions to get and set default
wrap mode.
Tue Apr 25 23:47:38 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.c (gtk_text_layout_get_iter_location): Fix bug
in cursor location computation.
Tue Apr 25 23:22:59 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_set_size): Clamp hadjustment/
vadjusment values properly when layout gets smaller.
* gtk/gtktextview.c (need_repaint_handler): Areas being
passed in are far completely inaccurate, and sometimes
too small, so, for now, just queue a redraw on the
whole visible region.
2000-04-25 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbtree.c (summary_destroy): new function to
destroy tag summary nodes
(gtk_text_line_next_could_contain_tag): this function was
totally broken if the line passed in wasn't below the tag
root. Fix it.
(gtk_text_btree_first_could_contain_tag): In the tag == NULL
"wildcard" case, we have to do a linear scan. Blah.
(gtk_text_btree_last_could_contain_tag): In tag == NULL case,
we have to do the linear scan
(tag_removed_cb): When a tag is removed from the tag table,
remove the GtkTextTagInfo node from the btree.
(gtk_text_btree_spew): Implement the spew function, for
our debugging pleasure.
Tue Apr 25 19:40:18 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.c (gtk_text_layout_set_buffer): Fix
a problem with referring to the wrong buffer.
* gtk/gtkentry.c: Fix focus-in/focus-out confusion.
* gtk/gtkrc.c gtk/gtkstyle.c: Moving setting default
font description to gtk_style_new() - otherwise things
don't work without a .gtkrc file.
* gtk/gtktextbuffer.c (gtk_text_buffer_new): Sink the
tags table if we create it ourself, too.
* gdk/gdktypes.h (enum): Move GDK_RELEASE_MASK, since
it was conflicting with XKB modifiers.
* gtk/gtktextview.[ch]: Add simple support for
GtkIMContext.
Mon Apr 24 19:34:18 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.c (gtk_entry_move_cursor_visually): Fix problem
with deletion from last commit.
Mon Apr 24 19:29:40 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_create_pango_context): Set the language
in the context from the current locale.
* gtk/gtkentry.c (gtk_entry_size_request): Use language from the
context, not hardcoded value.
* gtk/gtkentry.c (gtk_entry_move_cursor): Make character movement visual,
not logical.
Sun Apr 23 23:39:18 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.c gtk/gtktextdisplay.c: Don't handle selections as
attributes - that doesn't handle partial-glyph selection
properly. Instead use new pango_layout_line_get_x_ranges()
functionality to draw the selection.
* gtk/gtkentry.c: Simplify code since pango_layout_line_index_to_x()
now properly handles out-of-range coordinates.
* gtk/gtktextbuffer.c: Emit "mark_set" when the cursor is moved.
* gtk/gtktextiter.h gtk/gtktextiterprivate.h: Make gtk_text_iter_get_line_byte()
public.
* gtk/gtktextlayout.[ch]: Properly set the direction in the PangoContext
for paragraphs opposite to the base direction of the widget.
* gtk/gtktextlayout.[ch] gtk/gtktextdisplay.c: Fixes for alignment.
* gtk/gtktextlayout.c: Don't split segments on marks, since that
causes Arabic words to reshape as you cursor through.
* gtk/gtktextlayout.[ch] gtk/gtktextview.[ch]: Implement virtual
cursor position when moving vertically with the arrow keys and
scrolling with page-up/page-down. (Arrow keys save only the X,
scrolling saves both X and Y.)
This means you can line-up / line-down or page-up / page-down
without losing your place, and also that moving vertically
with the cursor keys keeps the same X position, not the same
character count:
* gtk/gtktextlayout.[ch] gtk/gtktextview.[ch]: Make vertical
arrow keys move by display lines, not paragraphs.
Tue Apr 18 14:16:50 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c: Make sure that the bin window is at least
as big as the allocation. (Should we also make sure that the
bin window is big enough to completely cover widget->window?)
* gtk/gtktextview.c (gtk_text_view_get_visible_rect): Add
function to get the onscreen rectangle.
* gdk/x11/gdkwindow-x11.c (gdk_window_get_pointer): Correctly account
for offsets in window coordinates.
Sun Apr 16 16:13:27 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.c (gtk_entry_get_cursor_locations): Fix index/offset
confusion.
* gtk/gtktextview.c (gtk_text_view_ensure_layout): Set the default direction
from the widget direction.
* gtk/gtktexttag.c gtk/gtktexttagprivate.h (gtk_text_tag_set_arg):
Add a "direction" attribute.
* gtk/gtktextview.c: global s/tkxt/text_view/.
* gtk/testtext.c: Added long block of text in Arabic, to test out
the direction attributes. (Some problems with the shaping system
for arabic become obvious - like the fact the cursor splits words
into unjoined pieces.)
Fri Apr 14 12:54:34 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextdisplay.c (render_layout): Add overstrike handling.
* gtk/gtktextlayout.c: Fix up alignment.
* gtk/testtext.c: Add some tests for centering, wrapping.
Fri Apr 14 09:26:22 2000 Owen Taylor <otaylor@redhat.com>
* gdk/gdkdrawable.h gdk/gdkdraw.c gdk/gdkwindow.c gdk/x11/gdkdrawable-x11.c:
Add a draw_glyphs() operation to the drawable vtable and gdk_draw_glyphs().
If we wrote GTK+-specific layout-render function this could just replace
the draw_layout() operation in the vtable.
* gtk/gtkentry.c: Move guts of gtk_entry_get_cursor_locations to
pango_layout_get_cursor_pos() and use that function.
* gtk/gtktextchild.[ch]: add gtk_ onto pixmap_segment_new(), since it
is a non-static symbol.
* gtk/gtktextbtree.[ch]: Replace gtk_text_btree_find_line_data_by_y()
with gtk_text_btree_find_line_by_y()
* gtk/gtktextdisplay.c: Rewrote for Pango - uses a custom layout
renderer that handles GtkTextAppearance attributes.
* gtk/gtktexttag.[ch] gtk/gtktexttagprivate.h:
- Move the values in the style that don't affect geometry into a
GtkTextAppearance structure.
- Change underline to take a PangoUnderline and "font" a string
representation of a font description
- Add a "font_desc" attribute which takes a FontDescription structure.
* gtk/gtktextlayout.[ch]:
- Get rid of the display-line list per each line. Instead, we
generate, on demand, a GtkTextLineDisplay structure which]
contains a PangoLayout * and other necesary information
(offsets, cursor locations) for displaying a paragraph.
- Get rid of the code to wrap lines, create display chunks,
etc. Instead, we just go through a paragraph and convert
it into the necessary inputs to a PangoLayout.
- Implement a new attribute type, GtkTextAttrAppearance. This
holds a GtkTextAppearance, and is used to pass colors,
stipple, etc, through from the layout to the display without
having to use lots and lots of individual attributes.
- Reimplement gtk_layout_get_iter_at_pixel() gtk_layout_get_iter_pos()
in terms of PangoLayout functions.
* gtk/gtktextview.c:
- Handle passing the necessary PangoContext to the layout
- Some fixups in painting to deal with the automatic backing store
and offsetting of GTK+-1.4
- Add a style_set handler so that the default style reacts
properly to theme changes.
* gtk/gtktext?*.[ch]: Random code-style fixes.
* gtk/testtext.c: Substitute in languages that Pango handles now for Thai
Mon Apr 10 10:33:45 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktext?*.[ch]: Check in Havoc's port of the Tk text widget,
in original form preparatory to Pango-ization and gdkimcontext-ization.
Thu Apr 6 19:25:39 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimcontext.c: Move default implementations to real_* vfuncs,
so that we can derive from gtkimcontext in language bindings properly.
Thu Apr 6 16:02:52 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimcontextsimple.[ch]: Use gdk_keyval_to_unicode to gdk_unicode_to_keyval.
Add a compose table including (almost) all the compose combinations
from X. This is 6k of static, shared data as opposed to 50k or so of dynamic
data in the XIM implementation.
* gdk/gdk.h gdk/gdkkeyuni.c gdk/win32/gdkevents-win32.c (gdk_keyval_to_unicode, gdk_unicode_to_keyval):
Moved functions to convert keyvalues from and to unicode here from
the win32 port and made them public.
Wed Apr 5 16:37:29 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkeditable.c (gtk_editable_insert_text): Allow new_text_length == -1.
Wed Apr 5 16:27:45 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimcontext.[ch]: Base class for new input context system
* gtk/gtkimmulticontext.[ch]: Proxy input context that allows
the real input context implementation to be loaded from modules
and switched on the fly.
* gtk/gtkcontextsimple.[ch]: Simple implementation of an input
context that just does direct keysymbol => unicode translation.
* gtk/gtkentry.[ch]: Start switching editing over to using
GtkInputContext. (No handling of preedit yet.)
Wed Apr 5 15:48:41 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktypeutils.h (GTK_CHECK_GET_CLASS): Fix problem with one too
many substitutions. (klass should not be subsituted.)
Wed Apr 5 00:18:14 2000 Owen Taylor <otaylor@redhat.com>
* configure.in: Add checks for Pango
* configure.in docs/Makefile.am: Add test for sgml2html
and allow 'make dist' without building html, but print out
warnings in that case. (For making snapshots)
* gdk/Makefile.am gdk/x11/Makefile.am gtk/Makefile.am:
Add Pango libraries and C flags
* gdk/gdkdraw.c gdk/gdkdrawable.h gdkwindow.c gdk/x11/gdkdrawable-x11.c:
Add function (gdk_draw_layout) to draw a pango layout.
* gdk/gdkpango.h gdk/x11/gdkpango-x11.c: New file with functions
for getting Pango contexts for GDK.
* gtk/gtkeditable.c: Get rid of dead code gtk_editable_parent_set()
* gtk/gtkentry.[ch]: Complete rewrite to use Pango, add bidirectional
editing.
* gtk/gtkentry.c: Hack in simple Hebrew input with direct
keysym => unicode translations. More languages can be added
here, but real input-method support is needed.
* docs/Changes-1.4.txt: Added note about entry behavior.
* gtk/gtkenums.h gtk/gtkwidget.[ch] testgtk.c gtkprivate.h: Add functions
to set the reading direction for a widget and the global direction.
Add test which allows toggling the global direction. Two private
flags are used to store the direction. (GTK_DIRECTION_SET + GTK_DIRECTION_LTR)
* gtk/gtkcheckbutton.c gtk/gtkframe.c gtk/gtkhbbox.c gtk/gtkhbox.c
gtk/gtkradiobutton.c gtk/gtkspinbutton.c gtk/gtktable.c
* gtk/gtk[hv]scale.c gtk/gtkscale.[ch]: Draw numbers using Pango
* gtk/gtklabel.[ch]: Moved to Pango and considerably rewritten. Line breaking,
underlining now handled by Pango.
* gtk/gtkstyle.[ch] gtk/gtkrc.[ch]: Add a PangoFontDescription
to RCStyle and Style. (Having both this and the old font name and GdkFont
is temporary.)
* gtk/gtkwidget.[ch] (gtk_widget_create_pango_{context,layout}): Added
convenience functions for creating contexts and layouts for widgets.
* gtk/testgtk.c: Enhance label tests with multilingual labels.
2000-06-02 03:14:07 +00:00
|
|
|
if (!rect)
|
|
|
|
{
|
|
|
|
window_rect.x = 0;
|
|
|
|
window_rect.y = 0;
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
gdk_drawable_get_size (GDK_DRAWABLE (window),
|
2009-06-01 10:04:36 +00:00
|
|
|
&window_rect.width,
|
|
|
|
&window_rect.height);
|
Remove all references to offscreen flag which was no longer used.
Thu Jun 1 23:05:13 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c: Remove all references to
offscreen flag which was no longer used.
* gtk/gtkprivate.h (enum): Remove unused flags and compress.
* gtk/gtkframe.c (gtk_frame_set_label_widget): Check
for non-null label_widget->parent.
* gtk/gtkentry.c: Get rid of code to deal with PangoAttribute
which no longer was used.
* gdk/gdkpango.c (gdk_pango_context_get_info): make static.
* gdk/gdkpango.c (gdk_draw_layout[_line]): Add checks
for null arguments.
* gdk/x11/gdkgeometry-x11.c (gdk_window_scroll): add
check for destroyed windows.
Thu Jun 1 13:48:45 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimmulticontext.c: Add a finalize method and unref
the slave context there.
* gtk/gtkinvisible.[ch]: Make reference counting behavior
identical to GtkWindow.
Thu Jun 1 01:54:11 2000 Owen Taylor <otaylor@redhat.com>
* Makefile.am gdk/gdkpango.c: Copy the layout render function from
pangox to here, so we can write them independent of rendering
system, using GDK primitives.
* gdk/gdkdrawable.h gdk/gdkdraw.c gdk/gdkwindow.c
gdk/x11/gdkdrawable-x11.c: Remove draw_layout() from the vtable,
since we have a rendering-system independent implementation in
terms of draw_glyphs().
* gdk/gdkpango.c gdkdrawable.h (gdk_draw_layout_line): New
function to render a single line.
* gdk/x11/gdkpango.c: Move the guts of this file mostly
into ../gdkpango.c, which simplifies things, since we
don't have to deal with raw X gc's.
Fri May 19 04:28:16 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.[ch]: Add get_log_attrs() function to
get the logical attributes for a given GtkTextLine.
Tue May 30 16:05:39 2000 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkfont-x11.c (gdk_font_charset_for_locale): Track
g_locale_get_codeset() to g_get_codeset() change.
Tue May 30 15:03:19 2000 Owen Taylor <otaylor@redhat.com>
* gtk/testcalendar.c (calendar_font_selection_ok): Use font
descriptions.
* gtk/gtkentry.c (gtk_entry_draw_text): Center text within
the entry.
* gtk/gtkfontsel.c (gtk_font_selection_dialog_init): Start of
redoing (vastly simplifying) for Pango. Still needs quite
a bit of work. (Size selection is currently poor. List of
predefined sizes is not a good idea, since all of these
sizes won't necessarily be distinct.)
Tue May 30 13:50:19 2000 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkfont-x11.c (gdk_font_charset_for_locale): Handle
CODESET results for LANG=C.
Mon May 29 15:49:10 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkrc.[ch]: Add a 'font_name' declaration to RC
which takes a stringized pango font description;
ignore the older 'font' and 'fontset' declarations.
* gtk/gtkstyle.c gtk/gtkrc.c: Fill in the style->font
field with a GdkFont derived via gdk_font_from_description(),
for compatibility. (Should we just remove it entirely?
Probably too much compatibility breakage, but people
should be migrating to the new Pango stuff as quickly
as possible.)
Mon May 29 15:47:41 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.c gtk/gtkclist.c: s/pango_font_unref/g_object_unref/.
Mon May 29 15:44:46 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkcalender.c: Roughly pango-ized. Really needs
redoing; there are some bugs in size allocation right
now, the semi-existant distinction between header / day
fonts was removed, but, with Pango, could actually
be made functional in a nice way.
* gtk/testcalender: Move calender from examples into this
directory as a test program. (We really need to restrcture
testgtk into a whole directory full of tests for every
widget or functionality group, separated into multiple .c
files.)
Mon May 29 15:19:56 2000 Owen Taylor <otaylor@redhat.com>
* gtk/testgtk.c (file_exists): Fix stupid typo that
was keeping RC file from being loaded.
* gtk/testgtkrc gtk/testgtkrc2: Test new pango-ized
RC file font code.
Mon May 29 14:31:27 2000 Owen Taylor <otaylor@redhat.com>
* gdk/gdkfont.h gdk/x11/gdkfont-x11.c (gdk_font_from_description):
Add function to load a GdkFont from a PangoFontDescription.
Fri May 26 17:16:40 2000 Owen Taylor <otaylor@redhat.com>
* gtk/frame.[ch] gtkaspectframe.c: Make frame widgets able
to have any widget for the label, use a GtkLabel widget
to display the text. (Based partially on a patch from
Anders Carlson.)
(Quite a bit of code reorganization - strip 90% of the
guts out of gtkaspectframe and add a single virtual
func to GtkFrameClass - compute_child_allocation.)
Fri May 26 12:00:02 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkctree.c gtk/gtkclist.[ch]: Pangoized.
(Removed clist->row_center_offset field because caching
it wasn't saving time or code, added private function
_gtk_clist_create_cell_layout()).
Wed May 24 15:59:37 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkaccellabel.c: Pangoized.
* gtk/[hv]ruler.c: Pangoized
Mon May 22 19:23:59 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkfilesel.c (gtk_file_selection_init):
Use gtk_clist_set_column_auto_resize() to remove need
need for manual column width computations.
Mon May 22 18:50:26 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktooltips.[ch]: Replace custom drawing with a GtkLabel,
ensuring Pango correctness, and considerably simplifying the
code.
* gtk/gtklabel.c gtk[hv]scale.c: 1000 => PANGO_SCALE.
* gtk/gtklabel.c (gtk_label_size_request): Fixed incorrect
getting of numbers of lines.
* gtk/gtklabel.c (gtk_label_size_request): Set the requisition
to the actual requested width of the lable, not to the wrap
width we set.
* gtk/gtktextchild.h: Remove extraneous include of gtk/gtk.h.
* gtk/gtktextbtree.c gtk/gtktextbuffer.c gtk/gtktextlayout.c
gtk/gtktextview.c gtk/gtktextview.[ch]: Fix up includes.
* gtk/gtktextview.c: Fix structure inheritance.
* gtk/gtkprogressbar.c: Pangoize.
Mon May 22 15:47:30 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextview.c (gtk_text_view_get_first_para_iter): Encapsulate
in a function.
* gtk/gtktextlayout.c (find_display_line_above): Fixed
bug with computing line tops.
* gtk/gtktextview.c (changed_handler): Fix < , <= confusion.
Thu May 18 18:53:31 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextdisplay.c (gtk_text_layout_draw): Fix up the x_offset
and y_offset coordinates to do what we need now. (The offset between
buffer and layout coordinates has been reintroduced, but is a
bit different than before.)
* gtk/gtktextview.[ch]: No longer inherit from GtkLayout; instead
handle the adjustments ourselves, and scroll as necessary using
the new gdk_window_scroll().
The advantage of this is that when we are incrementally revalidating,
we are essentially rearranging things around the visible portion
of the screen. With the old setup, the visible portion of the
screen was moved around in the layout, so scrolling and redrawing
to track that caused jumping of the display. Since we now
control the scrolling ourselves, we can suppress this and
only redraw when things actually change.
Thu May 18 18:47:25 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextbtree.c (redisplay_mark): We need to invalidate
the region not just redisplay it after-all, since we store the
cursors in the LineDisplay. (Ugly interactions here between
GtkLayout and GtkTextBTree here.)
* gtk/gtktextbtree.c (redisplay_region): Fixed reversed comparison.
Thu May 18 18:43:21 2000 Owen Taylor <otaylor@redhat.com>
* gdk/gdkwindow.h gdk/x11/gdkgeometry-x11.c (gdk_window_scroll):
Added function to scroll contents of a window while keeping the
window constant. Works by XCopyArea or guffaw-scrolling depending
on the details of how the window is set up. (guffaw-scrolling
still needs to be filled in.)
Wed May 17 22:36:53 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextiter.c gtk/gtkmain.c: Add a debug key for the text widget,
move the debugging that was tied to a global variable
to that.
* gtk/gtkmarshal.list: Add NONE:INT,INT,INT
* gtk/gtktextbtree.[ch] gtk/gtktextlayout.c: Keep a separate
validated flag, in line data instead of setting height/width to
-1. This allows us to perform operations with partially invalid
buffer (using the old size for invalid lines) and thus to do
incremental vaidation. Keep height/width aggregates up to date
when deleting text and rebalancing the tree.
* gtk/gtktextbtree.[ch]: Add functions validate a line
(gtk_text_btree_validate_line), and to validate up
to a number of pixels (gtk_text_btree_validate).
* gtk/gtktextlayout.[ch]: Add an ::invalidated signal
that indicates that something is changed and a revalidation
pass is needed. Change ::need_repaint to ::changed, and
make it take old and new yranges instead of a rectangle.
* gtk/gtktextbtree.[ch] gtk/gtktextlayout.[ch]: Move
the line_data_destroy() function from
gtk_text_btree_add_view() to a virtual function in
GtkTextLayout
* gtk/gtktextbtree.[ch]: Remove gtk_text_btree_get_damage_range(),
since we are handling partial repaints in a different fashion
now.
* gtk/gtktextbtree.[ch]: Only repaint the changed portion
of the selection instead of queueing a repaint on the
entire widget.
* gtk/gtktextbuffer.[ch] gtk/gtktextbtree.[ch]: Move
get_selection_bounds() down to btree, make the function
in buffer a wrapper around the btree function.
* gtk/gtktextlayout.[ch]: Add functions to check if the
layout is valid and to recompute either a range of pixels
aroudn a line or a certain total number of pixels.
* gtk/gtktextlayout.[ch]: Cache a single line display;
now that we only redraw the needed portions, the hit rate
for this cache is quite high.
* gtk/gtktextview.[ch]: Keep track of the first paragraph
on the screen so that when re-laying-out the buffer, we can
keep the same place. This requires connecting to ::value_changed
on the adjustments
* gtk/gtktextview.[ch]: Add idle functions to revalidate
the buffer after we receive an ::invalidated signal.
Wed May 17 22:10:47 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_size_allocate): Set upper
to max of allocation and layout size, not just to the
layout size.
* gtk/gtk[hv]scrollbar.c (gtk_[hv]scrollbar_calc_slider_size):
Invalidate window so it gets redrawn properly.
* gdk/gdkwindow.c (gdk_window_invalidate_rect): Allow rect == NULL
to mean the entire window.
* gdk/gdkevents.h: Move definition for GDK_PRIORITY_REDRAW
into public header.
Mon May 15 14:51:31 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextmark.c (gtk_text_mark_get_name): Add function
to get the name of a mark.
* gtk/gtktextlayout.c (gtk_text_layout_get_line_at_y): Add a function
to find the paragraph from a y position.
Thu May 11 12:57:20 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextbtree.c (gtk_text_btree_node_invalidate_upward): Valid
nodes have width/height >= 0, not > 0.
Tue May 9 21:29:06 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.[ch] gtk/gtktextdisplay.c (gtk_text_layout_get_line_display):
Add a size_only flag, so when we only need the size, we don't create
useless appearance attributes.
* gtk/gtktextview.c (gtk_text_view_ensure_layout): Remove
duplicate setting of font description.
* gtk/gtkscale.c: Use PANGO_SCALE instead of 1000
Wed Apr 26 01:53:23 2000 Owen Taylor <otaylor@redhat.com>
* gtk/Makefile.am (EXTRA_DIST): Add OLD_STAMP into
EXTRA_DIST. It does not work well when the file that
everything depends on is not in the tarball.
Wed Apr 26 00:56:14 2000 Owen Taylor <otaylor@redhat.com>
* gtk/testgtk.c: Some hacks and fixes so that it basically
works when not sitting in the GTK+ build tree.
2000-05-03 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbtree.c (gtk_text_line_next_could_contain_tag):
Properly determine the ordering of the tag root and the current
line within the tree. Previous algorithm only worked if the tag
root's immediate parent was the common root of both the current
line and the tag root.
Wed Apr 26 00:43:00 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.c (set_para_values): Fix some bugs in
alignment.
* gtk/gtktextview.c (gtk_text_view_ensure_layout): Track
the widget text directional dynamically.
* gtk/gtktextview.[ch]: Added functions to get and set default
wrap mode.
Tue Apr 25 23:47:38 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.c (gtk_text_layout_get_iter_location): Fix bug
in cursor location computation.
Tue Apr 25 23:22:59 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_set_size): Clamp hadjustment/
vadjusment values properly when layout gets smaller.
* gtk/gtktextview.c (need_repaint_handler): Areas being
passed in are far completely inaccurate, and sometimes
too small, so, for now, just queue a redraw on the
whole visible region.
2000-04-25 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbtree.c (summary_destroy): new function to
destroy tag summary nodes
(gtk_text_line_next_could_contain_tag): this function was
totally broken if the line passed in wasn't below the tag
root. Fix it.
(gtk_text_btree_first_could_contain_tag): In the tag == NULL
"wildcard" case, we have to do a linear scan. Blah.
(gtk_text_btree_last_could_contain_tag): In tag == NULL case,
we have to do the linear scan
(tag_removed_cb): When a tag is removed from the tag table,
remove the GtkTextTagInfo node from the btree.
(gtk_text_btree_spew): Implement the spew function, for
our debugging pleasure.
Tue Apr 25 19:40:18 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextlayout.c (gtk_text_layout_set_buffer): Fix
a problem with referring to the wrong buffer.
* gtk/gtkentry.c: Fix focus-in/focus-out confusion.
* gtk/gtkrc.c gtk/gtkstyle.c: Moving setting default
font description to gtk_style_new() - otherwise things
don't work without a .gtkrc file.
* gtk/gtktextbuffer.c (gtk_text_buffer_new): Sink the
tags table if we create it ourself, too.
* gdk/gdktypes.h (enum): Move GDK_RELEASE_MASK, since
it was conflicting with XKB modifiers.
* gtk/gtktextview.[ch]: Add simple support for
GtkIMContext.
Mon Apr 24 19:34:18 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.c (gtk_entry_move_cursor_visually): Fix problem
with deletion from last commit.
Mon Apr 24 19:29:40 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_create_pango_context): Set the language
in the context from the current locale.
* gtk/gtkentry.c (gtk_entry_size_request): Use language from the
context, not hardcoded value.
* gtk/gtkentry.c (gtk_entry_move_cursor): Make character movement visual,
not logical.
Sun Apr 23 23:39:18 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.c gtk/gtktextdisplay.c: Don't handle selections as
attributes - that doesn't handle partial-glyph selection
properly. Instead use new pango_layout_line_get_x_ranges()
functionality to draw the selection.
* gtk/gtkentry.c: Simplify code since pango_layout_line_index_to_x()
now properly handles out-of-range coordinates.
* gtk/gtktextbuffer.c: Emit "mark_set" when the cursor is moved.
* gtk/gtktextiter.h gtk/gtktextiterprivate.h: Make gtk_text_iter_get_line_byte()
public.
* gtk/gtktextlayout.[ch]: Properly set the direction in the PangoContext
for paragraphs opposite to the base direction of the widget.
* gtk/gtktextlayout.[ch] gtk/gtktextdisplay.c: Fixes for alignment.
* gtk/gtktextlayout.c: Don't split segments on marks, since that
causes Arabic words to reshape as you cursor through.
* gtk/gtktextlayout.[ch] gtk/gtktextview.[ch]: Implement virtual
cursor position when moving vertically with the arrow keys and
scrolling with page-up/page-down. (Arrow keys save only the X,
scrolling saves both X and Y.)
This means you can line-up / line-down or page-up / page-down
without losing your place, and also that moving vertically
with the cursor keys keeps the same X position, not the same
character count:
* gtk/gtktextlayout.[ch] gtk/gtktextview.[ch]: Make vertical
arrow keys move by display lines, not paragraphs.
Tue Apr 18 14:16:50 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c: Make sure that the bin window is at least
as big as the allocation. (Should we also make sure that the
bin window is big enough to completely cover widget->window?)
* gtk/gtktextview.c (gtk_text_view_get_visible_rect): Add
function to get the onscreen rectangle.
* gdk/x11/gdkwindow-x11.c (gdk_window_get_pointer): Correctly account
for offsets in window coordinates.
Sun Apr 16 16:13:27 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.c (gtk_entry_get_cursor_locations): Fix index/offset
confusion.
* gtk/gtktextview.c (gtk_text_view_ensure_layout): Set the default direction
from the widget direction.
* gtk/gtktexttag.c gtk/gtktexttagprivate.h (gtk_text_tag_set_arg):
Add a "direction" attribute.
* gtk/gtktextview.c: global s/tkxt/text_view/.
* gtk/testtext.c: Added long block of text in Arabic, to test out
the direction attributes. (Some problems with the shaping system
for arabic become obvious - like the fact the cursor splits words
into unjoined pieces.)
Fri Apr 14 12:54:34 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktextdisplay.c (render_layout): Add overstrike handling.
* gtk/gtktextlayout.c: Fix up alignment.
* gtk/testtext.c: Add some tests for centering, wrapping.
Fri Apr 14 09:26:22 2000 Owen Taylor <otaylor@redhat.com>
* gdk/gdkdrawable.h gdk/gdkdraw.c gdk/gdkwindow.c gdk/x11/gdkdrawable-x11.c:
Add a draw_glyphs() operation to the drawable vtable and gdk_draw_glyphs().
If we wrote GTK+-specific layout-render function this could just replace
the draw_layout() operation in the vtable.
* gtk/gtkentry.c: Move guts of gtk_entry_get_cursor_locations to
pango_layout_get_cursor_pos() and use that function.
* gtk/gtktextchild.[ch]: add gtk_ onto pixmap_segment_new(), since it
is a non-static symbol.
* gtk/gtktextbtree.[ch]: Replace gtk_text_btree_find_line_data_by_y()
with gtk_text_btree_find_line_by_y()
* gtk/gtktextdisplay.c: Rewrote for Pango - uses a custom layout
renderer that handles GtkTextAppearance attributes.
* gtk/gtktexttag.[ch] gtk/gtktexttagprivate.h:
- Move the values in the style that don't affect geometry into a
GtkTextAppearance structure.
- Change underline to take a PangoUnderline and "font" a string
representation of a font description
- Add a "font_desc" attribute which takes a FontDescription structure.
* gtk/gtktextlayout.[ch]:
- Get rid of the display-line list per each line. Instead, we
generate, on demand, a GtkTextLineDisplay structure which]
contains a PangoLayout * and other necesary information
(offsets, cursor locations) for displaying a paragraph.
- Get rid of the code to wrap lines, create display chunks,
etc. Instead, we just go through a paragraph and convert
it into the necessary inputs to a PangoLayout.
- Implement a new attribute type, GtkTextAttrAppearance. This
holds a GtkTextAppearance, and is used to pass colors,
stipple, etc, through from the layout to the display without
having to use lots and lots of individual attributes.
- Reimplement gtk_layout_get_iter_at_pixel() gtk_layout_get_iter_pos()
in terms of PangoLayout functions.
* gtk/gtktextview.c:
- Handle passing the necessary PangoContext to the layout
- Some fixups in painting to deal with the automatic backing store
and offsetting of GTK+-1.4
- Add a style_set handler so that the default style reacts
properly to theme changes.
* gtk/gtktext?*.[ch]: Random code-style fixes.
* gtk/testtext.c: Substitute in languages that Pango handles now for Thai
Mon Apr 10 10:33:45 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktext?*.[ch]: Check in Havoc's port of the Tk text widget,
in original form preparatory to Pango-ization and gdkimcontext-ization.
Thu Apr 6 19:25:39 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimcontext.c: Move default implementations to real_* vfuncs,
so that we can derive from gtkimcontext in language bindings properly.
Thu Apr 6 16:02:52 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimcontextsimple.[ch]: Use gdk_keyval_to_unicode to gdk_unicode_to_keyval.
Add a compose table including (almost) all the compose combinations
from X. This is 6k of static, shared data as opposed to 50k or so of dynamic
data in the XIM implementation.
* gdk/gdk.h gdk/gdkkeyuni.c gdk/win32/gdkevents-win32.c (gdk_keyval_to_unicode, gdk_unicode_to_keyval):
Moved functions to convert keyvalues from and to unicode here from
the win32 port and made them public.
Wed Apr 5 16:37:29 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkeditable.c (gtk_editable_insert_text): Allow new_text_length == -1.
Wed Apr 5 16:27:45 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimcontext.[ch]: Base class for new input context system
* gtk/gtkimmulticontext.[ch]: Proxy input context that allows
the real input context implementation to be loaded from modules
and switched on the fly.
* gtk/gtkcontextsimple.[ch]: Simple implementation of an input
context that just does direct keysymbol => unicode translation.
* gtk/gtkentry.[ch]: Start switching editing over to using
GtkInputContext. (No handling of preedit yet.)
Wed Apr 5 15:48:41 2000 Owen Taylor <otaylor@redhat.com>
* gtk/gtktypeutils.h (GTK_CHECK_GET_CLASS): Fix problem with one too
many substitutions. (klass should not be subsituted.)
Wed Apr 5 00:18:14 2000 Owen Taylor <otaylor@redhat.com>
* configure.in: Add checks for Pango
* configure.in docs/Makefile.am: Add test for sgml2html
and allow 'make dist' without building html, but print out
warnings in that case. (For making snapshots)
* gdk/Makefile.am gdk/x11/Makefile.am gtk/Makefile.am:
Add Pango libraries and C flags
* gdk/gdkdraw.c gdk/gdkdrawable.h gdkwindow.c gdk/x11/gdkdrawable-x11.c:
Add function (gdk_draw_layout) to draw a pango layout.
* gdk/gdkpango.h gdk/x11/gdkpango-x11.c: New file with functions
for getting Pango contexts for GDK.
* gtk/gtkeditable.c: Get rid of dead code gtk_editable_parent_set()
* gtk/gtkentry.[ch]: Complete rewrite to use Pango, add bidirectional
editing.
* gtk/gtkentry.c: Hack in simple Hebrew input with direct
keysym => unicode translations. More languages can be added
here, but real input-method support is needed.
* docs/Changes-1.4.txt: Added note about entry behavior.
* gtk/gtkenums.h gtk/gtkwidget.[ch] testgtk.c gtkprivate.h: Add functions
to set the reading direction for a widget and the global direction.
Add test which allows toggling the global direction. Two private
flags are used to store the direction. (GTK_DIRECTION_SET + GTK_DIRECTION_LTR)
* gtk/gtkcheckbutton.c gtk/gtkframe.c gtk/gtkhbbox.c gtk/gtkhbox.c
gtk/gtkradiobutton.c gtk/gtkspinbutton.c gtk/gtktable.c
* gtk/gtk[hv]scale.c gtk/gtkscale.[ch]: Draw numbers using Pango
* gtk/gtklabel.[ch]: Moved to Pango and considerably rewritten. Line breaking,
underlining now handled by Pango.
* gtk/gtkstyle.[ch] gtk/gtkrc.[ch]: Add a PangoFontDescription
to RCStyle and Style. (Having both this and the old font name and GdkFont
is temporary.)
* gtk/gtkwidget.[ch] (gtk_widget_create_pango_{context,layout}): Added
convenience functions for creating contexts and layouts for widgets.
* gtk/testgtk.c: Enhance label tests with multilingual labels.
2000-06-02 03:14:07 +00:00
|
|
|
rect = &window_rect;
|
|
|
|
}
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
|
2000-12-15 01:46:41 +00:00
|
|
|
region = gdk_region_rectangle (rect);
|
2009-11-04 13:03:04 +00:00
|
|
|
gdk_window_invalidate_region_full (window, region, invalidate_children, clear_bg);
|
2000-12-15 01:46:41 +00:00
|
|
|
gdk_region_destroy (region);
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
2009-11-04 13:03:04 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_invalidate_rect:
|
|
|
|
* @window: a #GdkWindow
|
2010-02-19 16:53:17 +00:00
|
|
|
* @rect: (allow-none): rectangle to invalidate or %NULL to invalidate the whole
|
2009-11-04 13:03:04 +00:00
|
|
|
* window
|
|
|
|
* @invalidate_children: whether to also invalidate child windows
|
|
|
|
*
|
|
|
|
* A convenience wrapper around gdk_window_invalidate_region() which
|
|
|
|
* invalidates a rectangular region. See
|
|
|
|
* gdk_window_invalidate_region() for details.
|
|
|
|
**/
|
|
|
|
void
|
|
|
|
gdk_window_invalidate_rect (GdkWindow *window,
|
|
|
|
const GdkRectangle *rect,
|
|
|
|
gboolean invalidate_children)
|
|
|
|
{
|
|
|
|
gdk_window_invalidate_rect_full (window, rect, invalidate_children, CLEAR_BG_NONE);
|
|
|
|
}
|
|
|
|
|
2002-02-18 03:29:00 +00:00
|
|
|
static void
|
2008-01-14 14:02:12 +00:00
|
|
|
draw_ugly_color (GdkWindow *window,
|
2009-06-01 10:04:36 +00:00
|
|
|
const GdkRegion *region)
|
2002-02-18 03:29:00 +00:00
|
|
|
{
|
|
|
|
/* Draw ugly color all over the newly-invalid region */
|
|
|
|
GdkColor ugly_color = { 0, 50000, 10000, 10000 };
|
|
|
|
GdkGC *ugly_gc;
|
|
|
|
GdkRectangle clipbox;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2002-02-18 03:29:00 +00:00
|
|
|
ugly_gc = gdk_gc_new (window);
|
|
|
|
gdk_gc_set_rgb_fg_color (ugly_gc, &ugly_color);
|
|
|
|
gdk_gc_set_clip_region (ugly_gc, region);
|
|
|
|
|
|
|
|
gdk_region_get_clipbox (region, &clipbox);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2002-02-18 03:29:00 +00:00
|
|
|
gdk_draw_rectangle (window,
|
2002-09-25 07:23:55 +00:00
|
|
|
ugly_gc,
|
|
|
|
TRUE,
|
|
|
|
clipbox.x, clipbox.y,
|
|
|
|
clipbox.width, clipbox.height);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2002-09-25 07:23:55 +00:00
|
|
|
g_object_unref (ugly_gc);
|
2002-02-18 03:29:00 +00:00
|
|
|
}
|
|
|
|
|
2009-09-14 11:28:38 +00:00
|
|
|
static void
|
|
|
|
impl_window_add_update_area (GdkWindowObject *impl_window,
|
|
|
|
GdkRegion *region)
|
|
|
|
{
|
|
|
|
if (impl_window->update_area)
|
|
|
|
gdk_region_union (impl_window->update_area, region);
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gdk_window_add_update_window ((GdkWindow *)impl_window);
|
|
|
|
impl_window->update_area = gdk_region_copy (region);
|
|
|
|
gdk_window_schedule_update ((GdkWindow *)impl_window);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-11-04 13:03:04 +00:00
|
|
|
/* clear_bg controls if the region will be cleared to
|
|
|
|
* the background color/pixmap if the exposure mask is not
|
|
|
|
* set for the window, whereas this might not otherwise be
|
|
|
|
* done (unless necessary to emulate background settings).
|
|
|
|
* Set this to CLEAR_BG_WINCLEARED or CLEAR_BG_ALL if you
|
|
|
|
* need to clear the background, such as when exposing the area beneath a
|
|
|
|
* hidden or moved window, but not when an app requests repaint or when the
|
|
|
|
* windowing system exposes a newly visible area (because then the windowing
|
|
|
|
* system has already cleared the area).
|
|
|
|
*/
|
|
|
|
static void
|
|
|
|
gdk_window_invalidate_maybe_recurse_full (GdkWindow *window,
|
|
|
|
const GdkRegion *region,
|
|
|
|
ClearBg clear_bg,
|
|
|
|
gboolean (*child_func) (GdkWindow *,
|
|
|
|
gpointer),
|
|
|
|
gpointer user_data)
|
2000-03-28 01:24:44 +00:00
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkWindowObject *impl_window;
|
2000-12-15 01:46:41 +00:00
|
|
|
GdkRegion *visible_region;
|
2005-03-28 20:28:43 +00:00
|
|
|
GList *tmp_list;
|
2000-03-28 01:24:44 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
2000-05-15 16:09:53 +00:00
|
|
|
return;
|
2009-05-27 15:08:09 +00:00
|
|
|
|
|
|
|
if (private->input_only ||
|
2009-07-18 18:37:19 +00:00
|
|
|
!private->viewable ||
|
2009-08-10 12:08:37 +00:00
|
|
|
gdk_region_empty (region) ||
|
|
|
|
private->window_type == GDK_WINDOW_ROOT)
|
2000-03-28 01:24:44 +00:00
|
|
|
return;
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
visible_region = gdk_drawable_get_visible_region (window);
|
2000-12-15 01:46:41 +00:00
|
|
|
gdk_region_intersect (visible_region, region);
|
2000-03-28 01:24:44 +00:00
|
|
|
|
2005-03-28 20:28:43 +00:00
|
|
|
tmp_list = private->children;
|
|
|
|
while (tmp_list)
|
|
|
|
{
|
|
|
|
GdkWindowObject *child = tmp_list->data;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2005-03-28 20:28:43 +00:00
|
|
|
if (!child->input_only)
|
|
|
|
{
|
|
|
|
GdkRegion *child_region;
|
|
|
|
GdkRectangle child_rect;
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
child_rect.x = child->x;
|
|
|
|
child_rect.y = child->y;
|
|
|
|
child_rect.width = child->width;
|
|
|
|
child_rect.height = child->height;
|
2005-03-28 20:28:43 +00:00
|
|
|
child_region = gdk_region_rectangle (&child_rect);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2005-03-28 20:28:43 +00:00
|
|
|
/* remove child area from the invalid area of the parent */
|
2007-06-01 12:16:12 +00:00
|
|
|
if (GDK_WINDOW_IS_MAPPED (child) && !child->shaped &&
|
2008-07-18 13:03:42 +00:00
|
|
|
!child->composited &&
|
2009-06-01 10:04:36 +00:00
|
|
|
!gdk_window_is_offscreen (child))
|
2005-03-28 20:28:43 +00:00
|
|
|
gdk_region_subtract (visible_region, child_region);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2005-03-28 20:28:43 +00:00
|
|
|
if (child_func && (*child_func) ((GdkWindow *)child, user_data))
|
|
|
|
{
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkRegion *tmp = gdk_region_copy (region);
|
2008-01-14 14:02:12 +00:00
|
|
|
|
|
|
|
gdk_region_offset (tmp, - child_rect.x, - child_rect.y);
|
2005-03-28 20:28:43 +00:00
|
|
|
gdk_region_offset (child_region, - child_rect.x, - child_rect.y);
|
2008-01-14 14:02:12 +00:00
|
|
|
gdk_region_intersect (child_region, tmp);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-11-04 13:03:04 +00:00
|
|
|
gdk_window_invalidate_maybe_recurse_full ((GdkWindow *)child,
|
|
|
|
child_region, clear_bg, child_func, user_data);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-01-14 14:02:12 +00:00
|
|
|
gdk_region_destroy (tmp);
|
2005-03-28 20:28:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
gdk_region_destroy (child_region);
|
|
|
|
}
|
|
|
|
|
|
|
|
tmp_list = tmp_list->next;
|
|
|
|
}
|
2008-12-18 12:36:52 +00:00
|
|
|
|
|
|
|
impl_window = gdk_window_get_impl_window (private);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-18 12:36:52 +00:00
|
|
|
if (!gdk_region_empty (visible_region) ||
|
|
|
|
/* Even if we're not exposing anything, make sure we process
|
|
|
|
idles for windows with outstanding moves */
|
|
|
|
(impl_window->outstanding_moves != NULL &&
|
|
|
|
impl_window->update_area == NULL))
|
2000-03-28 01:24:44 +00:00
|
|
|
{
|
adapt to handle PangoColor
2001-01-26 Havoc Pennington <hp@redhat.com>
* gtk/gtktextlayout.c (convert_color): adapt to handle PangoColor
* gtk/gtktreeview.c (gtk_tree_view_widget_to_tree_coords): fix to
not offset by TREE_VIEW_HEADER_HEIGHT
(gtk_tree_view_tree_to_widget_coords): fix to not offset by
TREE_VIEW_HEADER_HEIGHT
* configure.in (included_loaders): for me, --with-included-loaders
generates the error "the specified loader yes does not exist",
i.e. the arg defaults to "yes", so change test for value ""
to test for value "yes", and include all loaders in that case.
* gtk/gtkrbtree.c (_gtk_rbtree_get_depth): new function
* gtk/gtktreeview.c (gtk_tree_view_get_cell_rect): fix to properly
handle TREE_VIEW_VERTICAL_SEPARATOR
(gtk_tree_view_bin_expose): fix to consider the row offset as
pointing halfway into vertical separator.
(gtk_tree_view_draw_node_focus_rect): ditto
* gtk/gtkdebug.h, gtk/gtkmain.c (gtk_init_check): Add
--gtk-debug=updates, which causes gdk_window_set_debug_updates
(TRUE) to be called.
* gdk/gdkwindow.c (gdk_window_set_debug_updates): Allow enabling a
debug mode where the invalid region is colored in on invalidate,
so you can see the flicker and know whether your redraw code is
doing a good job.
* gtk/gtktreeview.c (gtk_tree_view_queue_draw_node): Work in
tree window coordinates (clip rect is in tree window coords)
* gtk/Makefile.am: add gtktreednd.[hc]
* gtk/gtkliststore.c: implement gtktreednd interfaces.
* gtk/gtktreednd.c, gtk/gtktreednd.h: New interface to support
drag-and-drop data operations on a model (so we can set up tree
drag-and-drop automatically)
* gtk/testgtk.c: Add a window to change sensitivity in the
GtkLabel test; add a way to change the entry frame in GtkEntry
test
* gtk/gtkentry.c (gtk_entry_set_has_frame):
(gtk_entry_get_has_frame): new functions to remove the frame
around an entry
(gtk_entry_size_request): shrink requisition if no frame
(gtk_entry_draw_focus): don't draw frame if no frame
* gtk/gtkstyle.c (gtk_default_draw_check): draw custom look for
checks inside a cell renderer
(gtk_default_draw_option): ditto for options
* gtk/gtktreeviewcolumn.c (update_button_contents): add/remove
children from the alignment, not the button
(gtk_tree_view_column_init): ref/sink the column, to emulate
GObject refcounting.
* gtk/gtkcellrenderer.c (gtk_cell_renderer_init): ref/sink
* gtk/gtkcellrenderertoggle.c (gtk_cell_renderer_toggle_render):
Use theme functions to draw the toggles
* gdk/gdkpango.c (gdk_pango_get_gc): use GdkRGB to alloc colors
* gdk/gdkpango.h, gdk/gdkpango.c: Add GdkPangoAttrStipple and
GdkPangoAttrEmbossed to use in rendering insensitive text
* gdk/gdkpango.c (gdk_draw_layout_line): render new properties
* gtk/gtkstyle.c (gtk_default_draw_layout): handle sensitivity
using new GDK features
2001-01-26 21:12:05 +00:00
|
|
|
if (debug_updates)
|
2009-06-01 10:04:36 +00:00
|
|
|
draw_ugly_color (window, region);
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* Convert to impl coords */
|
|
|
|
gdk_region_offset (visible_region, private->abs_x, private->abs_y);
|
2009-11-04 13:03:04 +00:00
|
|
|
|
|
|
|
/* Only invalidate area if app requested expose events or if
|
|
|
|
we need to clear the area (by request or to emulate background
|
|
|
|
clearing for non-native windows or native windows with no support
|
|
|
|
for window backgrounds */
|
|
|
|
if (private->event_mask & GDK_EXPOSURE_MASK ||
|
|
|
|
clear_bg == CLEAR_BG_ALL ||
|
|
|
|
(clear_bg == CLEAR_BG_WINCLEARED &&
|
|
|
|
(!clears_as_native (private) ||
|
|
|
|
!GDK_WINDOW_IMPL_GET_IFACE (private->impl)->supports_native_bg)))
|
|
|
|
impl_window_add_update_area (impl_window, visible_region);
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
2009-05-27 15:08:09 +00:00
|
|
|
|
2001-01-22 14:35:49 +00:00
|
|
|
gdk_region_destroy (visible_region);
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
2009-11-04 13:03:04 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_invalidate_maybe_recurse:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @region: a #GdkRegion
|
|
|
|
* @child_func: function to use to decide if to recurse to a child,
|
|
|
|
* %NULL means never recurse.
|
|
|
|
* @user_data: data passed to @child_func
|
|
|
|
*
|
|
|
|
* Adds @region to the update area for @window. The update area is the
|
|
|
|
* region that needs to be redrawn, or "dirty region." The call
|
|
|
|
* gdk_window_process_updates() sends one or more expose events to the
|
|
|
|
* window, which together cover the entire update area. An
|
|
|
|
* application would normally redraw the contents of @window in
|
|
|
|
* response to those expose events.
|
|
|
|
*
|
|
|
|
* GDK will call gdk_window_process_all_updates() on your behalf
|
|
|
|
* whenever your program returns to the main loop and becomes idle, so
|
|
|
|
* normally there's no need to do that manually, you just need to
|
|
|
|
* invalidate regions that you know should be redrawn.
|
|
|
|
*
|
|
|
|
* The @child_func parameter controls whether the region of
|
|
|
|
* each child window that intersects @region will also be invalidated.
|
|
|
|
* Only children for which @child_func returns TRUE will have the area
|
|
|
|
* invalidated.
|
|
|
|
**/
|
|
|
|
void
|
|
|
|
gdk_window_invalidate_maybe_recurse (GdkWindow *window,
|
|
|
|
const GdkRegion *region,
|
|
|
|
gboolean (*child_func) (GdkWindow *,
|
|
|
|
gpointer),
|
|
|
|
gpointer user_data)
|
|
|
|
{
|
|
|
|
gdk_window_invalidate_maybe_recurse_full (window, region, CLEAR_BG_NONE,
|
|
|
|
child_func, user_data);
|
|
|
|
}
|
|
|
|
|
2007-08-08 22:30:26 +00:00
|
|
|
static gboolean
|
|
|
|
true_predicate (GdkWindow *window,
|
|
|
|
gpointer user_data)
|
|
|
|
{
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2009-11-04 13:03:04 +00:00
|
|
|
static void
|
|
|
|
gdk_window_invalidate_region_full (GdkWindow *window,
|
|
|
|
const GdkRegion *region,
|
|
|
|
gboolean invalidate_children,
|
|
|
|
ClearBg clear_bg)
|
|
|
|
{
|
|
|
|
gdk_window_invalidate_maybe_recurse_full (window, region, clear_bg,
|
|
|
|
invalidate_children ?
|
|
|
|
true_predicate : (gboolean (*) (GdkWindow *, gpointer))NULL,
|
|
|
|
NULL);
|
|
|
|
}
|
|
|
|
|
2001-11-04 22:57:03 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_invalidate_region:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @region: a #GdkRegion
|
2009-06-01 10:04:36 +00:00
|
|
|
* @invalidate_children: %TRUE to also invalidate child windows
|
2001-11-04 22:57:03 +00:00
|
|
|
*
|
|
|
|
* Adds @region to the update area for @window. The update area is the
|
|
|
|
* region that needs to be redrawn, or "dirty region." The call
|
|
|
|
* gdk_window_process_updates() sends one or more expose events to the
|
|
|
|
* window, which together cover the entire update area. An
|
|
|
|
* application would normally redraw the contents of @window in
|
|
|
|
* response to those expose events.
|
|
|
|
*
|
|
|
|
* GDK will call gdk_window_process_all_updates() on your behalf
|
|
|
|
* whenever your program returns to the main loop and becomes idle, so
|
|
|
|
* normally there's no need to do that manually, you just need to
|
|
|
|
* invalidate regions that you know should be redrawn.
|
|
|
|
*
|
|
|
|
* The @invalidate_children parameter controls whether the region of
|
|
|
|
* each child window that intersects @region will also be invalidated.
|
|
|
|
* If %FALSE, then the update area for child windows will remain
|
|
|
|
* unaffected. See gdk_window_invalidate_maybe_recurse if you need
|
|
|
|
* fine grained control over which children are invalidated.
|
|
|
|
**/
|
|
|
|
void
|
2008-01-14 14:02:12 +00:00
|
|
|
gdk_window_invalidate_region (GdkWindow *window,
|
|
|
|
const GdkRegion *region,
|
|
|
|
gboolean invalidate_children)
|
2001-11-04 22:57:03 +00:00
|
|
|
{
|
|
|
|
gdk_window_invalidate_maybe_recurse (window, region,
|
|
|
|
invalidate_children ?
|
2009-06-01 10:04:36 +00:00
|
|
|
true_predicate : (gboolean (*) (GdkWindow *, gpointer))NULL,
|
2001-11-04 22:57:03 +00:00
|
|
|
NULL);
|
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/**
|
|
|
|
* _gdk_window_invalidate_for_expose:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @region: a #GdkRegion
|
|
|
|
*
|
|
|
|
* Adds @region to the update area for @window. The update area is the
|
|
|
|
* region that needs to be redrawn, or "dirty region." The call
|
|
|
|
* gdk_window_process_updates() sends one or more expose events to the
|
|
|
|
* window, which together cover the entire update area. An
|
|
|
|
* application would normally redraw the contents of @window in
|
|
|
|
* response to those expose events.
|
|
|
|
*
|
|
|
|
* GDK will call gdk_window_process_all_updates() on your behalf
|
|
|
|
* whenever your program returns to the main loop and becomes idle, so
|
|
|
|
* normally there's no need to do that manually, you just need to
|
|
|
|
* invalidate regions that you know should be redrawn.
|
|
|
|
*
|
|
|
|
* This version of invalidation is used when you recieve expose events
|
|
|
|
* from the native window system. It exposes the native window, plus
|
|
|
|
* any non-native child windows (but not native child windows, as those would
|
2009-06-01 10:04:36 +00:00
|
|
|
* have gotten their own expose events).
|
2008-07-18 13:03:42 +00:00
|
|
|
**/
|
|
|
|
void
|
|
|
|
_gdk_window_invalidate_for_expose (GdkWindow *window,
|
2009-08-13 11:13:47 +00:00
|
|
|
GdkRegion *region)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
2009-08-13 11:13:47 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *) window;
|
|
|
|
GdkWindowRegionMove *move;
|
|
|
|
GdkRegion *move_region;
|
|
|
|
GList *l;
|
|
|
|
|
|
|
|
/* Any invalidations comming from the windowing system will
|
|
|
|
be in areas that may be moved by outstanding moves,
|
|
|
|
so we need to modify the expose region correspondingly,
|
|
|
|
otherwise we would expose in the wrong place, as the
|
|
|
|
outstanding moves will be copied before we draw the
|
|
|
|
exposes. */
|
|
|
|
for (l = private->outstanding_moves; l != NULL; l = l->next)
|
|
|
|
{
|
|
|
|
move = l->data;
|
|
|
|
|
|
|
|
/* covert to move source region */
|
|
|
|
move_region = gdk_region_copy (move->dest_region);
|
|
|
|
gdk_region_offset (move_region, -move->dx, -move->dy);
|
|
|
|
|
|
|
|
/* Move area of region that intersects with move source
|
|
|
|
by dx, dy of the move*/
|
|
|
|
gdk_region_intersect (move_region, region);
|
|
|
|
gdk_region_subtract (region, move_region);
|
|
|
|
gdk_region_offset (move_region, move->dx, move->dy);
|
|
|
|
gdk_region_union (region, move_region);
|
|
|
|
|
|
|
|
gdk_region_destroy (move_region);
|
|
|
|
}
|
|
|
|
|
2009-11-04 13:03:04 +00:00
|
|
|
gdk_window_invalidate_maybe_recurse_full (window, region, CLEAR_BG_WINCLEARED,
|
|
|
|
(gboolean (*) (GdkWindow *, gpointer))gdk_window_has_no_impl,
|
|
|
|
NULL);
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2001-02-20 05:21:44 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_get_update_area:
|
|
|
|
* @window: a #GdkWindow
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-02-20 05:21:44 +00:00
|
|
|
* Transfers ownership of the update area from @window to the caller
|
|
|
|
* of the function. That is, after calling this function, @window will
|
|
|
|
* no longer have an invalid/dirty region; the update area is removed
|
|
|
|
* from @window and handed to you. If a window has no update area,
|
|
|
|
* gdk_window_get_update_area() returns %NULL. You are responsible for
|
|
|
|
* calling gdk_region_destroy() on the returned region if it's non-%NULL.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-02-20 05:21:44 +00:00
|
|
|
* Return value: the update area for @window
|
|
|
|
**/
|
2000-03-28 01:24:44 +00:00
|
|
|
GdkRegion *
|
|
|
|
gdk_window_get_update_area (GdkWindow *window)
|
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkWindowObject *impl_window;
|
2000-03-28 01:24:44 +00:00
|
|
|
GdkRegion *tmp_region;
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
impl_window = gdk_window_get_impl_window (private);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (impl_window->update_area)
|
2000-03-28 01:24:44 +00:00
|
|
|
{
|
2008-07-18 13:03:42 +00:00
|
|
|
tmp_region = gdk_region_copy (private->clip_region_with_children);
|
|
|
|
/* Convert to impl coords */
|
|
|
|
gdk_region_offset (tmp_region, private->abs_x, private->abs_y);
|
|
|
|
gdk_region_intersect (tmp_region, impl_window->update_area);
|
2000-03-28 01:24:44 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (gdk_region_empty (tmp_region))
|
|
|
|
{
|
|
|
|
gdk_region_destroy (tmp_region);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gdk_region_subtract (impl_window->update_area, tmp_region);
|
|
|
|
|
2008-12-18 13:29:28 +00:00
|
|
|
if (gdk_region_empty (impl_window->update_area) &&
|
|
|
|
impl_window->outstanding_moves == NULL)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
gdk_region_destroy (impl_window->update_area);
|
|
|
|
impl_window->update_area = NULL;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_window_remove_update_window ((GdkWindow *)impl_window);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* Convert from impl coords */
|
|
|
|
gdk_region_offset (tmp_region, -private->abs_x, -private->abs_y);
|
|
|
|
return tmp_region;
|
|
|
|
|
|
|
|
}
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2000-05-15 16:09:53 +00:00
|
|
|
/**
|
|
|
|
* _gdk_window_clear_update_area:
|
|
|
|
* @window: a #GdkWindow.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2000-05-15 16:09:53 +00:00
|
|
|
* Internal function to clear the update area for a window. This
|
|
|
|
* is called when the window is hidden or destroyed.
|
|
|
|
**/
|
|
|
|
void
|
|
|
|
_gdk_window_clear_update_area (GdkWindow *window)
|
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
2000-05-15 16:09:53 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
if (private->update_area)
|
|
|
|
{
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_window_remove_update_window (window);
|
|
|
|
|
2000-05-15 16:09:53 +00:00
|
|
|
gdk_region_destroy (private->update_area);
|
|
|
|
private->update_area = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_freeze_updates:
|
|
|
|
* @window: a #GdkWindow
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
* Temporarily freezes a window such that it won't receive expose
|
|
|
|
* events. The window will begin receiving expose events again when
|
|
|
|
* gdk_window_thaw_updates() is called. If gdk_window_freeze_updates()
|
|
|
|
* has been called more than once, gdk_window_thaw_updates() must be called
|
|
|
|
* an equal number of times to begin processing exposes.
|
|
|
|
**/
|
2000-03-28 01:24:44 +00:00
|
|
|
void
|
|
|
|
gdk_window_freeze_updates (GdkWindow *window)
|
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkWindowObject *impl_window;
|
2000-03-28 01:24:44 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
impl_window = gdk_window_get_impl_window (private);
|
|
|
|
impl_window->update_freeze_count++;
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_thaw_updates:
|
|
|
|
* @window: a #GdkWindow
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
* Thaws a window frozen with gdk_window_freeze_updates().
|
|
|
|
**/
|
2000-03-28 01:24:44 +00:00
|
|
|
void
|
|
|
|
gdk_window_thaw_updates (GdkWindow *window)
|
|
|
|
{
|
Make this compile without framebuffer enabled
2000-06-20 Havoc Pennington <hp@redhat.com>
* modules/linux-fb/Makefile.am: Make this compile
without framebuffer enabled
* gdk/linux-fb/Makefile.am: Add conditional to not build
framebuffer unless specified in configure
* gdk/gdkdraw.c (gdk_draw_drawable): Fix bug where I was getting
the size of the target instead of source if -1 was passed for
width/height
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position): Fix
width/height confusion.
2000-06-19 Havoc Pennington <hp@redhat.com>
* gdk/x11/gdkx.h (GDK_WINDOW_XWINDOW): change this to be
GDK_DRAWABLE_XID. In the future, we probably want to make it
faster with G_DISABLE_CHECKS turned on.
2000-06-14 Havoc Pennington <hp@redhat.com>
* gdk/Makefile.am: add gdkpixmap.c
* gdk/gdk.c: s/gdk_window_init/_gdk_windowing_window_init/
s/gdk_image_init/_gdk_windowing_image_init
* gdk/gdkcolor.c: make ref/unref compat wrappers for GObject
ref/unref
* gdk/gdkcolor.h: make GdkColormap a GObject subclass
* gdk/gdkcompat.h: remove GdkWindowType compat, since
GdkWindowType is now non-deprecated;
change gdk_window_get_type() compat to be
gdk_window_get_window_type().
* gdk/gdkdnd.h: make GdkDragContext a GObject.
* gdk/gdkdraw.c, gdk/gdkdraw.h: Convert GdkDrawable to a pure
virtual GObject. Make all functions call into the vtable.
Move gdk_image_put() guts in here. Remove GdkDrawableType
and gdk_drawable_get_type(), these are now GdkWindow-specific.
draw_image, get_depth, get_size, set_colormap, get_colormap,
get_visual added to the vtable.
* gdk/gdkgc.h, gdk/gdkgc.c: Convert GdkGC to a pure virtual
GObject. Virtualize everything.
(gdk_gc_new_with_values): remove check for destroyed window,
because now GdkWindow::create_gc will check this.
(gdk_gc_set_values): New function to set GC values, this
was already implemented but wasn't in the header
* gdk/gdkimage.h, gdk/gdkimage.c: Convert GdkImage to a GObject.
* gdk/gdkinternals.h: Remove _gdk_window_alloc(), remove
_gdk_window_draw_image(), remove _gdk_windowing_window_class,
remove _gdk_window_class; add _gdk_window_impl_get_type() and
_gdk_pixmap_impl_get_type(). Rename gdk_window_init to
_gdk_windowing_window_init, rename gdk_image_init to
_gdk_windowing_image_init.
* gdk/gdkpango.c: Reflect GObject-ification of PangoContext.
(gdk_draw_layout): Remove check for destroyed window,
because all the drawable methods already check it.
* gdk/gdkpixmap.h, gdk/gdkpixmap.c: Convert GdkPixmap to GObject.
Add gdkpixmap.c which contains implementation of GdkDrawable
virtual table (by chaining to a platform-specific implementation
object).
* gdk/gdkprivate.h: Remove GDK_IS_WINDOW, GDK_IS_PIXMAP,
GDK_DRAWABLE_DESTROYED. Add GDK_WINDOW_DESTROYED. Replace
GDK_DRAWABLE_TYPE with GDK_WINDOW_TYPE. Remove GdkDrawablePrivate,
GdkWindowPrivate, GdkImageClass, GdkImagePrivate, GdkGCPrivate,
GdkColormapPrivate.
* gdk/gdktypes.h: #include <glib-object.h>
* gdk/gdkwindow.h, gdk/gdkwindow.c: Convert GdkWindow to GObject.
Move most functionality to platform-specific implementation
object. GdkWindow itself now handles the backing store, then
chains to the platform-specific implementation.
(gdk_window_get_window_type): return GdkWindowType of the window.
(gdk_window_peek_children): New routine, returns the children of
a GdkWindow
(gdk_window_get_children): Was in X11-specific code and did
XQueryTree. Changed to simply return a copy of window->children;
so it can go in cross-platform code.
* gdk/x11/Makefile.am: fix broken MKINSTALLDIRS path
* gdk/x11/gdkcolor-x11.c: implement X-specific parts of
GdkColormap; just changed to use the new private data instead
of casting to GdkColormapPrivate.
* gdk/x11/gdkcursor-x11.c: added a couple typechecks to
gdk_cursor_new().
* gdk/x11/gdkdnd-x11.c: Change the way we access private fields
(private data member in the GObject).
(xdnd_manager_source_filter): Function had broken
error handling, fix it (use gdk_error_trap_push).
* gdk/x11/gdkdrawable-x11.c: This file now implements
a base class for GdkWindowImplX11/GdkPixmapImplX11. This
base class is purely for the convenience of the X port,
and not part of the interface to cross-platform GDK.
* gdk/x11/gdkevents-x11.c: Reflect various renamings.
* gdk/x11/gdkgc-x11.c: Implement a subclass of GdkGC that's
specific to X, and returned by the create_gc virtual method
of GdkDrawableImplX11.
(gdk_x11_gc_set_dashes): Change this to take an array of gint8
rather than gchar, this was also changed in the GdkGC vtable.
(gdk_x11_gc_values_to_xvalues): If GdkGCValues is NULL, or the
mask is 0, return immediately, instead of checking every flag.
This is faster, and keeps us from segfaulting if values is NULL
and the mask contains some nonzero flags.
* gdk/x11/gdkgeometry-x11.c: deal with all the rearranging of
GdkWindow.
* gdk/x11/gdkglobals-x11.c: change type of grab window, since
GdkWindowPrivate is gone.
* gdk/x11/gdkim-x11.c: rename things that got renamed.
* gdk/x11/gdkimage-x11.c: implement in terms of GObject, and
remove the image_put stuff that got transferred to GdkDrawable.
* gdk/x11/gdkinput.c: renamings
* gdk/x11/gdkmain-x11.c: #include <pango/pangox.h>
* gdk/x11/gdkpixmap-x11.c: GObject conversion
* gdk/x11/gdkprivate-x11.h: indentation fixes
* gdk/x11/gdkproperty-x11.c: renamings
* gdk/x11/gdkselection-x11.c: renamings
* gdk/x11/gdkwindow-x11.c: Restructuring and renaming; this now
implements the platform-specific "impl" object.
Moved gdk_window_get_children to gdk/gdkwindow.c
* gdk/x11/gdkx.h: Remove all the private structs and private datas
that no longer exist. Add declaration of GdkGCX11 object here.
Fix all the macros to still work.
* gtk/gtk-boxed.defs: Remove GtkStyle, GdkColormap, GdkWindow,
GdkDragContext from the boxed types since they are now GObjects.
* gtk/gtkstyle.h, gtk/gtkstyle.c: Converted GtkStyle to a GObject,
moved xthickness/ythickness into the instance. GtkStyleClass
functions are now in the standard vtable for GtkStyle, so you have
to create a GObject subclass to write a theme engine.
(gtk_style_copy): fixed a leaked PangoFontDescription
(gtk_style_init): renamed gtk_style_realize, so gtk_style_init
can be the standard GObject function.
* Throughout GTK:
s/style->klass->[xy]thickness/style->[xy]thickness
s/pango_layout_unref/g_object_unref/
* gtk/gtkrc.h, gtk/gtkrc.c: Converted GtkRcStyle to a GObject.
* gtk/gtksocket.c: Use gdk_window_get_user_data() instead of
accessing GDK internals.
* gtk/gtkwidget.c: Use gdk_window_peek_children() instead of
accessing GDK internals.
2000-06-20 21:04:44 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkWindowObject *impl_window;
|
2000-03-28 01:24:44 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
impl_window = gdk_window_get_impl_window (private);
|
2009-02-04 15:36:33 +00:00
|
|
|
|
|
|
|
g_return_if_fail (impl_window->update_freeze_count > 0);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (--impl_window->update_freeze_count == 0)
|
|
|
|
gdk_window_schedule_update (GDK_WINDOW (impl_window));
|
2000-03-28 01:24:44 +00:00
|
|
|
}
|
|
|
|
|
2007-09-12 17:13:24 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_freeze_toplevel_updates_libgtk_only:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
*
|
|
|
|
* Temporarily freezes a window and all its descendants such that it won't
|
|
|
|
* receive expose events. The window will begin receiving expose events
|
|
|
|
* again when gdk_window_thaw_toplevel_updates_libgtk_only() is called. If
|
|
|
|
* gdk_window_freeze_toplevel_updates_libgtk_only()
|
|
|
|
* has been called more than once,
|
|
|
|
* gdk_window_thaw_toplevel_updates_libgtk_only() must be called
|
|
|
|
* an equal number of times to begin processing exposes.
|
|
|
|
*
|
|
|
|
* This function is not part of the GDK public API and is only
|
|
|
|
* for use by GTK+.
|
|
|
|
**/
|
|
|
|
void
|
|
|
|
gdk_window_freeze_toplevel_updates_libgtk_only (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
g_return_if_fail (private->window_type != GDK_WINDOW_CHILD);
|
|
|
|
|
|
|
|
private->update_and_descendants_freeze_count++;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_thaw_toplevel_updates_libgtk_only:
|
|
|
|
* @window: a #GdkWindow
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2007-09-12 17:13:24 +00:00
|
|
|
* Thaws a window frozen with
|
|
|
|
* gdk_window_freeze_toplevel_updates_libgtk_only().
|
|
|
|
*
|
|
|
|
* This function is not part of the GDK public API and is only
|
|
|
|
* for use by GTK+.
|
|
|
|
**/
|
|
|
|
void
|
|
|
|
gdk_window_thaw_toplevel_updates_libgtk_only (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
g_return_if_fail (private->window_type != GDK_WINDOW_CHILD);
|
|
|
|
g_return_if_fail (private->update_and_descendants_freeze_count > 0);
|
|
|
|
|
|
|
|
private->update_and_descendants_freeze_count--;
|
|
|
|
|
|
|
|
gdk_window_schedule_update (window);
|
|
|
|
}
|
|
|
|
|
2001-02-20 05:21:44 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_set_debug_updates:
|
|
|
|
* @setting: %TRUE to turn on update debugging
|
|
|
|
*
|
|
|
|
* With update debugging enabled, calls to
|
|
|
|
* gdk_window_invalidate_region() clear the invalidated region of the
|
|
|
|
* screen to a noticeable color, and GDK pauses for a short time
|
|
|
|
* before sending exposes to windows during
|
|
|
|
* gdk_window_process_updates(). The net effect is that you can see
|
|
|
|
* the invalid region for each window and watch redraws as they
|
|
|
|
* occur. This allows you to diagnose inefficiencies in your application.
|
|
|
|
*
|
|
|
|
* In essence, because the GDK rendering model prevents all flicker,
|
|
|
|
* if you are redrawing the same region 400 times you may never
|
|
|
|
* notice, aside from noticing a speed problem. Enabling update
|
|
|
|
* debugging causes GTK to flicker slowly and noticeably, so you can
|
|
|
|
* see exactly what's being redrawn when, in what order.
|
|
|
|
*
|
|
|
|
* The --gtk-debug=updates command line option passed to GTK+ programs
|
|
|
|
* enables this debug option at application startup time. That's
|
|
|
|
* usually more useful than calling gdk_window_set_debug_updates()
|
|
|
|
* yourself, though you might want to use this function to enable
|
|
|
|
* updates sometime after application startup time.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-02-20 05:21:44 +00:00
|
|
|
**/
|
adapt to handle PangoColor
2001-01-26 Havoc Pennington <hp@redhat.com>
* gtk/gtktextlayout.c (convert_color): adapt to handle PangoColor
* gtk/gtktreeview.c (gtk_tree_view_widget_to_tree_coords): fix to
not offset by TREE_VIEW_HEADER_HEIGHT
(gtk_tree_view_tree_to_widget_coords): fix to not offset by
TREE_VIEW_HEADER_HEIGHT
* configure.in (included_loaders): for me, --with-included-loaders
generates the error "the specified loader yes does not exist",
i.e. the arg defaults to "yes", so change test for value ""
to test for value "yes", and include all loaders in that case.
* gtk/gtkrbtree.c (_gtk_rbtree_get_depth): new function
* gtk/gtktreeview.c (gtk_tree_view_get_cell_rect): fix to properly
handle TREE_VIEW_VERTICAL_SEPARATOR
(gtk_tree_view_bin_expose): fix to consider the row offset as
pointing halfway into vertical separator.
(gtk_tree_view_draw_node_focus_rect): ditto
* gtk/gtkdebug.h, gtk/gtkmain.c (gtk_init_check): Add
--gtk-debug=updates, which causes gdk_window_set_debug_updates
(TRUE) to be called.
* gdk/gdkwindow.c (gdk_window_set_debug_updates): Allow enabling a
debug mode where the invalid region is colored in on invalidate,
so you can see the flicker and know whether your redraw code is
doing a good job.
* gtk/gtktreeview.c (gtk_tree_view_queue_draw_node): Work in
tree window coordinates (clip rect is in tree window coords)
* gtk/Makefile.am: add gtktreednd.[hc]
* gtk/gtkliststore.c: implement gtktreednd interfaces.
* gtk/gtktreednd.c, gtk/gtktreednd.h: New interface to support
drag-and-drop data operations on a model (so we can set up tree
drag-and-drop automatically)
* gtk/testgtk.c: Add a window to change sensitivity in the
GtkLabel test; add a way to change the entry frame in GtkEntry
test
* gtk/gtkentry.c (gtk_entry_set_has_frame):
(gtk_entry_get_has_frame): new functions to remove the frame
around an entry
(gtk_entry_size_request): shrink requisition if no frame
(gtk_entry_draw_focus): don't draw frame if no frame
* gtk/gtkstyle.c (gtk_default_draw_check): draw custom look for
checks inside a cell renderer
(gtk_default_draw_option): ditto for options
* gtk/gtktreeviewcolumn.c (update_button_contents): add/remove
children from the alignment, not the button
(gtk_tree_view_column_init): ref/sink the column, to emulate
GObject refcounting.
* gtk/gtkcellrenderer.c (gtk_cell_renderer_init): ref/sink
* gtk/gtkcellrenderertoggle.c (gtk_cell_renderer_toggle_render):
Use theme functions to draw the toggles
* gdk/gdkpango.c (gdk_pango_get_gc): use GdkRGB to alloc colors
* gdk/gdkpango.h, gdk/gdkpango.c: Add GdkPangoAttrStipple and
GdkPangoAttrEmbossed to use in rendering insensitive text
* gdk/gdkpango.c (gdk_draw_layout_line): render new properties
* gtk/gtkstyle.c (gtk_default_draw_layout): handle sensitivity
using new GDK features
2001-01-26 21:12:05 +00:00
|
|
|
void
|
|
|
|
gdk_window_set_debug_updates (gboolean setting)
|
|
|
|
{
|
|
|
|
debug_updates = setting;
|
|
|
|
}
|
2001-02-20 05:21:44 +00:00
|
|
|
|
2001-03-29 21:17:45 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_constrain_size:
|
|
|
|
* @geometry: a #GdkGeometry structure
|
|
|
|
* @flags: a mask indicating what portions of @geometry are set
|
|
|
|
* @width: desired width of window
|
|
|
|
* @height: desired height of the window
|
|
|
|
* @new_width: location to store resulting width
|
|
|
|
* @new_height: location to store resulting height
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
|
|
|
* Constrains a desired width and height according to a
|
2001-03-29 21:17:45 +00:00
|
|
|
* set of geometry hints (such as minimum and maximum size).
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
gdk_window_constrain_size (GdkGeometry *geometry,
|
|
|
|
guint flags,
|
|
|
|
gint width,
|
|
|
|
gint height,
|
|
|
|
gint *new_width,
|
|
|
|
gint *new_height)
|
|
|
|
{
|
|
|
|
/* This routine is partially borrowed from fvwm.
|
|
|
|
*
|
|
|
|
* Copyright 1993, Robert Nation
|
|
|
|
* You may use this code for any purpose, as long as the original
|
|
|
|
* copyright remains in the source code and all documentation
|
|
|
|
*
|
|
|
|
* which in turn borrows parts of the algorithm from uwm
|
|
|
|
*/
|
|
|
|
gint min_width = 0;
|
|
|
|
gint min_height = 0;
|
|
|
|
gint base_width = 0;
|
|
|
|
gint base_height = 0;
|
|
|
|
gint xinc = 1;
|
|
|
|
gint yinc = 1;
|
|
|
|
gint max_width = G_MAXINT;
|
|
|
|
gint max_height = G_MAXINT;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2001-03-29 21:17:45 +00:00
|
|
|
#define FLOOR(value, base) ( ((gint) ((value) / (base))) * (base) )
|
|
|
|
|
|
|
|
if ((flags & GDK_HINT_BASE_SIZE) && (flags & GDK_HINT_MIN_SIZE))
|
|
|
|
{
|
|
|
|
base_width = geometry->base_width;
|
|
|
|
base_height = geometry->base_height;
|
|
|
|
min_width = geometry->min_width;
|
|
|
|
min_height = geometry->min_height;
|
|
|
|
}
|
|
|
|
else if (flags & GDK_HINT_BASE_SIZE)
|
|
|
|
{
|
|
|
|
base_width = geometry->base_width;
|
|
|
|
base_height = geometry->base_height;
|
|
|
|
min_width = geometry->base_width;
|
|
|
|
min_height = geometry->base_height;
|
|
|
|
}
|
|
|
|
else if (flags & GDK_HINT_MIN_SIZE)
|
|
|
|
{
|
|
|
|
base_width = geometry->min_width;
|
|
|
|
base_height = geometry->min_height;
|
|
|
|
min_width = geometry->min_width;
|
|
|
|
min_height = geometry->min_height;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (flags & GDK_HINT_MAX_SIZE)
|
|
|
|
{
|
|
|
|
max_width = geometry->max_width ;
|
|
|
|
max_height = geometry->max_height;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (flags & GDK_HINT_RESIZE_INC)
|
|
|
|
{
|
|
|
|
xinc = MAX (xinc, geometry->width_inc);
|
|
|
|
yinc = MAX (yinc, geometry->height_inc);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2001-03-29 21:17:45 +00:00
|
|
|
/* clamp width and height to min and max values
|
|
|
|
*/
|
|
|
|
width = CLAMP (width, min_width, max_width);
|
|
|
|
height = CLAMP (height, min_height, max_height);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2001-03-29 21:17:45 +00:00
|
|
|
/* shrink to base + N * inc
|
|
|
|
*/
|
|
|
|
width = base_width + FLOOR (width - base_width, xinc);
|
|
|
|
height = base_height + FLOOR (height - base_height, yinc);
|
|
|
|
|
|
|
|
/* constrain aspect ratio, according to:
|
|
|
|
*
|
2009-06-01 10:04:36 +00:00
|
|
|
* width
|
2001-03-29 21:17:45 +00:00
|
|
|
* min_aspect <= -------- <= max_aspect
|
2009-06-01 10:04:36 +00:00
|
|
|
* height
|
2001-03-29 21:17:45 +00:00
|
|
|
*/
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2001-03-29 21:17:45 +00:00
|
|
|
if (flags & GDK_HINT_ASPECT &&
|
|
|
|
geometry->min_aspect > 0 &&
|
|
|
|
geometry->max_aspect > 0)
|
|
|
|
{
|
|
|
|
gint delta;
|
|
|
|
|
|
|
|
if (geometry->min_aspect * height > width)
|
|
|
|
{
|
2003-04-18 19:09:03 +00:00
|
|
|
delta = FLOOR (height - width / geometry->min_aspect, yinc);
|
2001-03-29 21:17:45 +00:00
|
|
|
if (height - delta >= min_height)
|
|
|
|
height -= delta;
|
|
|
|
else
|
2009-06-01 10:04:36 +00:00
|
|
|
{
|
2001-03-29 21:17:45 +00:00
|
|
|
delta = FLOOR (height * geometry->min_aspect - width, xinc);
|
2009-06-01 10:04:36 +00:00
|
|
|
if (width + delta <= max_width)
|
2001-03-29 21:17:45 +00:00
|
|
|
width += delta;
|
|
|
|
}
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2001-03-29 21:17:45 +00:00
|
|
|
if (geometry->max_aspect * height < width)
|
|
|
|
{
|
|
|
|
delta = FLOOR (width - height * geometry->max_aspect, xinc);
|
2009-06-01 10:04:36 +00:00
|
|
|
if (width - delta >= min_width)
|
2001-03-29 21:17:45 +00:00
|
|
|
width -= delta;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
delta = FLOOR (width / geometry->max_aspect - height, yinc);
|
|
|
|
if (height + delta <= max_height)
|
|
|
|
height += delta;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#undef FLOOR
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2001-03-29 21:17:45 +00:00
|
|
|
*new_width = width;
|
|
|
|
*new_height = height;
|
|
|
|
}
|
2001-07-05 13:41:34 +00:00
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_get_pointer:
|
|
|
|
* @window: a #GdkWindow
|
2009-08-18 18:35:10 +00:00
|
|
|
* @x: (out) (allow-none): return location for X coordinate of pointer or %NULL to not
|
2007-06-12 05:34:26 +00:00
|
|
|
* return the X coordinate
|
2009-08-18 18:35:10 +00:00
|
|
|
* @y: (out) (allow-none): return location for Y coordinate of pointer or %NULL to not
|
2007-06-12 05:34:26 +00:00
|
|
|
* return the Y coordinate
|
2009-08-18 18:35:10 +00:00
|
|
|
* @mask: (out) (allow-none): return location for modifier mask or %NULL to not return the
|
2007-06-12 05:34:26 +00:00
|
|
|
* modifier mask
|
2001-10-03 18:19:48 +00:00
|
|
|
*
|
|
|
|
* Obtains the current pointer position and modifier state.
|
2009-06-01 10:04:36 +00:00
|
|
|
* The position is given in coordinates relative to the upper left
|
2006-07-17 04:19:59 +00:00
|
|
|
* corner of @window.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2009-08-18 18:35:10 +00:00
|
|
|
* Return value: (transfer none): the window containing the pointer (as with
|
2002-01-13 20:13:34 +00:00
|
|
|
* gdk_window_at_pointer()), or %NULL if the window containing the
|
|
|
|
* pointer isn't known to GDK
|
2001-10-03 18:19:48 +00:00
|
|
|
**/
|
2001-07-05 13:41:34 +00:00
|
|
|
GdkWindow*
|
|
|
|
gdk_window_get_pointer (GdkWindow *window,
|
|
|
|
gint *x,
|
|
|
|
gint *y,
|
2002-10-07 19:42:49 +00:00
|
|
|
GdkModifierType *mask)
|
2001-07-05 13:41:34 +00:00
|
|
|
{
|
2002-10-07 19:42:49 +00:00
|
|
|
GdkDisplay *display;
|
|
|
|
gint tmp_x, tmp_y;
|
|
|
|
GdkModifierType tmp_mask;
|
|
|
|
GdkWindow *child;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2002-10-07 19:42:49 +00:00
|
|
|
g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
|
|
|
if (window)
|
|
|
|
{
|
|
|
|
display = gdk_drawable_get_display (window);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
GdkScreen *screen = gdk_screen_get_default ();
|
|
|
|
|
|
|
|
display = gdk_screen_get_display (screen);
|
|
|
|
window = gdk_screen_get_root_window (screen);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2002-10-07 19:42:49 +00:00
|
|
|
GDK_NOTE (MULTIHEAD,
|
|
|
|
g_message ("Passing NULL for window to gdk_window_get_pointer()\n"
|
|
|
|
"is not multihead safe"));
|
|
|
|
}
|
|
|
|
|
|
|
|
child = display->pointer_hooks->window_get_pointer (display, window, &tmp_x, &tmp_y, &tmp_mask);
|
|
|
|
|
|
|
|
if (x)
|
|
|
|
*x = tmp_x;
|
|
|
|
if (y)
|
|
|
|
*y = tmp_y;
|
|
|
|
if (mask)
|
|
|
|
*mask = tmp_mask;
|
|
|
|
|
2009-01-23 20:07:53 +00:00
|
|
|
_gdk_display_enable_motion_hints (display);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2002-10-07 19:42:49 +00:00
|
|
|
return child;
|
2001-07-05 13:41:34 +00:00
|
|
|
}
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_at_pointer:
|
2009-08-18 18:35:10 +00:00
|
|
|
* @win_x: (out) (allow-none): return location for origin of the window under the pointer
|
|
|
|
* @win_y: (out) (allow-none): return location for origin of the window under the pointer
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2002-01-13 20:13:34 +00:00
|
|
|
* Obtains the window underneath the mouse pointer, returning the
|
|
|
|
* location of that window in @win_x, @win_y. Returns %NULL if the
|
docs/reference/gtk/tmpl/gtkfontseldlg.sgml, gdk/gdkwindow.c,
Sat Oct 5 16:47:03 2002 Soeren Sandmann <sandmann@daimi.au.dk>
* docs/reference/gtk/tmpl/gtkfontseldlg.sgml, gdk/gdkwindow.c,
gdk/x11/gdkwindow-x11.c, gtk/gtkfontsel.h, gtk/gtkimcontext.c,
gtk/gtktreeview.c, gtk/gtktreeviewcolumn.c
Documentation fixes:
#75170, Dan Winship;
#73220, Havoc Pennington;
#70742, Boris Shingarov;
#72007, Alexey A. Malyshev
2002-10-05 15:09:29 +00:00
|
|
|
* window under the mouse pointer is not known to GDK (if the window
|
|
|
|
* belongs to another application and a #GdkWindow hasn't been created
|
|
|
|
* for it with gdk_window_foreign_new())
|
2002-04-25 22:29:14 +00:00
|
|
|
*
|
|
|
|
* NOTE: For multihead-aware widgets or applications use
|
2002-10-07 19:42:49 +00:00
|
|
|
* gdk_display_get_window_at_pointer() instead.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2009-08-18 18:35:10 +00:00
|
|
|
* Return value: (transfer none): window under the mouse pointer
|
2001-10-03 18:19:48 +00:00
|
|
|
**/
|
2001-07-05 13:41:34 +00:00
|
|
|
GdkWindow*
|
|
|
|
gdk_window_at_pointer (gint *win_x,
|
|
|
|
gint *win_y)
|
|
|
|
{
|
2002-10-07 19:42:49 +00:00
|
|
|
return gdk_display_get_window_at_pointer (gdk_display_get_default (), win_x, win_y);
|
2001-07-05 13:41:34 +00:00
|
|
|
}
|
Make gdkx.h the only installed header from gdk/x11. All structures in
Fri Sep 7 11:51:44 2001 Owen Taylor <otaylor@redhat.com>
Make gdkx.h the only installed header from gdk/x11.
All structures in gdk/x11 are opaque.
* gdk/x11/Makefile.am gdk/x11/gdkx.h gdk/x11/gdkprivate-x11.h:
Don't install gdk{drawable,pixmap,window}-x11.h.
* gdk/x11/{gdkcolormap-x11.c, gdkfont-x11.c, gdkx.h, gdkvisual-x11.c:
Move GdkColormapPrivateX11, GdkFontPrivateX GdkImagePrivateX11,
GdkVisualClass into C files.
* gdk/gdkpixmap-x11.[ch]: Make gdk_pixmap_impl_get_type() static.
* gdk/x11/{gdkcolor-x11.c, gdkcursor-x11.c, gdkdrawable-x11.c,
gdkfont-x11.c, gdkgc-x11.c, gdkx.h, gdkimage-x11,gdkvisual-x11.c}
Add public functions to replace previously exported direct
structure access.
gdk_x11_colormap_get_{xdisplay,xcolormap}
gdk_x11_cursor_get_{xdisplay,xcursor},
gdk_x11_drawable_get_{xdisplay,xcursor,gdk_x11_visual_get_xvisual,
gdk_x11_font_get_{xdisplay,xfont}, gdk_x11_image_get_{xdisplay,ximage},
gdk_x11_gc_get_{xdisplay,ximage}
* gdk/gdkprivate.h gdk/gdkinternals.h: Move GdkColorInfo,
GdkEventFilter, GdkClientFilter, GdkFontPrivate to gdkinternals.
Fix a number of variables and functions that were exported
"accidentally" from GDK.
* gdk/**.[ch]: gdk => _gdk for gdk_visual_init,
gdk_events_init, gdk_input_init, gdk_dnd_init, gdk_image_exit,
gdk_input_exit, gdk_windowing_exit, gdk_event_func, gdk_event_data,
gdk_event_notify, gdk_queued_events, gdk_queued_tail,
gdk_event_new, gdk_events_queue, gdk_events_unqueue,
gdk_event_queue_find_first, gdk_event_queue_remove_link,
gdk_event_queue_append, gdk_event_button_generate,
gdk_debug_flags, gdk_default_filters, gdk_parent_root.
* gdk/x11/{gdkevents-x11.c, gdkglobals-x11.c, gdkimage-x11.c,
gdkmain-x11.c, gdkprivate-x11.h, gdk/x11/gdkwindow-x11.c}:
gdk => _gdk for gdk_event_mask_table, gkd_nevent_masks,
gdk_wm_window_protocols, gdk_leader_window, gdk_xgrab_window,
gdk_use_xshm, gdk_input_ignore_core.
* gdk/x11/xsettings-common.h (xsettings_list_insert): Add
#defines to namespace functions into the private _gdk_
namespace.
* gdk/gdkwindow.[ch] gdk/x11/gdkx.h: Add gdk_get_default_root_window ()
to replace gdk_parent_root exported variable. Adjust and
deprecate GDK_ROOT_PARENT().
* demos/{testpixbuf-drawable.c,testpixbuf-save.c}: Fix
GDK_ROOT_PARENT usage, remove includes of port-specific
headers.
* gdk/{win32,x11,fb}/gdkinput*.[ch]: s/gdk/_gdk/ for
_gdk_input_gxid_host, _gdk_input_gxid_port, _gdk_input_ignore_core,
gdk_input_devices, _gdk_input_windows, gdk_init_input_core.
* gdk/x11/{gdkevents-x11.,c gdkglobals-x11.c, gdkmain-x11.c}
docs/Changes-2.0.txt: Remove gdk_wm_protocols,
gdk_wm_delete_window functions, gdk_wm_take_focus,
use gdk_atom_intern() instead.
* gdk/linux-fb/{gdkselection-fb.c, gdkmain-fb.c, gdkprivatefb.h}
gdk/win32/{gdkselection-win32.c, gdkmgdkwin32.h, gdkprivate-win32.h}
gdk/x11/{gdkselection-x11.c gdkx.h, gtkprivate-x11.h}
gtk/gtkselection.c
Unexport gdk_selection_property, just use
gdk_atom_intern ("GDK_SELECTION").
* gdk/x11/{gdkprivate-x11.h,gdkdrawable-x11h,gdkgc-x11.c,gdkx.h}:
Unexport gdk_drawable_impl_x11_get_type, gdk_gc_x11_get_type,
GDK_GC_X11 cast macros, GdkGCX11 structures, GdkCursorPrivate,
GdkVisualprivate, gdk_x11_gc_flush.
Make a number of public exports of variables into functions
to increase encapsulation.
* gdk/gdkinternals.h gdk/gdkinput.h gdk/gdkevents.h
gdk/linux-fb/gdkmouse-fb.c: gdk_core_pointer => _gdk_core_pointer,
move to gdkinternals.h. Add gdk_device_get_core_pointer ().
* gdk/gdkprivate.h gdk/gdkpango.c gdk/gdkinternals.h
docs/Changes-2.0.txt: Unexport gdk_parent_root, gdk_error_code,
gdk_error_warnings.
* gdk/x11/{gdkcolormap-x11.c, gdkmain-x11.c, gdkx.h}
docs/Changes-2.0.txt:
s/gdk_screen/_gdk_screen/, add gdk_x11_get_default_screen()
s/gdk_root_window/_gdk_root_window/, add gdk_x11_get_default_root_xwindow()
Add gdk_x11_get_default_xdisplay().
* gdk/gdk.h gdk/gdk.c linux-fb/gdkfb.h linux-fb/gdkglobals-fb.c
win32/gdkwin32.h x11/gdkglobals-x11.c gdk/x11/gdkmain-x11.c
gdk/x11/gdkx.h: gdk/gdk.def: Add gdk_get/set_program_class,
Don't export gdk_progclass, move --class command line
option and handling to common portion of GDK.
Miscellaneous fixes:
* gdk/x11/gdkwindow-x11.c (gdk_window_set_icon_list): Fix
g_return_val_if_fail that should have been g_return_if_fail.
* gdk/gdkinternals.h gdk/gdkprivate.h: Move
gdk_synthesize_window_state() to the semi-public gdkprivate.h.
* gtk/gtkdnd.c (_gtk_drag_source_handle_event): Remove uneeded
X11 dependency.
* gdk/linux-fb/gdkmain-fb.c gdk/win32/gdkmain-win32.c gdk/TODO:
Remove unused gdk_key_repeat_disable/restore.
* linux-fb/gdkglobals-fb.c win32/gdkglobals-win32.c
x11/gdkglobals-x11.c x11/gdkprivate-x11.h gdk/gdk.def:
Remove unused gdk_null_window_warnings variable.
* gdk/Makefile.am (DIST_SUBDIRS) nanox/*: cvs remove nanox;
it can be retrieved from the repository; it is too far
from functional to be worth having people check out;
it would be easier to start from scratch, I suspect.
* gdk/x11/gdkpixmap-x11.c: Fix lvalue usage of GDK_PIXMAP_XID().
* gdk/x11/gdkkeys-x11.c gdk/gdkrgb.c gdk/gdkwindow.c
gdk/x11/gdkpango-x11.c gdk/x11/gdkselection-x11.c:
Fix some accidentally global variables and unused global variables.
* gdk/x11/gdkkeys-x11.c gdk/gdkrgb.c gdk/gdkwindow.c
gdk/x11/gdkpango-x11.c gdk/x11/gdkselection-x11.c:
Fix some accidentally global variables and unused global variables.
Add some space for future expansion to multihead.
* gdk/gdkdrawable.h: Add four reserved function pointers
for future expansion of GdkDrawableClass.
* gtk/gtkwindow.h gtk/gtkinvisible.h: Add reserved pointer
where we can put a GdkScreen * later.
2001-09-07 21:50:20 +00:00
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
/**
|
|
|
|
* gdk_get_default_root_window:
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
* Obtains the root window (parent all other windows are inside)
|
|
|
|
* for the default display and screen.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2001-10-03 18:19:48 +00:00
|
|
|
* Return value: the default root window
|
|
|
|
**/
|
Make gdkx.h the only installed header from gdk/x11. All structures in
Fri Sep 7 11:51:44 2001 Owen Taylor <otaylor@redhat.com>
Make gdkx.h the only installed header from gdk/x11.
All structures in gdk/x11 are opaque.
* gdk/x11/Makefile.am gdk/x11/gdkx.h gdk/x11/gdkprivate-x11.h:
Don't install gdk{drawable,pixmap,window}-x11.h.
* gdk/x11/{gdkcolormap-x11.c, gdkfont-x11.c, gdkx.h, gdkvisual-x11.c:
Move GdkColormapPrivateX11, GdkFontPrivateX GdkImagePrivateX11,
GdkVisualClass into C files.
* gdk/gdkpixmap-x11.[ch]: Make gdk_pixmap_impl_get_type() static.
* gdk/x11/{gdkcolor-x11.c, gdkcursor-x11.c, gdkdrawable-x11.c,
gdkfont-x11.c, gdkgc-x11.c, gdkx.h, gdkimage-x11,gdkvisual-x11.c}
Add public functions to replace previously exported direct
structure access.
gdk_x11_colormap_get_{xdisplay,xcolormap}
gdk_x11_cursor_get_{xdisplay,xcursor},
gdk_x11_drawable_get_{xdisplay,xcursor,gdk_x11_visual_get_xvisual,
gdk_x11_font_get_{xdisplay,xfont}, gdk_x11_image_get_{xdisplay,ximage},
gdk_x11_gc_get_{xdisplay,ximage}
* gdk/gdkprivate.h gdk/gdkinternals.h: Move GdkColorInfo,
GdkEventFilter, GdkClientFilter, GdkFontPrivate to gdkinternals.
Fix a number of variables and functions that were exported
"accidentally" from GDK.
* gdk/**.[ch]: gdk => _gdk for gdk_visual_init,
gdk_events_init, gdk_input_init, gdk_dnd_init, gdk_image_exit,
gdk_input_exit, gdk_windowing_exit, gdk_event_func, gdk_event_data,
gdk_event_notify, gdk_queued_events, gdk_queued_tail,
gdk_event_new, gdk_events_queue, gdk_events_unqueue,
gdk_event_queue_find_first, gdk_event_queue_remove_link,
gdk_event_queue_append, gdk_event_button_generate,
gdk_debug_flags, gdk_default_filters, gdk_parent_root.
* gdk/x11/{gdkevents-x11.c, gdkglobals-x11.c, gdkimage-x11.c,
gdkmain-x11.c, gdkprivate-x11.h, gdk/x11/gdkwindow-x11.c}:
gdk => _gdk for gdk_event_mask_table, gkd_nevent_masks,
gdk_wm_window_protocols, gdk_leader_window, gdk_xgrab_window,
gdk_use_xshm, gdk_input_ignore_core.
* gdk/x11/xsettings-common.h (xsettings_list_insert): Add
#defines to namespace functions into the private _gdk_
namespace.
* gdk/gdkwindow.[ch] gdk/x11/gdkx.h: Add gdk_get_default_root_window ()
to replace gdk_parent_root exported variable. Adjust and
deprecate GDK_ROOT_PARENT().
* demos/{testpixbuf-drawable.c,testpixbuf-save.c}: Fix
GDK_ROOT_PARENT usage, remove includes of port-specific
headers.
* gdk/{win32,x11,fb}/gdkinput*.[ch]: s/gdk/_gdk/ for
_gdk_input_gxid_host, _gdk_input_gxid_port, _gdk_input_ignore_core,
gdk_input_devices, _gdk_input_windows, gdk_init_input_core.
* gdk/x11/{gdkevents-x11.,c gdkglobals-x11.c, gdkmain-x11.c}
docs/Changes-2.0.txt: Remove gdk_wm_protocols,
gdk_wm_delete_window functions, gdk_wm_take_focus,
use gdk_atom_intern() instead.
* gdk/linux-fb/{gdkselection-fb.c, gdkmain-fb.c, gdkprivatefb.h}
gdk/win32/{gdkselection-win32.c, gdkmgdkwin32.h, gdkprivate-win32.h}
gdk/x11/{gdkselection-x11.c gdkx.h, gtkprivate-x11.h}
gtk/gtkselection.c
Unexport gdk_selection_property, just use
gdk_atom_intern ("GDK_SELECTION").
* gdk/x11/{gdkprivate-x11.h,gdkdrawable-x11h,gdkgc-x11.c,gdkx.h}:
Unexport gdk_drawable_impl_x11_get_type, gdk_gc_x11_get_type,
GDK_GC_X11 cast macros, GdkGCX11 structures, GdkCursorPrivate,
GdkVisualprivate, gdk_x11_gc_flush.
Make a number of public exports of variables into functions
to increase encapsulation.
* gdk/gdkinternals.h gdk/gdkinput.h gdk/gdkevents.h
gdk/linux-fb/gdkmouse-fb.c: gdk_core_pointer => _gdk_core_pointer,
move to gdkinternals.h. Add gdk_device_get_core_pointer ().
* gdk/gdkprivate.h gdk/gdkpango.c gdk/gdkinternals.h
docs/Changes-2.0.txt: Unexport gdk_parent_root, gdk_error_code,
gdk_error_warnings.
* gdk/x11/{gdkcolormap-x11.c, gdkmain-x11.c, gdkx.h}
docs/Changes-2.0.txt:
s/gdk_screen/_gdk_screen/, add gdk_x11_get_default_screen()
s/gdk_root_window/_gdk_root_window/, add gdk_x11_get_default_root_xwindow()
Add gdk_x11_get_default_xdisplay().
* gdk/gdk.h gdk/gdk.c linux-fb/gdkfb.h linux-fb/gdkglobals-fb.c
win32/gdkwin32.h x11/gdkglobals-x11.c gdk/x11/gdkmain-x11.c
gdk/x11/gdkx.h: gdk/gdk.def: Add gdk_get/set_program_class,
Don't export gdk_progclass, move --class command line
option and handling to common portion of GDK.
Miscellaneous fixes:
* gdk/x11/gdkwindow-x11.c (gdk_window_set_icon_list): Fix
g_return_val_if_fail that should have been g_return_if_fail.
* gdk/gdkinternals.h gdk/gdkprivate.h: Move
gdk_synthesize_window_state() to the semi-public gdkprivate.h.
* gtk/gtkdnd.c (_gtk_drag_source_handle_event): Remove uneeded
X11 dependency.
* gdk/linux-fb/gdkmain-fb.c gdk/win32/gdkmain-win32.c gdk/TODO:
Remove unused gdk_key_repeat_disable/restore.
* linux-fb/gdkglobals-fb.c win32/gdkglobals-win32.c
x11/gdkglobals-x11.c x11/gdkprivate-x11.h gdk/gdk.def:
Remove unused gdk_null_window_warnings variable.
* gdk/Makefile.am (DIST_SUBDIRS) nanox/*: cvs remove nanox;
it can be retrieved from the repository; it is too far
from functional to be worth having people check out;
it would be easier to start from scratch, I suspect.
* gdk/x11/gdkpixmap-x11.c: Fix lvalue usage of GDK_PIXMAP_XID().
* gdk/x11/gdkkeys-x11.c gdk/gdkrgb.c gdk/gdkwindow.c
gdk/x11/gdkpango-x11.c gdk/x11/gdkselection-x11.c:
Fix some accidentally global variables and unused global variables.
* gdk/x11/gdkkeys-x11.c gdk/gdkrgb.c gdk/gdkwindow.c
gdk/x11/gdkpango-x11.c gdk/x11/gdkselection-x11.c:
Fix some accidentally global variables and unused global variables.
Add some space for future expansion to multihead.
* gdk/gdkdrawable.h: Add four reserved function pointers
for future expansion of GdkDrawableClass.
* gtk/gtkwindow.h gtk/gtkinvisible.h: Add reserved pointer
where we can put a GdkScreen * later.
2001-09-07 21:50:20 +00:00
|
|
|
GdkWindow *
|
|
|
|
gdk_get_default_root_window (void)
|
|
|
|
{
|
2002-06-20 23:59:27 +00:00
|
|
|
return gdk_screen_get_root_window (gdk_screen_get_default ());
|
Make gdkx.h the only installed header from gdk/x11. All structures in
Fri Sep 7 11:51:44 2001 Owen Taylor <otaylor@redhat.com>
Make gdkx.h the only installed header from gdk/x11.
All structures in gdk/x11 are opaque.
* gdk/x11/Makefile.am gdk/x11/gdkx.h gdk/x11/gdkprivate-x11.h:
Don't install gdk{drawable,pixmap,window}-x11.h.
* gdk/x11/{gdkcolormap-x11.c, gdkfont-x11.c, gdkx.h, gdkvisual-x11.c:
Move GdkColormapPrivateX11, GdkFontPrivateX GdkImagePrivateX11,
GdkVisualClass into C files.
* gdk/gdkpixmap-x11.[ch]: Make gdk_pixmap_impl_get_type() static.
* gdk/x11/{gdkcolor-x11.c, gdkcursor-x11.c, gdkdrawable-x11.c,
gdkfont-x11.c, gdkgc-x11.c, gdkx.h, gdkimage-x11,gdkvisual-x11.c}
Add public functions to replace previously exported direct
structure access.
gdk_x11_colormap_get_{xdisplay,xcolormap}
gdk_x11_cursor_get_{xdisplay,xcursor},
gdk_x11_drawable_get_{xdisplay,xcursor,gdk_x11_visual_get_xvisual,
gdk_x11_font_get_{xdisplay,xfont}, gdk_x11_image_get_{xdisplay,ximage},
gdk_x11_gc_get_{xdisplay,ximage}
* gdk/gdkprivate.h gdk/gdkinternals.h: Move GdkColorInfo,
GdkEventFilter, GdkClientFilter, GdkFontPrivate to gdkinternals.
Fix a number of variables and functions that were exported
"accidentally" from GDK.
* gdk/**.[ch]: gdk => _gdk for gdk_visual_init,
gdk_events_init, gdk_input_init, gdk_dnd_init, gdk_image_exit,
gdk_input_exit, gdk_windowing_exit, gdk_event_func, gdk_event_data,
gdk_event_notify, gdk_queued_events, gdk_queued_tail,
gdk_event_new, gdk_events_queue, gdk_events_unqueue,
gdk_event_queue_find_first, gdk_event_queue_remove_link,
gdk_event_queue_append, gdk_event_button_generate,
gdk_debug_flags, gdk_default_filters, gdk_parent_root.
* gdk/x11/{gdkevents-x11.c, gdkglobals-x11.c, gdkimage-x11.c,
gdkmain-x11.c, gdkprivate-x11.h, gdk/x11/gdkwindow-x11.c}:
gdk => _gdk for gdk_event_mask_table, gkd_nevent_masks,
gdk_wm_window_protocols, gdk_leader_window, gdk_xgrab_window,
gdk_use_xshm, gdk_input_ignore_core.
* gdk/x11/xsettings-common.h (xsettings_list_insert): Add
#defines to namespace functions into the private _gdk_
namespace.
* gdk/gdkwindow.[ch] gdk/x11/gdkx.h: Add gdk_get_default_root_window ()
to replace gdk_parent_root exported variable. Adjust and
deprecate GDK_ROOT_PARENT().
* demos/{testpixbuf-drawable.c,testpixbuf-save.c}: Fix
GDK_ROOT_PARENT usage, remove includes of port-specific
headers.
* gdk/{win32,x11,fb}/gdkinput*.[ch]: s/gdk/_gdk/ for
_gdk_input_gxid_host, _gdk_input_gxid_port, _gdk_input_ignore_core,
gdk_input_devices, _gdk_input_windows, gdk_init_input_core.
* gdk/x11/{gdkevents-x11.,c gdkglobals-x11.c, gdkmain-x11.c}
docs/Changes-2.0.txt: Remove gdk_wm_protocols,
gdk_wm_delete_window functions, gdk_wm_take_focus,
use gdk_atom_intern() instead.
* gdk/linux-fb/{gdkselection-fb.c, gdkmain-fb.c, gdkprivatefb.h}
gdk/win32/{gdkselection-win32.c, gdkmgdkwin32.h, gdkprivate-win32.h}
gdk/x11/{gdkselection-x11.c gdkx.h, gtkprivate-x11.h}
gtk/gtkselection.c
Unexport gdk_selection_property, just use
gdk_atom_intern ("GDK_SELECTION").
* gdk/x11/{gdkprivate-x11.h,gdkdrawable-x11h,gdkgc-x11.c,gdkx.h}:
Unexport gdk_drawable_impl_x11_get_type, gdk_gc_x11_get_type,
GDK_GC_X11 cast macros, GdkGCX11 structures, GdkCursorPrivate,
GdkVisualprivate, gdk_x11_gc_flush.
Make a number of public exports of variables into functions
to increase encapsulation.
* gdk/gdkinternals.h gdk/gdkinput.h gdk/gdkevents.h
gdk/linux-fb/gdkmouse-fb.c: gdk_core_pointer => _gdk_core_pointer,
move to gdkinternals.h. Add gdk_device_get_core_pointer ().
* gdk/gdkprivate.h gdk/gdkpango.c gdk/gdkinternals.h
docs/Changes-2.0.txt: Unexport gdk_parent_root, gdk_error_code,
gdk_error_warnings.
* gdk/x11/{gdkcolormap-x11.c, gdkmain-x11.c, gdkx.h}
docs/Changes-2.0.txt:
s/gdk_screen/_gdk_screen/, add gdk_x11_get_default_screen()
s/gdk_root_window/_gdk_root_window/, add gdk_x11_get_default_root_xwindow()
Add gdk_x11_get_default_xdisplay().
* gdk/gdk.h gdk/gdk.c linux-fb/gdkfb.h linux-fb/gdkglobals-fb.c
win32/gdkwin32.h x11/gdkglobals-x11.c gdk/x11/gdkmain-x11.c
gdk/x11/gdkx.h: gdk/gdk.def: Add gdk_get/set_program_class,
Don't export gdk_progclass, move --class command line
option and handling to common portion of GDK.
Miscellaneous fixes:
* gdk/x11/gdkwindow-x11.c (gdk_window_set_icon_list): Fix
g_return_val_if_fail that should have been g_return_if_fail.
* gdk/gdkinternals.h gdk/gdkprivate.h: Move
gdk_synthesize_window_state() to the semi-public gdkprivate.h.
* gtk/gtkdnd.c (_gtk_drag_source_handle_event): Remove uneeded
X11 dependency.
* gdk/linux-fb/gdkmain-fb.c gdk/win32/gdkmain-win32.c gdk/TODO:
Remove unused gdk_key_repeat_disable/restore.
* linux-fb/gdkglobals-fb.c win32/gdkglobals-win32.c
x11/gdkglobals-x11.c x11/gdkprivate-x11.h gdk/gdk.def:
Remove unused gdk_null_window_warnings variable.
* gdk/Makefile.am (DIST_SUBDIRS) nanox/*: cvs remove nanox;
it can be retrieved from the repository; it is too far
from functional to be worth having people check out;
it would be easier to start from scratch, I suspect.
* gdk/x11/gdkpixmap-x11.c: Fix lvalue usage of GDK_PIXMAP_XID().
* gdk/x11/gdkkeys-x11.c gdk/gdkrgb.c gdk/gdkwindow.c
gdk/x11/gdkpango-x11.c gdk/x11/gdkselection-x11.c:
Fix some accidentally global variables and unused global variables.
* gdk/x11/gdkkeys-x11.c gdk/gdkrgb.c gdk/gdkwindow.c
gdk/x11/gdkpango-x11.c gdk/x11/gdkselection-x11.c:
Fix some accidentally global variables and unused global variables.
Add some space for future expansion to multihead.
* gdk/gdkdrawable.h: Add four reserved function pointers
for future expansion of GdkDrawableClass.
* gtk/gtkwindow.h gtk/gtkinvisible.h: Add reserved pointer
where we can put a GdkScreen * later.
2001-09-07 21:50:20 +00:00
|
|
|
}
|
|
|
|
|
Changes multihead reorganizing code for win32 support, mostly from a patch
Wed Jun 5 18:34:47 2002 Owen Taylor <otaylor@redhat.com>
Changes multihead reorganizing code for win32 support,
mostly from a patch by Hans Breuer.
* gdk/gdkcolor.c gdk/x11/gdkcolor-x11.c gdk/gdkcursor.c
gdk/x11/gdkcursor-x11.c gdk/gdkevents.c gdk/x11/gdkevents-x11.c
gdk/gdkfont.c gdk/x11/gdkfont-x11.c gdk/gdkkeys.c
gdk/x11/gdkkeys-x11.c gdk/gdkimage.c gdk/x11/gdkimage-x11.c
gdk/gdkscreen.c gdk/x11/gdkmain-x11.c
gdk/gdkdisplay.c gdk/gdkevents-x11.c gdk/gdkpango.c
gdk/x11/gdkpango-x11.c gdk/gdkselection.c
gdk/x11/gdkselection-x11.c gdk/gdkwindow.c
gdk/x11/gdkwindow-x11.c gdk/gdkvisual.c gdk/x11/gdkvisual-x11.c:
Move port-independent singlehead wrapper functions into
port-independent part of GDK. (#80009)
* gdk/win32/gdkcolor-win32.c gdk/win32/gdkcursor-win32.c
gdk/win32/gdkevents-win32.c gdk/win32/gdkfont-win32.c
gdk/win32/gdkimage-win32.c gdk/win32/gdkkeys-win32.c
gdk/win32/gdkmain-win32.c gdk/win32/gdkproperty-win32.c
gdk/win32/gdkselection-win32.c gdk/win32/gkwindow-win32.c:
Turn singlehead functions into "multihead" functions that ignore
their GdkDisplay or GdkScreen arguments.
* gdk/win32/gdkdrawable-win32.c gdk/win32/gdkevents-win32.c
gdk/win32/gdkinput-win32.c gdk/win32/gdkprivate-win32.h:
Misc multihead-compatibility changes.
* gtk/gtk.def gdk/gdk.def: Update for multihead functions.
* gdk/gdkcolormap.h gdk/gdkvisual.h gdk/x11/gdkcolormap-x11.c
gdk/x11/gdkvisual-x11.c: Remove the screen fields
from the public parts of the colormap/visual structures, add accessors
instead.
* gdk/gdkpixbuf-render.c gdk/gdkpixmap.c gdk/gdkrgb.c
gdk/x11/gdkcolormap-x11.c gdk/x11/gdkimage-x11.c
gdk/x11/gdkimage-x11.c gdk/x11/gdkprivate-x11.h gtk/gtkgc.c
gtk/gtkstyle.c gtk/gtkwidget.c: Use accessors to get the screen
for colormaps, visuals; move the fields into the private
structures for the x11 backend.
* gdk/gdkdisplay.[ch] gdk/x11/gdkdisplay-x11.[ch]
gdk/gdkscreen.[ch] gdk/x11/gdkscreen-x11.c:
Remove virtualization of screen and display functions.
(#79990, patch from Erwann Chenede)
* gdk/win32/gdkdisplay-x11.c gdk/win32/gdkscreen-win32.c
gdk/win32/{Makefile.am, makefile.msc, makefile.mingw}:
New files containing stub implementations of Display,
Screen functions.
* gdk/x11/gdkscreen-x11.[ch] gdk/x11/gdkdisplay-x11.[ch]
gdk/x11/gdkx.h: Clean up function exports and what
headers they are in. (#79954)
* gdk/x11/gdkx.h: Fix macro that was referring to a non-existant
screen->screen_num. (In the patch for #79972, Erwann Chenede)
* gdk/gdkscreen.c gdk/gdkwindow.c gdk/x11/gdkinternals.h
gdk/x11/gdkscreen-x11.c: Fix gdk_screen_get_window_at_pointer()
to use window hooks. (#79972, patch partly from Erwann Chenede)
* gdk/x11/gdkdisplay-x11.c gdk/x11/gdkevents-x11.c: Fix
some warnings.
2002-06-06 00:26:42 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_foreign_new:
|
|
|
|
* @anid: a native window handle.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
Changes multihead reorganizing code for win32 support, mostly from a patch
Wed Jun 5 18:34:47 2002 Owen Taylor <otaylor@redhat.com>
Changes multihead reorganizing code for win32 support,
mostly from a patch by Hans Breuer.
* gdk/gdkcolor.c gdk/x11/gdkcolor-x11.c gdk/gdkcursor.c
gdk/x11/gdkcursor-x11.c gdk/gdkevents.c gdk/x11/gdkevents-x11.c
gdk/gdkfont.c gdk/x11/gdkfont-x11.c gdk/gdkkeys.c
gdk/x11/gdkkeys-x11.c gdk/gdkimage.c gdk/x11/gdkimage-x11.c
gdk/gdkscreen.c gdk/x11/gdkmain-x11.c
gdk/gdkdisplay.c gdk/gdkevents-x11.c gdk/gdkpango.c
gdk/x11/gdkpango-x11.c gdk/gdkselection.c
gdk/x11/gdkselection-x11.c gdk/gdkwindow.c
gdk/x11/gdkwindow-x11.c gdk/gdkvisual.c gdk/x11/gdkvisual-x11.c:
Move port-independent singlehead wrapper functions into
port-independent part of GDK. (#80009)
* gdk/win32/gdkcolor-win32.c gdk/win32/gdkcursor-win32.c
gdk/win32/gdkevents-win32.c gdk/win32/gdkfont-win32.c
gdk/win32/gdkimage-win32.c gdk/win32/gdkkeys-win32.c
gdk/win32/gdkmain-win32.c gdk/win32/gdkproperty-win32.c
gdk/win32/gdkselection-win32.c gdk/win32/gkwindow-win32.c:
Turn singlehead functions into "multihead" functions that ignore
their GdkDisplay or GdkScreen arguments.
* gdk/win32/gdkdrawable-win32.c gdk/win32/gdkevents-win32.c
gdk/win32/gdkinput-win32.c gdk/win32/gdkprivate-win32.h:
Misc multihead-compatibility changes.
* gtk/gtk.def gdk/gdk.def: Update for multihead functions.
* gdk/gdkcolormap.h gdk/gdkvisual.h gdk/x11/gdkcolormap-x11.c
gdk/x11/gdkvisual-x11.c: Remove the screen fields
from the public parts of the colormap/visual structures, add accessors
instead.
* gdk/gdkpixbuf-render.c gdk/gdkpixmap.c gdk/gdkrgb.c
gdk/x11/gdkcolormap-x11.c gdk/x11/gdkimage-x11.c
gdk/x11/gdkimage-x11.c gdk/x11/gdkprivate-x11.h gtk/gtkgc.c
gtk/gtkstyle.c gtk/gtkwidget.c: Use accessors to get the screen
for colormaps, visuals; move the fields into the private
structures for the x11 backend.
* gdk/gdkdisplay.[ch] gdk/x11/gdkdisplay-x11.[ch]
gdk/gdkscreen.[ch] gdk/x11/gdkscreen-x11.c:
Remove virtualization of screen and display functions.
(#79990, patch from Erwann Chenede)
* gdk/win32/gdkdisplay-x11.c gdk/win32/gdkscreen-win32.c
gdk/win32/{Makefile.am, makefile.msc, makefile.mingw}:
New files containing stub implementations of Display,
Screen functions.
* gdk/x11/gdkscreen-x11.[ch] gdk/x11/gdkdisplay-x11.[ch]
gdk/x11/gdkx.h: Clean up function exports and what
headers they are in. (#79954)
* gdk/x11/gdkx.h: Fix macro that was referring to a non-existant
screen->screen_num. (In the patch for #79972, Erwann Chenede)
* gdk/gdkscreen.c gdk/gdkwindow.c gdk/x11/gdkinternals.h
gdk/x11/gdkscreen-x11.c: Fix gdk_screen_get_window_at_pointer()
to use window hooks. (#79972, patch partly from Erwann Chenede)
* gdk/x11/gdkdisplay-x11.c gdk/x11/gdkevents-x11.c: Fix
some warnings.
2002-06-06 00:26:42 +00:00
|
|
|
* Wraps a native window for the default display in a #GdkWindow.
|
|
|
|
* This may fail if the window has been destroyed.
|
|
|
|
*
|
|
|
|
* For example in the X backend, a native window handle is an Xlib
|
|
|
|
* <type>XID</type>.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
|
|
|
* Return value: the newly-created #GdkWindow wrapper for the
|
Changes multihead reorganizing code for win32 support, mostly from a patch
Wed Jun 5 18:34:47 2002 Owen Taylor <otaylor@redhat.com>
Changes multihead reorganizing code for win32 support,
mostly from a patch by Hans Breuer.
* gdk/gdkcolor.c gdk/x11/gdkcolor-x11.c gdk/gdkcursor.c
gdk/x11/gdkcursor-x11.c gdk/gdkevents.c gdk/x11/gdkevents-x11.c
gdk/gdkfont.c gdk/x11/gdkfont-x11.c gdk/gdkkeys.c
gdk/x11/gdkkeys-x11.c gdk/gdkimage.c gdk/x11/gdkimage-x11.c
gdk/gdkscreen.c gdk/x11/gdkmain-x11.c
gdk/gdkdisplay.c gdk/gdkevents-x11.c gdk/gdkpango.c
gdk/x11/gdkpango-x11.c gdk/gdkselection.c
gdk/x11/gdkselection-x11.c gdk/gdkwindow.c
gdk/x11/gdkwindow-x11.c gdk/gdkvisual.c gdk/x11/gdkvisual-x11.c:
Move port-independent singlehead wrapper functions into
port-independent part of GDK. (#80009)
* gdk/win32/gdkcolor-win32.c gdk/win32/gdkcursor-win32.c
gdk/win32/gdkevents-win32.c gdk/win32/gdkfont-win32.c
gdk/win32/gdkimage-win32.c gdk/win32/gdkkeys-win32.c
gdk/win32/gdkmain-win32.c gdk/win32/gdkproperty-win32.c
gdk/win32/gdkselection-win32.c gdk/win32/gkwindow-win32.c:
Turn singlehead functions into "multihead" functions that ignore
their GdkDisplay or GdkScreen arguments.
* gdk/win32/gdkdrawable-win32.c gdk/win32/gdkevents-win32.c
gdk/win32/gdkinput-win32.c gdk/win32/gdkprivate-win32.h:
Misc multihead-compatibility changes.
* gtk/gtk.def gdk/gdk.def: Update for multihead functions.
* gdk/gdkcolormap.h gdk/gdkvisual.h gdk/x11/gdkcolormap-x11.c
gdk/x11/gdkvisual-x11.c: Remove the screen fields
from the public parts of the colormap/visual structures, add accessors
instead.
* gdk/gdkpixbuf-render.c gdk/gdkpixmap.c gdk/gdkrgb.c
gdk/x11/gdkcolormap-x11.c gdk/x11/gdkimage-x11.c
gdk/x11/gdkimage-x11.c gdk/x11/gdkprivate-x11.h gtk/gtkgc.c
gtk/gtkstyle.c gtk/gtkwidget.c: Use accessors to get the screen
for colormaps, visuals; move the fields into the private
structures for the x11 backend.
* gdk/gdkdisplay.[ch] gdk/x11/gdkdisplay-x11.[ch]
gdk/gdkscreen.[ch] gdk/x11/gdkscreen-x11.c:
Remove virtualization of screen and display functions.
(#79990, patch from Erwann Chenede)
* gdk/win32/gdkdisplay-x11.c gdk/win32/gdkscreen-win32.c
gdk/win32/{Makefile.am, makefile.msc, makefile.mingw}:
New files containing stub implementations of Display,
Screen functions.
* gdk/x11/gdkscreen-x11.[ch] gdk/x11/gdkdisplay-x11.[ch]
gdk/x11/gdkx.h: Clean up function exports and what
headers they are in. (#79954)
* gdk/x11/gdkx.h: Fix macro that was referring to a non-existant
screen->screen_num. (In the patch for #79972, Erwann Chenede)
* gdk/gdkscreen.c gdk/gdkwindow.c gdk/x11/gdkinternals.h
gdk/x11/gdkscreen-x11.c: Fix gdk_screen_get_window_at_pointer()
to use window hooks. (#79972, patch partly from Erwann Chenede)
* gdk/x11/gdkdisplay-x11.c gdk/x11/gdkevents-x11.c: Fix
some warnings.
2002-06-06 00:26:42 +00:00
|
|
|
* native window or %NULL if the window has been destroyed.
|
|
|
|
**/
|
|
|
|
GdkWindow *
|
|
|
|
gdk_window_foreign_new (GdkNativeWindow anid)
|
|
|
|
{
|
2002-06-20 23:59:27 +00:00
|
|
|
return gdk_window_foreign_new_for_display (gdk_display_get_default (), anid);
|
Changes multihead reorganizing code for win32 support, mostly from a patch
Wed Jun 5 18:34:47 2002 Owen Taylor <otaylor@redhat.com>
Changes multihead reorganizing code for win32 support,
mostly from a patch by Hans Breuer.
* gdk/gdkcolor.c gdk/x11/gdkcolor-x11.c gdk/gdkcursor.c
gdk/x11/gdkcursor-x11.c gdk/gdkevents.c gdk/x11/gdkevents-x11.c
gdk/gdkfont.c gdk/x11/gdkfont-x11.c gdk/gdkkeys.c
gdk/x11/gdkkeys-x11.c gdk/gdkimage.c gdk/x11/gdkimage-x11.c
gdk/gdkscreen.c gdk/x11/gdkmain-x11.c
gdk/gdkdisplay.c gdk/gdkevents-x11.c gdk/gdkpango.c
gdk/x11/gdkpango-x11.c gdk/gdkselection.c
gdk/x11/gdkselection-x11.c gdk/gdkwindow.c
gdk/x11/gdkwindow-x11.c gdk/gdkvisual.c gdk/x11/gdkvisual-x11.c:
Move port-independent singlehead wrapper functions into
port-independent part of GDK. (#80009)
* gdk/win32/gdkcolor-win32.c gdk/win32/gdkcursor-win32.c
gdk/win32/gdkevents-win32.c gdk/win32/gdkfont-win32.c
gdk/win32/gdkimage-win32.c gdk/win32/gdkkeys-win32.c
gdk/win32/gdkmain-win32.c gdk/win32/gdkproperty-win32.c
gdk/win32/gdkselection-win32.c gdk/win32/gkwindow-win32.c:
Turn singlehead functions into "multihead" functions that ignore
their GdkDisplay or GdkScreen arguments.
* gdk/win32/gdkdrawable-win32.c gdk/win32/gdkevents-win32.c
gdk/win32/gdkinput-win32.c gdk/win32/gdkprivate-win32.h:
Misc multihead-compatibility changes.
* gtk/gtk.def gdk/gdk.def: Update for multihead functions.
* gdk/gdkcolormap.h gdk/gdkvisual.h gdk/x11/gdkcolormap-x11.c
gdk/x11/gdkvisual-x11.c: Remove the screen fields
from the public parts of the colormap/visual structures, add accessors
instead.
* gdk/gdkpixbuf-render.c gdk/gdkpixmap.c gdk/gdkrgb.c
gdk/x11/gdkcolormap-x11.c gdk/x11/gdkimage-x11.c
gdk/x11/gdkimage-x11.c gdk/x11/gdkprivate-x11.h gtk/gtkgc.c
gtk/gtkstyle.c gtk/gtkwidget.c: Use accessors to get the screen
for colormaps, visuals; move the fields into the private
structures for the x11 backend.
* gdk/gdkdisplay.[ch] gdk/x11/gdkdisplay-x11.[ch]
gdk/gdkscreen.[ch] gdk/x11/gdkscreen-x11.c:
Remove virtualization of screen and display functions.
(#79990, patch from Erwann Chenede)
* gdk/win32/gdkdisplay-x11.c gdk/win32/gdkscreen-win32.c
gdk/win32/{Makefile.am, makefile.msc, makefile.mingw}:
New files containing stub implementations of Display,
Screen functions.
* gdk/x11/gdkscreen-x11.[ch] gdk/x11/gdkdisplay-x11.[ch]
gdk/x11/gdkx.h: Clean up function exports and what
headers they are in. (#79954)
* gdk/x11/gdkx.h: Fix macro that was referring to a non-existant
screen->screen_num. (In the patch for #79972, Erwann Chenede)
* gdk/gdkscreen.c gdk/gdkwindow.c gdk/x11/gdkinternals.h
gdk/x11/gdkscreen-x11.c: Fix gdk_screen_get_window_at_pointer()
to use window hooks. (#79972, patch partly from Erwann Chenede)
* gdk/x11/gdkdisplay-x11.c gdk/x11/gdkevents-x11.c: Fix
some warnings.
2002-06-06 00:26:42 +00:00
|
|
|
}
|
|
|
|
|
2009-01-19 12:07:02 +00:00
|
|
|
static void
|
|
|
|
get_all_native_children (GdkWindowObject *private,
|
|
|
|
GList **native)
|
|
|
|
{
|
|
|
|
GdkWindowObject *child;
|
|
|
|
GList *l;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-19 12:07:02 +00:00
|
|
|
for (l = private->children; l != NULL; l = l->next)
|
|
|
|
{
|
|
|
|
child = l->data;
|
|
|
|
|
|
|
|
if (gdk_window_has_impl (child))
|
|
|
|
*native = g_list_prepend (*native, child);
|
|
|
|
else
|
|
|
|
get_all_native_children (child, native);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static inline void
|
|
|
|
gdk_window_raise_internal (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
|
|
|
GdkWindowObject *parent = private->parent;
|
2009-01-19 12:07:02 +00:00
|
|
|
GdkWindowObject *above;
|
|
|
|
GList *native_children;
|
|
|
|
GList *l, listhead;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
if (parent)
|
|
|
|
{
|
|
|
|
parent->children = g_list_remove (parent->children, window);
|
|
|
|
parent->children = g_list_prepend (parent->children, window);
|
|
|
|
}
|
2009-01-19 09:40:13 +00:00
|
|
|
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
2009-01-19 12:07:02 +00:00
|
|
|
/* Just do native raise for toplevels */
|
2009-08-31 08:59:21 +00:00
|
|
|
if (gdk_window_is_toplevel (private) ||
|
2009-08-24 13:18:10 +00:00
|
|
|
/* The restack_under codepath should work correctly even if the parent
|
|
|
|
is native, but it relies on the order of ->children to be correct,
|
|
|
|
and some apps like SWT reorder the x windows without gdks knowledge,
|
|
|
|
so we use raise directly in order to make these behave as before
|
|
|
|
when using native windows */
|
|
|
|
(gdk_window_has_impl (private) && gdk_window_has_impl (parent)))
|
2009-01-19 12:07:02 +00:00
|
|
|
{
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->raise (window);
|
2009-01-19 12:07:02 +00:00
|
|
|
}
|
|
|
|
else if (gdk_window_has_impl (private))
|
|
|
|
{
|
|
|
|
above = find_native_sibling_above (parent, private);
|
|
|
|
if (above)
|
|
|
|
{
|
|
|
|
listhead.data = window;
|
|
|
|
listhead.next = NULL;
|
|
|
|
listhead.prev = NULL;
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->restack_under ((GdkWindow *)above,
|
|
|
|
&listhead);
|
2009-01-19 12:07:02 +00:00
|
|
|
}
|
|
|
|
else
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->raise (window);
|
2009-01-19 12:07:02 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
native_children = NULL;
|
|
|
|
get_all_native_children (private, &native_children);
|
|
|
|
if (native_children != NULL)
|
|
|
|
{
|
|
|
|
above = find_native_sibling_above (parent, private);
|
|
|
|
|
|
|
|
if (above)
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->restack_under ((GdkWindow *)above,
|
|
|
|
native_children);
|
2009-01-19 12:07:02 +00:00
|
|
|
else
|
|
|
|
{
|
2009-06-24 18:59:29 +00:00
|
|
|
/* Right order, since native_children is bottom-topmost first */
|
2009-01-19 12:07:02 +00:00
|
|
|
for (l = native_children; l != NULL; l = l->next)
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->raise (l->data);
|
2009-01-19 12:07:02 +00:00
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-19 12:07:02 +00:00
|
|
|
g_list_free (native_children);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-19 12:07:02 +00:00
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
2009-08-11 09:30:55 +00:00
|
|
|
/* Returns TRUE If the native window was mapped or unmapped */
|
|
|
|
static gboolean
|
2009-07-18 18:29:50 +00:00
|
|
|
set_viewable (GdkWindowObject *w,
|
|
|
|
gboolean val)
|
|
|
|
{
|
|
|
|
GdkWindowObject *child;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2009-07-18 18:29:50 +00:00
|
|
|
GList *l;
|
|
|
|
|
2009-08-11 09:30:55 +00:00
|
|
|
if (w->viewable == val)
|
|
|
|
return FALSE;
|
|
|
|
|
2009-07-18 18:29:50 +00:00
|
|
|
w->viewable = val;
|
|
|
|
|
2009-07-20 20:19:35 +00:00
|
|
|
if (val)
|
|
|
|
recompute_visible_regions (w, FALSE, FALSE);
|
|
|
|
|
2009-07-18 18:29:50 +00:00
|
|
|
for (l = w->children; l != NULL; l = l->next)
|
|
|
|
{
|
|
|
|
child = l->data;
|
|
|
|
|
|
|
|
if (GDK_WINDOW_IS_MAPPED (child) &&
|
|
|
|
child->window_type != GDK_WINDOW_FOREIGN)
|
|
|
|
set_viewable (child, val);
|
|
|
|
}
|
2009-08-11 09:30:55 +00:00
|
|
|
|
2009-08-28 10:10:49 +00:00
|
|
|
if (!_gdk_native_windows &&
|
|
|
|
gdk_window_has_impl (w) &&
|
2009-08-11 09:30:55 +00:00
|
|
|
w->window_type != GDK_WINDOW_FOREIGN &&
|
2009-08-31 08:59:21 +00:00
|
|
|
!gdk_window_is_toplevel (w))
|
2009-08-11 09:30:55 +00:00
|
|
|
{
|
|
|
|
/* For most native windows we show/hide them not when they are
|
|
|
|
* mapped/unmapped, because that may not produce the correct results.
|
|
|
|
* For instance, if a native window have a non-native parent which is
|
|
|
|
* hidden, but its native parent is viewable then showing the window
|
|
|
|
* would make it viewable to X but its not viewable wrt the non-native
|
|
|
|
* hierarchy. In order to handle this we track the gdk side viewability
|
|
|
|
* and only map really viewable windows.
|
|
|
|
*
|
|
|
|
* There are two exceptions though:
|
|
|
|
*
|
|
|
|
* For foreign windows we don't want ever change the mapped state
|
|
|
|
* except when explicitly done via gdk_window_show/hide, as this may
|
|
|
|
* cause problems for client owning the foreign window when its window
|
|
|
|
* is suddenly mapped or unmapped.
|
|
|
|
*
|
|
|
|
* For toplevel windows embedded in a foreign window (e.g. a plug)
|
|
|
|
* we sometimes synthesize a map of a window, but the native
|
|
|
|
* window is really shown by the embedder, so we don't want to
|
|
|
|
* do the show ourselves. We can't really tell this case from the normal
|
|
|
|
* toplevel show as such toplevels are seen by gdk as parents of the
|
|
|
|
* root window, so we make an exception for all toplevels.
|
2009-08-28 10:10:49 +00:00
|
|
|
*
|
|
|
|
* Also, when in GDK_NATIVE_WINDOW mode we never need to play games
|
|
|
|
* like this, so we just always show/hide directly.
|
2009-08-11 09:30:55 +00:00
|
|
|
*/
|
|
|
|
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (w->impl);
|
2009-08-11 09:30:55 +00:00
|
|
|
if (val)
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->show ((GdkWindow *)w, FALSE);
|
2009-08-11 09:30:55 +00:00
|
|
|
else
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->hide ((GdkWindow *)w);
|
2009-08-11 09:30:55 +00:00
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
return FALSE;
|
2009-07-18 18:29:50 +00:00
|
|
|
}
|
|
|
|
|
2009-08-11 09:30:55 +00:00
|
|
|
/* Returns TRUE If the native window was mapped or unmapped */
|
|
|
|
gboolean
|
2009-07-18 18:29:50 +00:00
|
|
|
_gdk_window_update_viewable (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *priv = (GdkWindowObject *)window;
|
|
|
|
gboolean viewable;
|
|
|
|
|
|
|
|
if (priv->window_type == GDK_WINDOW_FOREIGN ||
|
|
|
|
priv->window_type == GDK_WINDOW_ROOT)
|
|
|
|
viewable = TRUE;
|
2009-08-31 08:59:21 +00:00
|
|
|
else if (gdk_window_is_toplevel (priv) ||
|
2009-07-18 18:29:50 +00:00
|
|
|
priv->parent->viewable)
|
|
|
|
viewable = GDK_WINDOW_IS_MAPPED (priv);
|
|
|
|
else
|
|
|
|
viewable = FALSE;
|
|
|
|
|
2009-08-11 09:30:55 +00:00
|
|
|
return set_viewable (priv, viewable);
|
2009-07-18 18:29:50 +00:00
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static void
|
|
|
|
gdk_window_show_internal (GdkWindow *window, gboolean raise)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2009-08-11 09:30:55 +00:00
|
|
|
gboolean was_mapped, was_viewable;
|
|
|
|
gboolean did_show;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
if (private->destroyed)
|
|
|
|
return;
|
|
|
|
|
|
|
|
was_mapped = GDK_WINDOW_IS_MAPPED (window);
|
2009-08-11 09:30:55 +00:00
|
|
|
was_viewable = private->viewable;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (raise)
|
2009-01-19 09:40:13 +00:00
|
|
|
/* Keep children in (reverse) stacking order */
|
|
|
|
gdk_window_raise_internal (window);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
if (gdk_window_has_impl (private))
|
2008-12-18 10:30:10 +00:00
|
|
|
{
|
2008-12-18 13:29:28 +00:00
|
|
|
if (!was_mapped)
|
2008-12-18 10:30:10 +00:00
|
|
|
gdk_synthesize_window_state (window,
|
|
|
|
GDK_WINDOW_STATE_WITHDRAWN,
|
|
|
|
0);
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
else
|
|
|
|
{
|
2008-12-18 13:29:28 +00:00
|
|
|
private->state = 0;
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
2009-08-11 09:30:55 +00:00
|
|
|
did_show = _gdk_window_update_viewable (window);
|
2009-07-18 18:29:50 +00:00
|
|
|
|
2009-08-11 09:30:55 +00:00
|
|
|
/* If it was already viewable the backend show op won't be called, call it
|
|
|
|
again to ensure things happen right if the mapped tracking was not right
|
|
|
|
for e.g. a foreign window.
|
|
|
|
Dunno if this is strictly needed but its what happened pre-csw.
|
|
|
|
Also show if not done by gdk_window_update_viewable. */
|
|
|
|
if (gdk_window_has_impl (private) && (was_viewable || !did_show))
|
2009-08-31 08:44:11 +00:00
|
|
|
{
|
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
impl_iface->show ((GdkWindow *)private,
|
|
|
|
!did_show ? was_mapped : TRUE);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-07-08 16:36:24 +00:00
|
|
|
if (!was_mapped && !gdk_window_has_impl (private))
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
if (private->event_mask & GDK_STRUCTURE_MASK)
|
|
|
|
_gdk_make_event (GDK_WINDOW (private), GDK_MAP, NULL, FALSE);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (private->parent && private->parent->event_mask & GDK_SUBSTRUCTURE_MASK)
|
|
|
|
_gdk_make_event (GDK_WINDOW (private), GDK_MAP, NULL, FALSE);
|
|
|
|
}
|
2009-05-26 18:53:48 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (!was_mapped || raise)
|
|
|
|
{
|
|
|
|
recompute_visible_regions (private, TRUE, FALSE);
|
2009-05-26 18:53:48 +00:00
|
|
|
|
|
|
|
/* If any decendants became visible we need to send visibility notify */
|
|
|
|
gdk_window_update_visibility_recursively (private, NULL);
|
|
|
|
|
2008-12-18 13:29:28 +00:00
|
|
|
if (gdk_window_is_viewable (window))
|
|
|
|
{
|
2009-06-18 18:58:13 +00:00
|
|
|
_gdk_synthesize_crossing_events_for_geometry_change (window);
|
2009-11-04 13:03:04 +00:00
|
|
|
gdk_window_invalidate_rect_full (window, NULL, TRUE, CLEAR_BG_ALL);
|
2008-12-18 13:29:28 +00:00
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
}
|
2009-05-26 18:53:48 +00:00
|
|
|
|
2008-06-27 14:27:44 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_show_unraised:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
*
|
|
|
|
* Shows a #GdkWindow onscreen, but does not modify its stacking
|
|
|
|
* order. In contrast, gdk_window_show() will raise the window
|
|
|
|
* to the top of the window stack.
|
|
|
|
*
|
|
|
|
* On the X11 platform, in Xlib terms, this function calls
|
|
|
|
* XMapWindow() (it also updates some internal GDK state, which means
|
|
|
|
* that you can't really use XMapWindow() directly on a GDK window).
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
gdk_window_show_unraised (GdkWindow *window)
|
|
|
|
{
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_window_show_internal (window, FALSE);
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_raise:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
*
|
|
|
|
* Raises @window to the top of the Z-order (stacking order), so that
|
|
|
|
* other windows with the same parent window appear below @window.
|
|
|
|
* This is true whether or not the windows are visible.
|
|
|
|
*
|
|
|
|
* If @window is a toplevel, the window manager may choose to deny the
|
|
|
|
* request to move the window in the Z-order, gdk_window_raise() only
|
|
|
|
* requests the restack, does not guarantee it.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
gdk_window_raise (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
2009-08-10 13:35:33 +00:00
|
|
|
GdkRegion *old_region, *new_region;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
if (private->destroyed)
|
|
|
|
return;
|
|
|
|
|
2009-09-14 11:44:09 +00:00
|
|
|
gdk_window_flush_if_exposing (window);
|
|
|
|
|
2009-08-10 13:35:33 +00:00
|
|
|
old_region = NULL;
|
|
|
|
if (gdk_window_is_viewable (window) &&
|
|
|
|
!private->input_only)
|
|
|
|
old_region = gdk_region_copy (private->clip_region);
|
|
|
|
|
2008-06-27 14:27:44 +00:00
|
|
|
/* Keep children in (reverse) stacking order */
|
|
|
|
gdk_window_raise_internal (window);
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
recompute_visible_regions (private, TRUE, FALSE);
|
2008-12-18 13:29:28 +00:00
|
|
|
|
2009-08-10 13:35:33 +00:00
|
|
|
if (old_region)
|
|
|
|
{
|
|
|
|
new_region = gdk_region_copy (private->clip_region);
|
|
|
|
|
|
|
|
gdk_region_subtract (new_region, old_region);
|
2009-11-04 13:03:04 +00:00
|
|
|
gdk_window_invalidate_region_full (window, new_region, TRUE, CLEAR_BG_ALL);
|
2009-08-10 13:35:33 +00:00
|
|
|
|
|
|
|
gdk_region_destroy (old_region);
|
|
|
|
gdk_region_destroy (new_region);
|
|
|
|
}
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
gdk_window_lower_internal (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
|
|
|
GdkWindowObject *parent = private->parent;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2009-01-19 13:41:08 +00:00
|
|
|
GdkWindowObject *above;
|
|
|
|
GList *native_children;
|
|
|
|
GList *l, listhead;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
if (parent)
|
|
|
|
{
|
|
|
|
parent->children = g_list_remove (parent->children, window);
|
|
|
|
parent->children = g_list_append (parent->children, window);
|
|
|
|
}
|
2009-01-19 09:40:13 +00:00
|
|
|
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
2009-01-19 13:41:08 +00:00
|
|
|
/* Just do native lower for toplevels */
|
2009-08-31 08:59:21 +00:00
|
|
|
if (gdk_window_is_toplevel (private) ||
|
2009-08-24 13:18:10 +00:00
|
|
|
/* The restack_under codepath should work correctly even if the parent
|
|
|
|
is native, but it relies on the order of ->children to be correct,
|
|
|
|
and some apps like SWT reorder the x windows without gdks knowledge,
|
|
|
|
so we use lower directly in order to make these behave as before
|
|
|
|
when using native windows */
|
|
|
|
(gdk_window_has_impl (private) && gdk_window_has_impl (parent)))
|
2009-01-19 13:41:08 +00:00
|
|
|
{
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->lower (window);
|
2009-01-19 13:41:08 +00:00
|
|
|
}
|
|
|
|
else if (gdk_window_has_impl (private))
|
|
|
|
{
|
|
|
|
above = find_native_sibling_above (parent, private);
|
|
|
|
if (above)
|
|
|
|
{
|
|
|
|
listhead.data = window;
|
|
|
|
listhead.next = NULL;
|
|
|
|
listhead.prev = NULL;
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->restack_under ((GdkWindow *)above, &listhead);
|
2009-01-19 13:41:08 +00:00
|
|
|
}
|
|
|
|
else
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->raise (window);
|
2009-01-19 13:41:08 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
native_children = NULL;
|
|
|
|
get_all_native_children (private, &native_children);
|
|
|
|
if (native_children != NULL)
|
|
|
|
{
|
|
|
|
above = find_native_sibling_above (parent, private);
|
|
|
|
|
|
|
|
if (above)
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->restack_under ((GdkWindow *)above,
|
|
|
|
native_children);
|
2009-01-19 13:41:08 +00:00
|
|
|
else
|
|
|
|
{
|
2009-06-24 18:59:29 +00:00
|
|
|
/* Right order, since native_children is bottom-topmost first */
|
2009-01-19 13:41:08 +00:00
|
|
|
for (l = native_children; l != NULL; l = l->next)
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->raise (l->data);
|
2009-01-19 13:41:08 +00:00
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-19 13:41:08 +00:00
|
|
|
g_list_free (native_children);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-19 13:41:08 +00:00
|
|
|
}
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static void
|
|
|
|
gdk_window_invalidate_in_parent (GdkWindowObject *private)
|
|
|
|
{
|
|
|
|
GdkRectangle r, child;
|
|
|
|
|
2009-08-31 08:59:21 +00:00
|
|
|
if (gdk_window_is_toplevel (private))
|
2008-07-18 13:03:42 +00:00
|
|
|
return;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* get the visible rectangle of the parent */
|
|
|
|
r.x = r.y = 0;
|
|
|
|
r.width = private->parent->width;
|
|
|
|
r.height = private->parent->height;
|
|
|
|
|
|
|
|
child.x = private->x;
|
|
|
|
child.y = private->y;
|
|
|
|
child.width = private->width;
|
|
|
|
child.height = private->height;
|
|
|
|
gdk_rectangle_intersect (&r, &child, &r);
|
|
|
|
|
2009-11-04 13:03:04 +00:00
|
|
|
gdk_window_invalidate_rect_full (GDK_WINDOW (private->parent), &r, TRUE, CLEAR_BG_ALL);
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-06-27 14:27:44 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_lower:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
*
|
|
|
|
* Lowers @window to the bottom of the Z-order (stacking order), so that
|
|
|
|
* other windows with the same parent window appear above @window.
|
|
|
|
* This is true whether or not the other windows are visible.
|
|
|
|
*
|
|
|
|
* If @window is a toplevel, the window manager may choose to deny the
|
|
|
|
* request to move the window in the Z-order, gdk_window_lower() only
|
|
|
|
* requests the restack, does not guarantee it.
|
|
|
|
*
|
|
|
|
* Note that gdk_window_show() raises the window again, so don't call this
|
|
|
|
* function before gdk_window_show(). (Try gdk_window_show_unraised().)
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
gdk_window_lower (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
if (private->destroyed)
|
|
|
|
return;
|
|
|
|
|
2009-09-14 11:44:09 +00:00
|
|
|
gdk_window_flush_if_exposing (window);
|
|
|
|
|
2008-06-27 14:27:44 +00:00
|
|
|
/* Keep children in (reverse) stacking order */
|
|
|
|
gdk_window_lower_internal (window);
|
|
|
|
|
2008-12-18 13:29:28 +00:00
|
|
|
recompute_visible_regions (private, TRUE, FALSE);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-18 18:58:13 +00:00
|
|
|
_gdk_synthesize_crossing_events_for_geometry_change (window);
|
2008-12-18 13:29:28 +00:00
|
|
|
gdk_window_invalidate_in_parent (private);
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
2009-09-02 21:38:55 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_restack:
|
|
|
|
* @window: a #GdkWindow
|
2010-02-19 16:53:17 +00:00
|
|
|
* @sibling: (allow-none): a #GdkWindow that is a sibling of @window, or %NULL
|
2009-09-02 21:38:55 +00:00
|
|
|
* @above: a boolean
|
|
|
|
*
|
|
|
|
* Changes the position of @window in the Z-order (stacking order), so that
|
|
|
|
* it is above @sibling (if @above is %TRUE) or below @sibling (if @above is
|
|
|
|
* %FALSE).
|
|
|
|
*
|
|
|
|
* If @sibling is %NULL, then this either raises (if @above is %TRUE) or
|
|
|
|
* lowers the window.
|
|
|
|
*
|
|
|
|
* If @window is a toplevel, the window manager may choose to deny the
|
|
|
|
* request to move the window in the Z-order, gdk_window_restack() only
|
|
|
|
* requests the restack, does not guarantee it.
|
|
|
|
*
|
|
|
|
* Since: 2.18
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
gdk_window_restack (GdkWindow *window,
|
|
|
|
GdkWindow *sibling,
|
|
|
|
gboolean above)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
|
|
|
GdkWindowImplIface *impl_iface;
|
|
|
|
GdkWindowObject *parent;
|
|
|
|
GdkWindowObject *above_native;
|
|
|
|
GList *sibling_link;
|
|
|
|
GList *native_children;
|
|
|
|
GList *l, listhead;
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
g_return_if_fail (sibling == NULL || GDK_IS_WINDOW (sibling));
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
if (private->destroyed)
|
|
|
|
return;
|
|
|
|
|
|
|
|
if (sibling == NULL)
|
|
|
|
{
|
|
|
|
if (above)
|
|
|
|
gdk_window_raise (window);
|
|
|
|
else
|
|
|
|
gdk_window_lower (window);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2009-09-14 11:44:09 +00:00
|
|
|
gdk_window_flush_if_exposing (window);
|
|
|
|
|
2009-09-02 21:38:55 +00:00
|
|
|
if (gdk_window_is_toplevel (private))
|
|
|
|
{
|
2009-09-04 09:08:46 +00:00
|
|
|
g_return_if_fail (gdk_window_is_toplevel (GDK_WINDOW_OBJECT (sibling)));
|
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
2009-09-02 21:38:55 +00:00
|
|
|
impl_iface->restack_toplevel (window, sibling, above);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
parent = private->parent;
|
|
|
|
if (parent)
|
|
|
|
{
|
|
|
|
sibling_link = g_list_find (parent->children, sibling);
|
|
|
|
g_return_if_fail (sibling_link != NULL);
|
|
|
|
if (sibling_link == NULL)
|
|
|
|
return;
|
|
|
|
|
|
|
|
parent->children = g_list_remove (parent->children, window);
|
|
|
|
if (above)
|
|
|
|
parent->children = g_list_insert_before (parent->children,
|
|
|
|
sibling_link,
|
|
|
|
window);
|
|
|
|
else
|
|
|
|
parent->children = g_list_insert_before (parent->children,
|
|
|
|
sibling_link->next,
|
|
|
|
window);
|
|
|
|
|
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
if (gdk_window_has_impl (private))
|
|
|
|
{
|
|
|
|
above_native = find_native_sibling_above (parent, private);
|
|
|
|
if (above_native)
|
|
|
|
{
|
|
|
|
listhead.data = window;
|
|
|
|
listhead.next = NULL;
|
|
|
|
listhead.prev = NULL;
|
|
|
|
impl_iface->restack_under ((GdkWindow *)above_native, &listhead);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
impl_iface->raise (window);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
native_children = NULL;
|
|
|
|
get_all_native_children (private, &native_children);
|
|
|
|
if (native_children != NULL)
|
|
|
|
{
|
|
|
|
above_native = find_native_sibling_above (parent, private);
|
|
|
|
if (above_native)
|
|
|
|
impl_iface->restack_under ((GdkWindow *)above_native,
|
|
|
|
native_children);
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* Right order, since native_children is bottom-topmost first */
|
|
|
|
for (l = native_children; l != NULL; l = l->next)
|
|
|
|
impl_iface->raise (l->data);
|
|
|
|
}
|
|
|
|
|
|
|
|
g_list_free (native_children);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
recompute_visible_regions (private, TRUE, FALSE);
|
|
|
|
|
|
|
|
_gdk_synthesize_crossing_events_for_geometry_change (window);
|
|
|
|
gdk_window_invalidate_in_parent (private);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-06-27 14:27:44 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_show:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
*
|
|
|
|
* Like gdk_window_show_unraised(), but also raises the window to the
|
|
|
|
* top of the window stack (moves the window to the front of the
|
|
|
|
* Z-order).
|
|
|
|
*
|
|
|
|
* This function maps a window so it's visible onscreen. Its opposite
|
|
|
|
* is gdk_window_hide().
|
|
|
|
*
|
|
|
|
* When implementing a #GtkWidget, you should call this function on the widget's
|
|
|
|
* #GdkWindow as part of the "map" method.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
gdk_window_show (GdkWindow *window)
|
|
|
|
{
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_window_show_internal (window, TRUE);
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_hide:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
*
|
|
|
|
* For toplevel windows, withdraws them, so they will no longer be
|
|
|
|
* known to the window manager; for all windows, unmaps them, so
|
|
|
|
* they won't be displayed. Normally done automatically as
|
|
|
|
* part of gtk_widget_hide().
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
gdk_window_hide (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2009-08-11 09:30:55 +00:00
|
|
|
gboolean was_mapped, did_hide;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
if (private->destroyed)
|
|
|
|
return;
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
was_mapped = GDK_WINDOW_IS_MAPPED (private);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (gdk_window_has_impl (private))
|
2008-12-18 10:30:10 +00:00
|
|
|
{
|
|
|
|
|
|
|
|
if (GDK_WINDOW_IS_MAPPED (window))
|
2009-06-01 10:04:36 +00:00
|
|
|
gdk_synthesize_window_state (window,
|
|
|
|
0,
|
|
|
|
GDK_WINDOW_STATE_WITHDRAWN);
|
2008-12-18 10:30:10 +00:00
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
else if (was_mapped)
|
|
|
|
{
|
|
|
|
GdkDisplay *display;
|
|
|
|
|
|
|
|
/* May need to break grabs on children */
|
|
|
|
display = gdk_drawable_get_display (window);
|
|
|
|
|
2009-01-31 18:42:44 +00:00
|
|
|
if (_gdk_display_end_pointer_grab (display,
|
|
|
|
_gdk_windowing_window_get_next_serial (display),
|
|
|
|
window,
|
|
|
|
TRUE))
|
|
|
|
gdk_display_pointer_ungrab (display, GDK_CURRENT_TIME);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-01-23 14:39:04 +00:00
|
|
|
if (display->keyboard_grab.window != NULL)
|
|
|
|
{
|
|
|
|
if (is_parent_of (window, display->keyboard_grab.window))
|
|
|
|
{
|
|
|
|
/* Call this ourselves, even though gdk_display_keyboard_ungrab
|
|
|
|
does so too, since we want to pass implicit == TRUE so the
|
|
|
|
broken grab event is generated */
|
|
|
|
_gdk_display_unset_has_keyboard_grab (display,
|
|
|
|
TRUE);
|
|
|
|
gdk_display_keyboard_ungrab (display, GDK_CURRENT_TIME);
|
|
|
|
}
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
private->state = GDK_WINDOW_STATE_WITHDRAWN;
|
|
|
|
}
|
|
|
|
|
2009-08-11 09:30:55 +00:00
|
|
|
did_hide = _gdk_window_update_viewable (window);
|
2009-07-18 18:29:50 +00:00
|
|
|
|
2009-08-11 09:30:55 +00:00
|
|
|
/* Hide foreign window as those are not handled by update_viewable. */
|
|
|
|
if (gdk_window_has_impl (private) && (!did_hide))
|
2009-08-31 08:44:11 +00:00
|
|
|
{
|
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
impl_iface->hide (window);
|
|
|
|
}
|
2009-05-26 18:53:48 +00:00
|
|
|
|
2008-12-18 13:29:28 +00:00
|
|
|
recompute_visible_regions (private, TRUE, FALSE);
|
2009-05-26 18:53:48 +00:00
|
|
|
|
|
|
|
/* all decendants became non-visible, we need to send visibility notify */
|
|
|
|
gdk_window_update_visibility_recursively (private, NULL);
|
|
|
|
|
2009-07-08 16:36:24 +00:00
|
|
|
if (was_mapped && !gdk_window_has_impl (private))
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
if (private->event_mask & GDK_STRUCTURE_MASK)
|
|
|
|
_gdk_make_event (GDK_WINDOW (private), GDK_UNMAP, NULL, FALSE);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (private->parent && private->parent->event_mask & GDK_SUBSTRUCTURE_MASK)
|
|
|
|
_gdk_make_event (GDK_WINDOW (private), GDK_UNMAP, NULL, FALSE);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-18 18:58:13 +00:00
|
|
|
_gdk_synthesize_crossing_events_for_geometry_change (GDK_WINDOW (private->parent));
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-18 13:29:28 +00:00
|
|
|
/* Invalidate the rect */
|
2009-11-03 13:41:36 +00:00
|
|
|
if (was_mapped)
|
|
|
|
gdk_window_invalidate_in_parent (private);
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_withdraw:
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
*
|
|
|
|
* Withdraws a window (unmaps it and asks the window manager to forget about it).
|
|
|
|
* This function is not really useful as gdk_window_hide() automatically
|
|
|
|
* withdraws toplevel windows before hiding them.
|
|
|
|
**/
|
|
|
|
void
|
|
|
|
gdk_window_withdraw (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2008-07-18 13:03:42 +00:00
|
|
|
gboolean was_mapped;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
if (private->destroyed)
|
|
|
|
return;
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
was_mapped = GDK_WINDOW_IS_MAPPED (private);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (gdk_window_has_impl (private))
|
|
|
|
{
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
impl_iface->withdraw (window);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (was_mapped)
|
|
|
|
{
|
|
|
|
if (private->event_mask & GDK_STRUCTURE_MASK)
|
|
|
|
_gdk_make_event (GDK_WINDOW (private), GDK_UNMAP, NULL, FALSE);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (private->parent && private->parent->event_mask & GDK_SUBSTRUCTURE_MASK)
|
|
|
|
_gdk_make_event (GDK_WINDOW (private), GDK_UNMAP, NULL, FALSE);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-18 18:58:13 +00:00
|
|
|
_gdk_synthesize_crossing_events_for_geometry_change (GDK_WINDOW (private->parent));
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
recompute_visible_regions (private, TRUE, FALSE);
|
|
|
|
}
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_set_events:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @event_mask: event mask for @window
|
|
|
|
*
|
|
|
|
* The event mask for a window determines which events will be reported
|
|
|
|
* for that window. For example, an event mask including #GDK_BUTTON_PRESS_MASK
|
|
|
|
* means the window should report button press events. The event mask
|
|
|
|
* is the bitwise OR of values from the #GdkEventMask enumeration.
|
|
|
|
**/
|
|
|
|
void
|
|
|
|
gdk_window_set_events (GdkWindow *window,
|
|
|
|
GdkEventMask event_mask)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2009-01-23 12:04:44 +00:00
|
|
|
GdkDisplay *display;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-06-27 14:27:44 +00:00
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
if (private->destroyed)
|
|
|
|
return;
|
|
|
|
|
2009-01-23 12:04:44 +00:00
|
|
|
/* If motion hint is disabled, enable motion events again */
|
|
|
|
display = gdk_drawable_get_display (window);
|
|
|
|
if ((private->event_mask & GDK_POINTER_MOTION_HINT_MASK) &&
|
|
|
|
!(event_mask & GDK_POINTER_MOTION_HINT_MASK))
|
2009-01-23 20:07:53 +00:00
|
|
|
_gdk_display_enable_motion_hints (display);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
private->event_mask = event_mask;
|
2009-02-04 10:22:54 +00:00
|
|
|
|
|
|
|
if (gdk_window_has_impl (private))
|
2009-08-31 08:44:11 +00:00
|
|
|
{
|
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
impl_iface->set_events (window,
|
|
|
|
get_native_event_mask (private));
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_get_events:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
*
|
|
|
|
* Gets the event mask for @window. See gdk_window_set_events().
|
|
|
|
*
|
|
|
|
* Return value: event mask for @window
|
|
|
|
**/
|
|
|
|
GdkEventMask
|
|
|
|
gdk_window_get_events (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
if (private->destroyed)
|
|
|
|
return 0;
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
return private->event_mask;
|
|
|
|
}
|
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
static void
|
|
|
|
gdk_window_move_resize_toplevel (GdkWindow *window,
|
|
|
|
gboolean with_move,
|
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
gint width,
|
|
|
|
gint height)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
|
|
|
GdkRegion *old_region, *new_region;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2009-01-20 22:03:16 +00:00
|
|
|
gboolean expose;
|
|
|
|
int old_x, old_y, old_abs_x, old_abs_y;
|
|
|
|
int dx, dy;
|
|
|
|
gboolean is_resize;
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
|
|
|
|
expose = FALSE;
|
|
|
|
old_region = NULL;
|
|
|
|
|
|
|
|
old_x = private->x;
|
|
|
|
old_y = private->y;
|
|
|
|
|
|
|
|
is_resize = (width != -1) || (height != -1);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-07-10 22:28:18 +00:00
|
|
|
if (gdk_window_is_viewable (window) &&
|
2009-01-20 22:03:16 +00:00
|
|
|
!private->input_only)
|
|
|
|
{
|
|
|
|
expose = TRUE;
|
|
|
|
old_region = gdk_region_copy (private->clip_region);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
impl_iface->move_resize (window, with_move, x, y, width, height);
|
2009-01-20 22:03:16 +00:00
|
|
|
|
|
|
|
dx = private->x - old_x;
|
|
|
|
dy = private->y - old_y;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
old_abs_x = private->abs_x;
|
|
|
|
old_abs_y = private->abs_y;
|
|
|
|
|
|
|
|
/* Avoid recomputing for pure toplevel moves, for performance reasons */
|
|
|
|
if (is_resize)
|
|
|
|
recompute_visible_regions (private, TRUE, FALSE);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
if (expose)
|
|
|
|
{
|
|
|
|
new_region = gdk_region_copy (private->clip_region);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
/* This is the newly exposed area (due to any resize),
|
|
|
|
* X will expose it, but lets do that without the
|
|
|
|
* roundtrip
|
|
|
|
*/
|
|
|
|
gdk_region_subtract (new_region, old_region);
|
2009-11-04 13:03:04 +00:00
|
|
|
gdk_window_invalidate_region_full (window, new_region, TRUE, CLEAR_BG_WINCLEARED);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
gdk_region_destroy (old_region);
|
|
|
|
gdk_region_destroy (new_region);
|
|
|
|
}
|
|
|
|
|
2009-06-18 18:58:13 +00:00
|
|
|
_gdk_synthesize_crossing_events_for_geometry_change (window);
|
2009-01-20 22:03:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static void
|
|
|
|
move_native_children (GdkWindowObject *private)
|
|
|
|
{
|
|
|
|
GList *l;
|
|
|
|
GdkWindowObject *child;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
for (l = private->children; l; l = l->next)
|
|
|
|
{
|
|
|
|
child = l->data;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (child->impl != private->impl)
|
2009-08-31 08:44:11 +00:00
|
|
|
{
|
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (child->impl);
|
|
|
|
impl_iface->move_resize ((GdkWindow *)child, TRUE,
|
|
|
|
child->x, child->y,
|
|
|
|
child->width, child->height);
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
else
|
|
|
|
move_native_children (child);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
static gboolean
|
|
|
|
collect_native_child_region_helper (GdkWindowObject *window,
|
|
|
|
GdkWindow *impl,
|
|
|
|
GdkRegion **region,
|
|
|
|
int x_offset,
|
|
|
|
int y_offset)
|
|
|
|
{
|
|
|
|
GdkWindowObject *child;
|
|
|
|
GdkRegion *tmp;
|
|
|
|
GList *l;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
for (l = window->children; l != NULL; l = l->next)
|
|
|
|
{
|
|
|
|
child = l->data;
|
|
|
|
|
2009-07-18 19:53:15 +00:00
|
|
|
if (!GDK_WINDOW_IS_MAPPED (child) || child->input_only)
|
|
|
|
continue;
|
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
if (child->impl != impl)
|
|
|
|
{
|
|
|
|
tmp = gdk_region_copy (child->clip_region);
|
|
|
|
gdk_region_offset (tmp,
|
|
|
|
x_offset + child->x,
|
|
|
|
y_offset + child->y);
|
|
|
|
if (*region == NULL)
|
|
|
|
*region = tmp;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gdk_region_union (*region, tmp);
|
|
|
|
gdk_region_destroy (tmp);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
collect_native_child_region_helper (child, impl, region,
|
|
|
|
x_offset + child->x,
|
|
|
|
y_offset + child->y);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static GdkRegion *
|
2009-01-21 12:44:39 +00:00
|
|
|
collect_native_child_region (GdkWindowObject *window,
|
|
|
|
gboolean include_this)
|
2009-01-20 22:03:16 +00:00
|
|
|
{
|
|
|
|
GdkRegion *region;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-07-18 19:53:15 +00:00
|
|
|
if (include_this && gdk_window_has_impl (window) && window->viewable)
|
2009-01-20 22:03:16 +00:00
|
|
|
return gdk_region_copy (window->clip_region);
|
|
|
|
|
|
|
|
region = NULL;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
collect_native_child_region_helper (window, window->impl, ®ion, 0, 0);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
return region;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static void
|
|
|
|
gdk_window_move_resize_internal (GdkWindow *window,
|
|
|
|
gboolean with_move,
|
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
gint width,
|
|
|
|
gint height)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
|
|
|
GdkRegion *old_region, *new_region, *copy_area;
|
2009-01-20 22:03:16 +00:00
|
|
|
GdkRegion *old_native_child_region, *new_native_child_region;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkWindowObject *impl_window;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2008-07-18 13:03:42 +00:00
|
|
|
gboolean expose;
|
|
|
|
int old_x, old_y, old_abs_x, old_abs_y;
|
|
|
|
int dx, dy;
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
if (private->destroyed)
|
|
|
|
return;
|
|
|
|
|
2009-08-31 08:59:21 +00:00
|
|
|
if (gdk_window_is_toplevel (private))
|
2009-01-20 22:03:16 +00:00
|
|
|
{
|
|
|
|
gdk_window_move_resize_toplevel (window, with_move, x, y, width, height);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2009-09-14 11:09:07 +00:00
|
|
|
/* Bail early if no change */
|
|
|
|
if (private->width == width &&
|
|
|
|
private->height == height &&
|
|
|
|
(!with_move ||
|
|
|
|
(private->x == x &&
|
|
|
|
private->y == y)))
|
|
|
|
return;
|
|
|
|
|
2009-09-14 11:44:09 +00:00
|
|
|
gdk_window_flush_if_exposing (window);
|
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
/* Handle child windows */
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
expose = FALSE;
|
|
|
|
old_region = NULL;
|
|
|
|
|
|
|
|
impl_window = gdk_window_get_impl_window (private);
|
|
|
|
|
|
|
|
old_x = private->x;
|
|
|
|
old_y = private->y;
|
2009-01-19 14:44:09 +00:00
|
|
|
|
2009-07-18 19:53:15 +00:00
|
|
|
old_native_child_region = NULL;
|
2009-07-10 22:28:18 +00:00
|
|
|
if (gdk_window_is_viewable (window) &&
|
2009-01-19 14:44:09 +00:00
|
|
|
!private->input_only)
|
|
|
|
{
|
|
|
|
expose = TRUE;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-19 14:44:09 +00:00
|
|
|
old_region = gdk_region_copy (private->clip_region);
|
|
|
|
/* Adjust region to parent window coords */
|
|
|
|
gdk_region_offset (old_region, private->x, private->y);
|
2009-01-20 22:03:16 +00:00
|
|
|
|
2009-07-18 19:53:15 +00:00
|
|
|
old_native_child_region = collect_native_child_region (private, TRUE);
|
|
|
|
if (old_native_child_region)
|
|
|
|
{
|
|
|
|
/* Adjust region to parent window coords */
|
|
|
|
gdk_region_offset (old_native_child_region, private->x, private->y);
|
|
|
|
|
|
|
|
/* Any native window move will immediately copy stuff to the destination, which may overwrite a
|
|
|
|
* source or destination for a delayed GdkWindowRegionMove. So, we need
|
|
|
|
* to flush those here for the parent window and all overlapped subwindows
|
|
|
|
* of it. And we need to do this before setting the new clips as those will be
|
|
|
|
* affecting this.
|
|
|
|
*/
|
|
|
|
gdk_window_flush_recursive (private->parent);
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
/* Set the new position and size */
|
|
|
|
if (with_move)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
2009-01-20 22:03:16 +00:00
|
|
|
private->x = x;
|
|
|
|
private->y = y;
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
2009-01-20 22:03:16 +00:00
|
|
|
if (!(width < 0 && height < 0))
|
|
|
|
{
|
|
|
|
if (width < 1)
|
|
|
|
width = 1;
|
|
|
|
private->width = width;
|
|
|
|
if (height < 1)
|
|
|
|
height = 1;
|
|
|
|
private->height = height;
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
dx = private->x - old_x;
|
|
|
|
dy = private->y - old_y;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
old_abs_x = private->abs_x;
|
|
|
|
old_abs_y = private->abs_y;
|
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
recompute_visible_regions (private, TRUE, FALSE);
|
|
|
|
|
|
|
|
new_native_child_region = NULL;
|
|
|
|
if (old_native_child_region)
|
|
|
|
{
|
2009-01-21 12:44:39 +00:00
|
|
|
new_native_child_region = collect_native_child_region (private, TRUE);
|
2009-01-20 22:03:16 +00:00
|
|
|
/* Adjust region to parent window coords */
|
|
|
|
gdk_region_offset (new_native_child_region, private->x, private->y);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
if (gdk_window_has_impl (private))
|
|
|
|
{
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
/* Do the actual move after recomputing things, as this will have set the shape to
|
|
|
|
the now correct one, thus avoiding copying regions that should not be copied. */
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface->move_resize (window, TRUE,
|
|
|
|
private->x, private->y,
|
|
|
|
private->width, private->height);
|
2009-01-20 22:03:16 +00:00
|
|
|
}
|
|
|
|
else if (old_abs_x != private->abs_x ||
|
|
|
|
old_abs_y != private->abs_y)
|
2009-01-19 14:44:09 +00:00
|
|
|
move_native_children (private);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (expose)
|
|
|
|
{
|
|
|
|
new_region = gdk_region_copy (private->clip_region);
|
|
|
|
/* Adjust region to parent window coords */
|
|
|
|
gdk_region_offset (new_region, private->x, private->y);
|
|
|
|
|
|
|
|
/* copy_area:
|
|
|
|
* Part of the data at the new location can be copied from the
|
|
|
|
* old location, this area is the intersection of the old region
|
|
|
|
* moved as the copy will move it and then intersected with
|
|
|
|
* the new region.
|
|
|
|
*
|
|
|
|
* new_region:
|
|
|
|
* Everything in the old and new regions that is not copied must be
|
2009-06-01 10:04:36 +00:00
|
|
|
* invalidated (including children) as this is newly exposed
|
2008-07-18 13:03:42 +00:00
|
|
|
*/
|
|
|
|
copy_area = gdk_region_copy (new_region);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
gdk_region_union (new_region, old_region);
|
|
|
|
|
|
|
|
if (old_native_child_region)
|
|
|
|
{
|
|
|
|
/* Don't copy from inside native children, as this is copied by
|
|
|
|
* the native window move.
|
|
|
|
*/
|
|
|
|
gdk_region_subtract (old_region, old_native_child_region);
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_region_offset (old_region, dx, dy);
|
2009-01-20 22:03:16 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_region_intersect (copy_area, old_region);
|
2009-01-20 22:03:16 +00:00
|
|
|
|
|
|
|
if (new_native_child_region)
|
|
|
|
{
|
|
|
|
/* Don't copy any bits that would cause a read from the moved
|
|
|
|
native windows, as we can't read that data */
|
|
|
|
gdk_region_offset (new_native_child_region, dx, dy);
|
|
|
|
gdk_region_subtract (copy_area, new_native_child_region);
|
2009-11-03 13:47:31 +00:00
|
|
|
gdk_region_offset (new_native_child_region, -dx, -dy);
|
2009-01-20 22:03:16 +00:00
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_region_subtract (new_region, copy_area);
|
|
|
|
|
|
|
|
/* Convert old region to impl coords */
|
|
|
|
gdk_region_offset (old_region, -dx + private->abs_x - private->x, -dy + private->abs_y - private->y);
|
|
|
|
|
2008-12-09 12:33:26 +00:00
|
|
|
/* convert from parent coords to impl */
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_region_offset (copy_area, private->abs_x - private->x, private->abs_y - private->y);
|
|
|
|
|
2009-02-08 12:35:17 +00:00
|
|
|
move_region_on_impl (impl_window, copy_area, dx, dy); /* takes ownership of copy_area */
|
2008-12-09 12:33:26 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* Invalidate affected part in the parent window
|
|
|
|
* (no higher window should be affected)
|
|
|
|
* We also invalidate any children in that area, which could include
|
|
|
|
* this window if it still overlaps that area.
|
|
|
|
*/
|
2009-11-03 13:47:31 +00:00
|
|
|
if (old_native_child_region)
|
|
|
|
{
|
|
|
|
/* No need to expose the region that the native window move copies */
|
|
|
|
gdk_region_offset (old_native_child_region, dx, dy);
|
|
|
|
gdk_region_intersect (old_native_child_region, new_native_child_region);
|
|
|
|
gdk_region_subtract (new_region, old_native_child_region);
|
|
|
|
}
|
2009-11-04 13:03:04 +00:00
|
|
|
gdk_window_invalidate_region_full (GDK_WINDOW (private->parent), new_region, TRUE, CLEAR_BG_ALL);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
gdk_region_destroy (old_region);
|
|
|
|
gdk_region_destroy (new_region);
|
|
|
|
}
|
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
if (old_native_child_region)
|
|
|
|
{
|
|
|
|
gdk_region_destroy (old_native_child_region);
|
|
|
|
gdk_region_destroy (new_native_child_region);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-18 18:58:13 +00:00
|
|
|
_gdk_synthesize_crossing_events_for_geometry_change (window);
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
|
2008-06-27 14:27:44 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_move:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @x: X coordinate relative to window's parent
|
|
|
|
* @y: Y coordinate relative to window's parent
|
|
|
|
*
|
|
|
|
* Repositions a window relative to its parent window.
|
|
|
|
* For toplevel windows, window managers may ignore or modify the move;
|
|
|
|
* you should probably use gtk_window_move() on a #GtkWindow widget
|
|
|
|
* anyway, instead of using GDK functions. For child windows,
|
|
|
|
* the move will reliably succeed.
|
|
|
|
*
|
|
|
|
* If you're also planning to resize the window, use gdk_window_move_resize()
|
|
|
|
* to both move and resize simultaneously, for a nicer visual effect.
|
|
|
|
**/
|
|
|
|
void
|
|
|
|
gdk_window_move (GdkWindow *window,
|
|
|
|
gint x,
|
|
|
|
gint y)
|
|
|
|
{
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_window_move_resize_internal (window, TRUE, x, y, -1, -1);
|
|
|
|
}
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_resize:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @width: new width of the window
|
|
|
|
* @height: new height of the window
|
|
|
|
*
|
|
|
|
* Resizes @window; for toplevel windows, asks the window manager to resize
|
|
|
|
* the window. The window manager may not allow the resize. When using GTK+,
|
|
|
|
* use gtk_window_resize() instead of this low-level GDK function.
|
|
|
|
*
|
|
|
|
* Windows may not be resized below 1x1.
|
|
|
|
*
|
|
|
|
* If you're also planning to move the window, use gdk_window_move_resize()
|
|
|
|
* to both move and resize simultaneously, for a nicer visual effect.
|
|
|
|
**/
|
|
|
|
void
|
|
|
|
gdk_window_resize (GdkWindow *window,
|
|
|
|
gint width,
|
|
|
|
gint height)
|
|
|
|
{
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_window_move_resize_internal (window, FALSE, 0, 0, width, height);
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_move_resize:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @x: new X position relative to window's parent
|
|
|
|
* @y: new Y position relative to window's parent
|
|
|
|
* @width: new width
|
|
|
|
* @height: new height
|
|
|
|
*
|
|
|
|
* Equivalent to calling gdk_window_move() and gdk_window_resize(),
|
|
|
|
* except that both operations are performed at once, avoiding strange
|
|
|
|
* visual effects. (i.e. the user may be able to see the window first
|
|
|
|
* move, then resize, if you don't use gdk_window_move_resize().)
|
|
|
|
**/
|
|
|
|
void
|
|
|
|
gdk_window_move_resize (GdkWindow *window,
|
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
gint width,
|
|
|
|
gint height)
|
|
|
|
{
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_window_move_resize_internal (window, TRUE, x, y, width, height);
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_scroll:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @dx: Amount to scroll in the X direction
|
|
|
|
* @dy: Amount to scroll in the Y direction
|
|
|
|
*
|
|
|
|
* Scroll the contents of @window, both pixels and children, by the
|
|
|
|
* given amount. @window itself does not move. Portions of the window
|
|
|
|
* that the scroll operation brings in from offscreen areas are
|
|
|
|
* invalidated. The invalidated region may be bigger than what would
|
|
|
|
* strictly be necessary.
|
|
|
|
*
|
|
|
|
* For X11, a minimum area will be invalidated if the window has no
|
|
|
|
* subwindows, or if the edges of the window's parent do not extend
|
|
|
|
* beyond the edges of the window. In other cases, a multi-step process
|
|
|
|
* is used to scroll the window which may produce temporary visual
|
|
|
|
* artifacts and unnecessary invalidations.
|
|
|
|
**/
|
|
|
|
void
|
|
|
|
gdk_window_scroll (GdkWindow *window,
|
|
|
|
gint dx,
|
|
|
|
gint dy)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *) window;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkWindowObject *impl_window;
|
2009-02-08 12:10:42 +00:00
|
|
|
GdkRegion *copy_area, *noncopy_area;
|
2009-01-21 12:44:39 +00:00
|
|
|
GdkRegion *old_native_child_region, *new_native_child_region;
|
2008-07-18 13:03:42 +00:00
|
|
|
GList *tmp_list;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
if (dx == 0 && dy == 0)
|
|
|
|
return;
|
|
|
|
|
|
|
|
if (private->destroyed)
|
|
|
|
return;
|
|
|
|
|
2009-09-14 11:44:09 +00:00
|
|
|
gdk_window_flush_if_exposing (window);
|
|
|
|
|
2009-01-21 12:44:39 +00:00
|
|
|
old_native_child_region = collect_native_child_region (private, FALSE);
|
|
|
|
if (old_native_child_region)
|
|
|
|
{
|
|
|
|
/* Any native window move will immediately copy stuff to the destination, which may overwrite a
|
|
|
|
* source or destination for a delayed GdkWindowRegionMove. So, we need
|
|
|
|
* to flush those here for the window and all overlapped subwindows
|
|
|
|
* of it. And we need to do this before setting the new clips as those will be
|
|
|
|
* affecting this.
|
|
|
|
*/
|
|
|
|
gdk_window_flush_recursive (private);
|
|
|
|
}
|
|
|
|
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* First move all child windows, without causing invalidation */
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
tmp_list = private->children;
|
|
|
|
while (tmp_list)
|
|
|
|
{
|
|
|
|
GdkWindow *child = GDK_WINDOW (tmp_list->data);
|
|
|
|
GdkWindowObject *child_obj = GDK_WINDOW_OBJECT (child);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-18 10:43:57 +00:00
|
|
|
/* Just update the positions, the bits will move with the copy */
|
|
|
|
child_obj->x += dx;
|
|
|
|
child_obj->y += dy;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
tmp_list = tmp_list->next;
|
|
|
|
}
|
2008-12-18 10:43:57 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
recompute_visible_regions (private, FALSE, TRUE);
|
|
|
|
|
2009-01-21 12:44:39 +00:00
|
|
|
new_native_child_region = NULL;
|
|
|
|
if (old_native_child_region)
|
|
|
|
new_native_child_region = collect_native_child_region (private, FALSE);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-18 10:53:26 +00:00
|
|
|
move_native_children (private);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* Then copy the actual bits of the window w/ child windows */
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
impl_window = gdk_window_get_impl_window (private);
|
|
|
|
|
|
|
|
/* Calculate the area that can be gotten by copying the old area */
|
|
|
|
copy_area = gdk_region_copy (private->clip_region);
|
2009-01-21 12:44:39 +00:00
|
|
|
if (old_native_child_region)
|
|
|
|
{
|
|
|
|
/* Don't copy from inside native children, as this is copied by
|
|
|
|
* the native window move.
|
|
|
|
*/
|
|
|
|
gdk_region_subtract (copy_area, old_native_child_region);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-21 12:44:39 +00:00
|
|
|
/* Don't copy any bits that would cause a read from the moved
|
|
|
|
native windows, as we can't read that data */
|
|
|
|
gdk_region_subtract (copy_area, new_native_child_region);
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_region_offset (copy_area, dx, dy);
|
|
|
|
gdk_region_intersect (copy_area, private->clip_region);
|
|
|
|
|
|
|
|
/* And the rest need to be invalidated */
|
|
|
|
noncopy_area = gdk_region_copy (private->clip_region);
|
|
|
|
gdk_region_subtract (noncopy_area, copy_area);
|
|
|
|
|
2008-12-09 12:33:26 +00:00
|
|
|
/* convert from window coords to impl */
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_region_offset (copy_area, private->abs_x, private->abs_y);
|
|
|
|
|
2009-02-08 12:35:17 +00:00
|
|
|
move_region_on_impl (impl_window, copy_area, dx, dy); /* takes ownership of copy_area */
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* Invalidate not copied regions */
|
2009-11-03 13:47:31 +00:00
|
|
|
if (old_native_child_region)
|
|
|
|
{
|
|
|
|
/* No need to expose the region that the native window move copies */
|
|
|
|
gdk_region_offset (old_native_child_region, dx, dy);
|
|
|
|
gdk_region_intersect (old_native_child_region, new_native_child_region);
|
|
|
|
gdk_region_subtract (noncopy_area, old_native_child_region);
|
|
|
|
}
|
2009-11-04 13:03:04 +00:00
|
|
|
gdk_window_invalidate_region_full (window, noncopy_area, TRUE, CLEAR_BG_ALL);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
gdk_region_destroy (noncopy_area);
|
2009-01-21 12:44:39 +00:00
|
|
|
|
|
|
|
if (old_native_child_region)
|
|
|
|
{
|
|
|
|
gdk_region_destroy (old_native_child_region);
|
|
|
|
gdk_region_destroy (new_native_child_region);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-18 18:58:13 +00:00
|
|
|
_gdk_synthesize_crossing_events_for_geometry_change (window);
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_move_region:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @region: The #GdkRegion to move
|
|
|
|
* @dx: Amount to move in the X direction
|
|
|
|
* @dy: Amount to move in the Y direction
|
|
|
|
*
|
|
|
|
* Move the part of @window indicated by @region by @dy pixels in the Y
|
|
|
|
* direction and @dx pixels in the X direction. The portions of @region
|
|
|
|
* that not covered by the new position of @region are invalidated.
|
|
|
|
*
|
|
|
|
* Child windows are not moved.
|
|
|
|
*
|
|
|
|
* Since: 2.8
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
gdk_window_move_region (GdkWindow *window,
|
|
|
|
const GdkRegion *region,
|
|
|
|
gint dx,
|
|
|
|
gint dy)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *) window;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkWindowObject *impl_window;
|
|
|
|
GdkRegion *nocopy_area;
|
|
|
|
GdkRegion *copy_area;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
g_return_if_fail (region != NULL);
|
|
|
|
|
|
|
|
if (dx == 0 && dy == 0)
|
|
|
|
return;
|
|
|
|
|
|
|
|
if (private->destroyed)
|
|
|
|
return;
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
impl_window = gdk_window_get_impl_window (private);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* compute source regions */
|
2009-02-08 12:10:42 +00:00
|
|
|
copy_area = gdk_region_copy (region);
|
|
|
|
gdk_region_intersect (copy_area, private->clip_region_with_children);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
/* compute destination regions */
|
|
|
|
gdk_region_offset (copy_area, dx, dy);
|
|
|
|
gdk_region_intersect (copy_area, private->clip_region_with_children);
|
|
|
|
|
2009-08-13 11:32:17 +00:00
|
|
|
/* Invalidate parts of the region (source and dest) not covered
|
|
|
|
by the copy */
|
2008-07-18 13:03:42 +00:00
|
|
|
nocopy_area = gdk_region_copy (region);
|
|
|
|
gdk_region_offset (nocopy_area, dx, dy);
|
2009-08-13 11:32:17 +00:00
|
|
|
gdk_region_union (nocopy_area, region);
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_region_subtract (nocopy_area, copy_area);
|
|
|
|
|
2008-12-09 12:33:26 +00:00
|
|
|
/* convert from window coords to impl */
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_region_offset (copy_area, private->abs_x, private->abs_y);
|
2009-02-08 12:35:17 +00:00
|
|
|
move_region_on_impl (impl_window, copy_area, dx, dy); /* Takes ownership of copy_area */
|
2009-08-13 11:32:17 +00:00
|
|
|
|
2009-11-04 13:03:04 +00:00
|
|
|
gdk_window_invalidate_region_full (window, nocopy_area, FALSE, CLEAR_BG_ALL);
|
2009-08-13 11:32:17 +00:00
|
|
|
gdk_region_destroy (nocopy_area);
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_set_background:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @color: an allocated #GdkColor
|
|
|
|
*
|
|
|
|
* Sets the background color of @window. (However, when using GTK+,
|
|
|
|
* set the background of a widget with gtk_widget_modify_bg() - if
|
|
|
|
* you're an application - or gtk_style_set_background() - if you're
|
|
|
|
* implementing a custom widget.)
|
|
|
|
*
|
|
|
|
* The @color must be allocated; gdk_rgb_find_color() is the best way
|
|
|
|
* to allocate a color.
|
|
|
|
*
|
|
|
|
* See also gdk_window_set_back_pixmap().
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
gdk_window_set_background (GdkWindow *window,
|
|
|
|
const GdkColor *color)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkColormap *colormap = gdk_drawable_get_colormap (window);
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
private->bg_color = *color;
|
|
|
|
gdk_colormap_query_color (colormap, private->bg_color.pixel, &private->bg_color);
|
|
|
|
|
|
|
|
if (private->bg_pixmap &&
|
|
|
|
private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
|
|
|
|
private->bg_pixmap != GDK_NO_BG)
|
|
|
|
g_object_unref (private->bg_pixmap);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
private->bg_pixmap = NULL;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
2009-02-04 19:21:02 +00:00
|
|
|
if (!GDK_WINDOW_DESTROYED (window) &&
|
|
|
|
gdk_window_has_impl (private) &&
|
|
|
|
!private->input_only)
|
2009-08-31 08:44:11 +00:00
|
|
|
{
|
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
impl_iface->set_background (window, &private->bg_color);
|
|
|
|
}
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_set_back_pixmap:
|
|
|
|
* @window: a #GdkWindow
|
2010-02-19 16:53:17 +00:00
|
|
|
* @pixmap: (allow-none): a #GdkPixmap, or %NULL
|
2008-06-27 14:27:44 +00:00
|
|
|
* @parent_relative: whether the tiling origin is at the origin of
|
|
|
|
* @window's parent
|
|
|
|
*
|
|
|
|
* Sets the background pixmap of @window. May also be used to set a
|
|
|
|
* background of "None" on @window, by setting a background pixmap
|
|
|
|
* of %NULL.
|
|
|
|
*
|
|
|
|
* A background pixmap will be tiled, positioning the first tile at
|
|
|
|
* the origin of @window, or if @parent_relative is %TRUE, the tiling
|
|
|
|
* will be done based on the origin of the parent window (useful to
|
|
|
|
* align tiles in a parent with tiles in a child).
|
|
|
|
*
|
|
|
|
* A background pixmap of %NULL means that the window will have no
|
|
|
|
* background. A window with no background will never have its
|
|
|
|
* background filled by the windowing system, instead the window will
|
|
|
|
* contain whatever pixels were already in the corresponding area of
|
|
|
|
* the display.
|
|
|
|
*
|
|
|
|
* The windowing system will normally fill a window with its background
|
|
|
|
* when the window is obscured then exposed, and when you call
|
|
|
|
* gdk_window_clear().
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
gdk_window_set_back_pixmap (GdkWindow *window,
|
|
|
|
GdkPixmap *pixmap,
|
|
|
|
gboolean parent_relative)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
g_return_if_fail (pixmap == NULL || !parent_relative);
|
|
|
|
g_return_if_fail (pixmap == NULL || gdk_drawable_get_depth (window) == gdk_drawable_get_depth (pixmap));
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (pixmap && !gdk_drawable_get_colormap (pixmap))
|
|
|
|
{
|
|
|
|
g_warning ("gdk_window_set_back_pixmap(): pixmap must have a colormap");
|
|
|
|
return;
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (private->bg_pixmap &&
|
|
|
|
private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
|
|
|
|
private->bg_pixmap != GDK_NO_BG)
|
|
|
|
g_object_unref (private->bg_pixmap);
|
|
|
|
|
|
|
|
if (parent_relative)
|
|
|
|
private->bg_pixmap = GDK_PARENT_RELATIVE_BG;
|
|
|
|
else if (pixmap)
|
|
|
|
private->bg_pixmap = g_object_ref (pixmap);
|
|
|
|
else
|
|
|
|
private->bg_pixmap = GDK_NO_BG;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-04 19:21:02 +00:00
|
|
|
if (!GDK_WINDOW_DESTROYED (window) &&
|
|
|
|
gdk_window_has_impl (private) &&
|
|
|
|
!private->input_only)
|
2009-08-31 08:44:11 +00:00
|
|
|
{
|
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
impl_iface->set_back_pixmap (window, private->bg_pixmap);
|
|
|
|
}
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
2009-07-16 06:16:01 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_get_cursor:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
*
|
|
|
|
* Retrieves a #GdkCursor pointer for the cursor currently set on the
|
|
|
|
* specified #GdkWindow, or %NULL. If the return value is %NULL then
|
|
|
|
* there is no custom cursor set on the specified window, and it is
|
|
|
|
* using the cursor for its parent window.
|
|
|
|
*
|
2009-07-30 10:10:45 +00:00
|
|
|
* Return value: a #GdkCursor, or %NULL. The returned object is owned
|
|
|
|
* by the #GdkWindow and should not be unreferenced directly. Use
|
|
|
|
* gdk_window_set_cursor() to unset the cursor of the window
|
|
|
|
*
|
2009-07-16 06:16:01 +00:00
|
|
|
* Since: 2.18
|
|
|
|
*/
|
|
|
|
GdkCursor *
|
|
|
|
gdk_window_get_cursor (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
|
|
|
|
return private->cursor;
|
|
|
|
}
|
|
|
|
|
2008-06-27 14:27:44 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_set_cursor:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @cursor: a cursor
|
|
|
|
*
|
2009-06-01 10:04:36 +00:00
|
|
|
* Sets the mouse pointer for a #GdkWindow. Use gdk_cursor_new_for_display()
|
|
|
|
* or gdk_cursor_new_from_pixmap() to create the cursor. To make the cursor
|
|
|
|
* invisible, use %GDK_BLANK_CURSOR. Passing %NULL for the @cursor argument
|
|
|
|
* to gdk_window_set_cursor() means that @window will use the cursor of its
|
2009-01-20 02:27:57 +00:00
|
|
|
* parent window. Most windows should use this default.
|
2008-06-27 14:27:44 +00:00
|
|
|
*/
|
|
|
|
void
|
|
|
|
gdk_window_set_cursor (GdkWindow *window,
|
|
|
|
GdkCursor *cursor)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2008-12-15 13:02:52 +00:00
|
|
|
GdkDisplay *display;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
2008-12-15 13:02:52 +00:00
|
|
|
display = gdk_drawable_get_display (window);
|
2008-06-27 14:27:44 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (private->cursor)
|
|
|
|
{
|
|
|
|
gdk_cursor_unref (private->cursor);
|
|
|
|
private->cursor = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!GDK_WINDOW_DESTROYED (window))
|
|
|
|
{
|
|
|
|
if (cursor)
|
|
|
|
private->cursor = gdk_cursor_ref (cursor);
|
|
|
|
|
2009-08-24 13:18:10 +00:00
|
|
|
if (_gdk_native_windows ||
|
|
|
|
private->window_type == GDK_WINDOW_ROOT ||
|
2009-08-11 18:19:35 +00:00
|
|
|
private->window_type == GDK_WINDOW_FOREIGN)
|
2009-08-31 08:44:11 +00:00
|
|
|
{
|
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
impl_iface->set_cursor (window, cursor);
|
|
|
|
}
|
2009-08-11 18:19:35 +00:00
|
|
|
else if (_gdk_window_event_parent_of (window, display->pointer_info.window_under_pointer))
|
2008-12-15 13:16:54 +00:00
|
|
|
update_cursor (display);
|
2009-07-16 06:16:01 +00:00
|
|
|
|
|
|
|
g_object_notify (G_OBJECT (window), "cursor");
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_get_geometry:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @x: return location for X coordinate of window (relative to its parent)
|
|
|
|
* @y: return location for Y coordinate of window (relative to its parent)
|
|
|
|
* @width: return location for width of window
|
|
|
|
* @height: return location for height of window
|
|
|
|
* @depth: return location for bit depth of window
|
|
|
|
*
|
|
|
|
* Any of the return location arguments to this function may be %NULL,
|
|
|
|
* if you aren't interested in getting the value of that field.
|
|
|
|
*
|
|
|
|
* The X and Y coordinates returned are relative to the parent window
|
|
|
|
* of @window, which for toplevels usually means relative to the
|
|
|
|
* window decorations (titlebar, etc.) rather than relative to the
|
|
|
|
* root window (screen-size background window).
|
|
|
|
*
|
|
|
|
* On the X11 platform, the geometry is obtained from the X server,
|
|
|
|
* so reflects the latest position of @window; this may be out-of-sync
|
|
|
|
* with the position of @window delivered in the most-recently-processed
|
|
|
|
* #GdkEventConfigure. gdk_window_get_position() in contrast gets the
|
|
|
|
* position from the most recent configure event.
|
|
|
|
*
|
|
|
|
* <note>
|
|
|
|
* If @window is not a toplevel, it is <emphasis>much</emphasis> better
|
|
|
|
* to call gdk_window_get_position() and gdk_drawable_get_size() instead,
|
|
|
|
* because it avoids the roundtrip to the X server and because
|
|
|
|
* gdk_drawable_get_size() supports the full 32-bit coordinate space,
|
|
|
|
* whereas gdk_window_get_geometry() is restricted to the 16-bit
|
|
|
|
* coordinates of X11.
|
|
|
|
*</note>
|
|
|
|
**/
|
|
|
|
void
|
|
|
|
gdk_window_get_geometry (GdkWindow *window,
|
|
|
|
gint *x,
|
|
|
|
gint *y,
|
|
|
|
gint *width,
|
|
|
|
gint *height,
|
|
|
|
gint *depth)
|
|
|
|
{
|
2009-08-16 20:24:00 +00:00
|
|
|
GdkWindowObject *private, *parent;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
if (!window)
|
|
|
|
{
|
|
|
|
GDK_NOTE (MULTIHEAD,
|
|
|
|
g_message ("gdk_window_get_geometry(): Window needs "
|
2009-06-01 10:04:36 +00:00
|
|
|
"to be non-NULL to be multi head safe"));
|
2008-06-27 14:27:44 +00:00
|
|
|
window = gdk_screen_get_root_window ((gdk_screen_get_default ()));
|
|
|
|
}
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
|
|
|
|
if (!GDK_WINDOW_DESTROYED (window))
|
|
|
|
{
|
2008-07-18 13:03:42 +00:00
|
|
|
if (gdk_window_has_impl (private))
|
2009-08-16 20:24:00 +00:00
|
|
|
{
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
impl_iface->get_geometry (window, x, y,
|
|
|
|
width, height,
|
|
|
|
depth);
|
2009-08-16 20:24:00 +00:00
|
|
|
/* This reports the position wrt to the native parent, we need to convert
|
|
|
|
it to be relative to the client side parent */
|
|
|
|
parent = private->parent;
|
2009-08-17 14:59:47 +00:00
|
|
|
if (parent && !gdk_window_has_impl (parent))
|
2009-08-16 20:24:00 +00:00
|
|
|
{
|
2009-08-27 11:34:00 +00:00
|
|
|
if (x)
|
|
|
|
*x -= parent->abs_x;
|
|
|
|
if (y)
|
|
|
|
*y -= parent->abs_y;
|
2009-08-16 20:24:00 +00:00
|
|
|
}
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
else
|
|
|
|
{
|
2010-04-15 10:59:44 +00:00
|
|
|
if (x)
|
|
|
|
*x = private->x;
|
|
|
|
if (y)
|
|
|
|
*y = private->y;
|
2008-07-18 13:03:42 +00:00
|
|
|
if (width)
|
|
|
|
*width = private->width;
|
|
|
|
if (height)
|
|
|
|
*height = private->height;
|
|
|
|
if (depth)
|
|
|
|
*depth = private->depth;
|
|
|
|
}
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_get_origin:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @x: return location for X coordinate
|
|
|
|
* @y: return location for Y coordinate
|
|
|
|
*
|
|
|
|
* Obtains the position of a window in root window coordinates.
|
|
|
|
* (Compare with gdk_window_get_position() and
|
|
|
|
* gdk_window_get_geometry() which return the position of a window
|
|
|
|
* relative to its parent window.)
|
|
|
|
*
|
|
|
|
* Return value: not meaningful, ignore
|
|
|
|
*/
|
|
|
|
gint
|
|
|
|
gdk_window_get_origin (GdkWindow *window,
|
|
|
|
gint *x,
|
|
|
|
gint *y)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
|
|
|
|
|
2009-06-30 07:30:53 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
{
|
|
|
|
if (x)
|
|
|
|
*x = 0;
|
|
|
|
if (y)
|
|
|
|
*y = 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2008-06-27 14:27:44 +00:00
|
|
|
private = (GdkWindowObject *) window;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
impl_iface->get_root_coords (window,
|
|
|
|
private->abs_x,
|
|
|
|
private->abs_y,
|
|
|
|
x, y);
|
2008-06-27 14:27:44 +00:00
|
|
|
|
2009-06-08 15:03:47 +00:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_get_root_coords:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @x: X coordinate in window
|
|
|
|
* @y: Y coordinate in window
|
|
|
|
* @root_x: return location for X coordinate
|
|
|
|
* @root_y: return location for Y coordinate
|
|
|
|
*
|
|
|
|
* Obtains the position of a window position in root
|
|
|
|
* window coordinates. This is similar to
|
|
|
|
* gdk_window_get_origin() but allows you go pass
|
|
|
|
* in any position in the window, not just the origin.
|
2009-12-17 18:17:22 +00:00
|
|
|
*
|
|
|
|
* Since: 2.18
|
2009-06-08 15:03:47 +00:00
|
|
|
*/
|
2009-06-30 07:30:53 +00:00
|
|
|
void
|
2009-06-08 15:03:47 +00:00
|
|
|
gdk_window_get_root_coords (GdkWindow *window,
|
|
|
|
gint x,
|
|
|
|
gint y,
|
|
|
|
gint *root_x,
|
|
|
|
gint *root_y)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2009-06-08 15:03:47 +00:00
|
|
|
|
2009-07-01 08:11:15 +00:00
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
2009-06-08 15:03:47 +00:00
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
|
2009-06-30 07:30:53 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
{
|
|
|
|
if (x)
|
|
|
|
*root_x = x;
|
|
|
|
if (y)
|
|
|
|
*root_y = y;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
impl_iface->get_root_coords (window,
|
|
|
|
x + private->abs_x,
|
|
|
|
y + private->abs_y,
|
|
|
|
root_x, root_y);
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
2010-04-15 10:59:44 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_coords_to_parent:
|
|
|
|
* @window: a child window
|
|
|
|
* @x: X coordinate in child's coordinate system
|
|
|
|
* @y: Y coordinate in child's coordinate system
|
|
|
|
* @parent_x: return location for X coordinate in parent's coordinate system
|
|
|
|
* @parent_y: return location for Y coordinate in parent's coordinate system
|
|
|
|
*
|
|
|
|
* Transforms window coordinates from a child window to its parent
|
|
|
|
* window, where the parent window is the normal parent as returned by
|
|
|
|
* gdk_window_get_parent() for normal windows, and the window's
|
|
|
|
* embedder as returned by gdk_offscreen_window_get_embedder() for
|
|
|
|
* offscreen windows.
|
|
|
|
*
|
|
|
|
* For normal windows, calling this function is equivalent to adding
|
|
|
|
* the return values of gdk_window_get_position() to the child coordinates.
|
|
|
|
* For offscreen windows however (which can be arbitrarily transformed),
|
|
|
|
* this function calls the GdkWindow::to-embedder: signal to translate
|
|
|
|
* the coordinates.
|
|
|
|
*
|
|
|
|
* You should always use this function when writing generic code that
|
|
|
|
* walks up a window hierarchy.
|
|
|
|
*
|
|
|
|
* See also: gdk_window_coords_from_parent()
|
|
|
|
*
|
|
|
|
* Since: 2.22
|
|
|
|
**/
|
|
|
|
void
|
|
|
|
gdk_window_coords_to_parent (GdkWindow *window,
|
|
|
|
gdouble x,
|
|
|
|
gdouble y,
|
|
|
|
gdouble *parent_x,
|
|
|
|
gdouble *parent_y)
|
|
|
|
{
|
|
|
|
GdkWindowObject *obj;
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
obj = (GdkWindowObject *) window;
|
|
|
|
|
2010-04-15 11:08:47 +00:00
|
|
|
if (gdk_window_is_offscreen (obj))
|
2010-04-15 10:59:44 +00:00
|
|
|
{
|
|
|
|
gdouble px, py;
|
|
|
|
|
|
|
|
to_embedder (obj, x, y, &px, &py);
|
|
|
|
|
|
|
|
if (parent_x)
|
|
|
|
*parent_x = px;
|
|
|
|
|
|
|
|
if (parent_y)
|
|
|
|
*parent_y = py;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (parent_x)
|
|
|
|
*parent_x = x + obj->x;
|
|
|
|
|
|
|
|
if (parent_y)
|
|
|
|
*parent_y = y + obj->y;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_coords_from_parent:
|
|
|
|
* @window: a child window
|
|
|
|
* @parent_x: X coordinate in parent's coordinate system
|
|
|
|
* @parent_y: Y coordinate in parent's coordinate system
|
|
|
|
* @x: return location for X coordinate in child's coordinate system
|
|
|
|
* @y: return location for Y coordinate in child's coordinate system
|
|
|
|
*
|
|
|
|
* Transforms window coordinates from a parent window to a child
|
|
|
|
* window, where the parent window is the normal parent as returned by
|
|
|
|
* gdk_window_get_parent() for normal windows, and the window's
|
|
|
|
* embedder as returned by gdk_offscreen_window_get_embedder() for
|
|
|
|
* offscreen windows.
|
|
|
|
*
|
|
|
|
* For normal windows, calling this function is equivalent to subtracting
|
|
|
|
* the return values of gdk_window_get_position() from the parent coordinates.
|
|
|
|
* For offscreen windows however (which can be arbitrarily transformed),
|
|
|
|
* this function calls the GdkWindow::from-embedder: signal to translate
|
|
|
|
* the coordinates.
|
|
|
|
*
|
|
|
|
* You should always use this function when writing generic code that
|
|
|
|
* walks down a window hierarchy.
|
|
|
|
*
|
|
|
|
* See also: gdk_window_coords_to_parent()
|
|
|
|
*
|
|
|
|
* Since: 2.22
|
|
|
|
**/
|
|
|
|
void
|
|
|
|
gdk_window_coords_from_parent (GdkWindow *window,
|
|
|
|
gdouble parent_x,
|
|
|
|
gdouble parent_y,
|
|
|
|
gdouble *x,
|
|
|
|
gdouble *y)
|
|
|
|
{
|
|
|
|
GdkWindowObject *obj;
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
obj = (GdkWindowObject *) window;
|
|
|
|
|
2010-04-15 11:08:47 +00:00
|
|
|
if (gdk_window_is_offscreen (obj))
|
2010-04-15 10:59:44 +00:00
|
|
|
{
|
|
|
|
gdouble cx, cy;
|
|
|
|
|
|
|
|
from_embedder (obj, parent_x, parent_y, &cx, &cy);
|
|
|
|
|
|
|
|
if (x)
|
|
|
|
*x = cx;
|
|
|
|
|
|
|
|
if (y)
|
|
|
|
*y = cy;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (x)
|
|
|
|
*x = parent_x - obj->x;
|
|
|
|
|
|
|
|
if (y)
|
|
|
|
*y = parent_y - obj->y;
|
|
|
|
}
|
|
|
|
}
|
2008-12-06 21:43:01 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_get_deskrelative_origin:
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
* @x: return location for X coordinate
|
|
|
|
* @y: return location for Y coordinate
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2008-12-06 21:43:01 +00:00
|
|
|
* This gets the origin of a #GdkWindow relative to
|
|
|
|
* an Enlightenment-window-manager desktop. As long as you don't
|
|
|
|
* assume that the user's desktop/workspace covers the entire
|
|
|
|
* root window (i.e. you don't assume that the desktop begins
|
|
|
|
* at root window coordinate 0,0) this function is not necessary.
|
|
|
|
* It's deprecated for that reason.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2008-12-06 21:43:01 +00:00
|
|
|
* Return value: not meaningful
|
|
|
|
**/
|
|
|
|
gboolean
|
|
|
|
gdk_window_get_deskrelative_origin (GdkWindow *window,
|
|
|
|
gint *x,
|
|
|
|
gint *y)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2008-12-06 21:43:01 +00:00
|
|
|
gboolean return_val = FALSE;
|
|
|
|
gint tx = 0;
|
|
|
|
gint ty = 0;
|
|
|
|
|
2008-12-06 22:22:24 +00:00
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
|
2008-12-06 21:43:01 +00:00
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-06 21:43:01 +00:00
|
|
|
if (!GDK_WINDOW_DESTROYED (window))
|
|
|
|
{
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
return_val = impl_iface->get_deskrelative_origin (window, &tx, &ty);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-06 21:43:01 +00:00
|
|
|
if (x)
|
|
|
|
*x = tx + private->abs_x;
|
|
|
|
if (y)
|
|
|
|
*y = ty + private->abs_y;
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-06 21:43:01 +00:00
|
|
|
return return_val;
|
|
|
|
}
|
|
|
|
|
2008-06-27 14:27:44 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_shape_combine_mask:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @mask: shape mask
|
|
|
|
* @x: X position of shape mask with respect to @window
|
|
|
|
* @y: Y position of shape mask with respect to @window
|
|
|
|
*
|
|
|
|
* Applies a shape mask to @window. Pixels in @window corresponding to
|
|
|
|
* set bits in the @mask will be visible; pixels in @window
|
|
|
|
* corresponding to unset bits in the @mask will be transparent. This
|
|
|
|
* gives a non-rectangular window.
|
|
|
|
*
|
|
|
|
* If @mask is %NULL, the shape mask will be unset, and the @x/@y
|
|
|
|
* parameters are not used.
|
|
|
|
*
|
|
|
|
* On the X11 platform, this uses an X server extension which is
|
|
|
|
* widely available on most common platforms, but not available on
|
|
|
|
* very old X servers, and occasionally the implementation will be
|
|
|
|
* buggy. On servers without the shape extension, this function
|
|
|
|
* will do nothing.
|
|
|
|
*
|
|
|
|
* This function works on both toplevel and child windows.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
gdk_window_shape_combine_mask (GdkWindow *window,
|
|
|
|
GdkBitmap *mask,
|
|
|
|
gint x,
|
2009-06-01 10:04:36 +00:00
|
|
|
gint y)
|
2008-06-27 14:27:44 +00:00
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
2008-12-16 19:09:20 +00:00
|
|
|
GdkRegion *region;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
|
2008-12-17 12:57:48 +00:00
|
|
|
if (mask)
|
|
|
|
region = _gdk_windowing_get_shape_for_mask (mask);
|
|
|
|
else
|
|
|
|
region = NULL;
|
2008-12-16 19:09:20 +00:00
|
|
|
|
|
|
|
gdk_window_shape_combine_region (window,
|
|
|
|
region,
|
|
|
|
x, y);
|
|
|
|
|
2008-12-18 19:18:27 +00:00
|
|
|
if (region)
|
|
|
|
gdk_region_destroy (region);
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_shape_combine_region:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @shape_region: region of window to be non-transparent
|
|
|
|
* @offset_x: X position of @shape_region in @window coordinates
|
|
|
|
* @offset_y: Y position of @shape_region in @window coordinates
|
|
|
|
*
|
|
|
|
* Makes pixels in @window outside @shape_region be transparent,
|
|
|
|
* so that the window may be nonrectangular. See also
|
|
|
|
* gdk_window_shape_combine_mask() to use a bitmap as the mask.
|
|
|
|
*
|
|
|
|
* If @shape_region is %NULL, the shape will be unset, so the whole
|
|
|
|
* window will be opaque again. @offset_x and @offset_y are ignored
|
|
|
|
* if @shape_region is %NULL.
|
|
|
|
*
|
|
|
|
* On the X11 platform, this uses an X server extension which is
|
|
|
|
* widely available on most common platforms, but not available on
|
|
|
|
* very old X servers, and occasionally the implementation will be
|
|
|
|
* buggy. On servers without the shape extension, this function
|
|
|
|
* will do nothing.
|
|
|
|
*
|
|
|
|
* This function works on both toplevel and child windows.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
gdk_window_shape_combine_region (GdkWindow *window,
|
2009-06-01 10:04:36 +00:00
|
|
|
const GdkRegion *shape_region,
|
|
|
|
gint offset_x,
|
|
|
|
gint offset_y)
|
2008-06-27 14:27:44 +00:00
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
2009-01-16 14:09:39 +00:00
|
|
|
GdkRegion *old_region, *new_region, *diff;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
|
2008-12-16 19:09:20 +00:00
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
return;
|
|
|
|
|
|
|
|
private->shaped = (shape_region != NULL);
|
|
|
|
|
|
|
|
if (private->shape)
|
|
|
|
gdk_region_destroy (private->shape);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-16 14:09:39 +00:00
|
|
|
old_region = NULL;
|
2009-07-20 21:18:41 +00:00
|
|
|
if (GDK_WINDOW_IS_MAPPED (window))
|
2009-01-16 14:09:39 +00:00
|
|
|
old_region = gdk_region_copy (private->clip_region);
|
2008-12-16 19:09:20 +00:00
|
|
|
|
|
|
|
if (shape_region)
|
|
|
|
{
|
|
|
|
private->shape = gdk_region_copy (shape_region);
|
2009-06-01 10:04:36 +00:00
|
|
|
gdk_region_offset (private->shape, offset_x, offset_y);
|
2008-12-16 19:09:20 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
private->shape = NULL;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-16 19:09:20 +00:00
|
|
|
recompute_visible_regions (private, TRUE, FALSE);
|
2009-01-16 14:09:39 +00:00
|
|
|
|
2009-08-27 16:04:07 +00:00
|
|
|
if (gdk_window_has_impl (private) &&
|
|
|
|
!should_apply_clip_as_shape (private))
|
|
|
|
apply_shape (private, private->shape);
|
|
|
|
|
2009-01-16 14:09:39 +00:00
|
|
|
if (old_region)
|
|
|
|
{
|
|
|
|
new_region = gdk_region_copy (private->clip_region);
|
|
|
|
|
|
|
|
/* New area in the window, needs invalidation */
|
|
|
|
diff = gdk_region_copy (new_region);
|
|
|
|
gdk_region_subtract (diff, old_region);
|
|
|
|
|
2009-11-04 13:03:04 +00:00
|
|
|
gdk_window_invalidate_region_full (window, diff, TRUE, CLEAR_BG_ALL);
|
2009-01-16 14:09:39 +00:00
|
|
|
|
|
|
|
gdk_region_destroy (diff);
|
|
|
|
|
2009-08-31 08:59:21 +00:00
|
|
|
if (!gdk_window_is_toplevel (private))
|
2009-01-16 14:09:39 +00:00
|
|
|
{
|
|
|
|
/* New area in the non-root parent window, needs invalidation */
|
|
|
|
diff = gdk_region_copy (old_region);
|
|
|
|
gdk_region_subtract (diff, new_region);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-16 14:09:39 +00:00
|
|
|
/* Adjust region to parent window coords */
|
|
|
|
gdk_region_offset (diff, private->x, private->y);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-11-04 13:03:04 +00:00
|
|
|
gdk_window_invalidate_region_full (GDK_WINDOW (private->parent), diff, TRUE, CLEAR_BG_ALL);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-16 14:09:39 +00:00
|
|
|
gdk_region_destroy (diff);
|
|
|
|
}
|
|
|
|
|
|
|
|
gdk_region_destroy (new_region);
|
|
|
|
gdk_region_destroy (old_region);
|
|
|
|
}
|
2008-12-16 19:09:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
do_child_shapes (GdkWindow *window,
|
|
|
|
gboolean merge)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
|
|
|
GdkRectangle r;
|
|
|
|
GdkRegion *region;
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-16 19:09:20 +00:00
|
|
|
r.x = 0;
|
|
|
|
r.y = 0;
|
|
|
|
r.width = private->width;
|
|
|
|
r.height = private->height;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-16 19:09:20 +00:00
|
|
|
region = gdk_region_rectangle (&r);
|
2008-12-17 10:24:46 +00:00
|
|
|
remove_child_area (private, NULL, FALSE, region);
|
2008-12-16 19:09:20 +00:00
|
|
|
|
|
|
|
if (merge && private->shape)
|
|
|
|
gdk_region_subtract (region, private->shape);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-16 19:09:20 +00:00
|
|
|
gdk_window_shape_combine_region (window, region, 0, 0);
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_set_child_shapes:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
*
|
|
|
|
* Sets the shape mask of @window to the union of shape masks
|
|
|
|
* for all children of @window, ignoring the shape mask of @window
|
|
|
|
* itself. Contrast with gdk_window_merge_child_shapes() which includes
|
|
|
|
* the shape mask of @window in the masks to be merged.
|
|
|
|
**/
|
|
|
|
void
|
|
|
|
gdk_window_set_child_shapes (GdkWindow *window)
|
|
|
|
{
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
2008-12-16 19:09:20 +00:00
|
|
|
do_child_shapes (window, FALSE);
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_merge_child_shapes:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
*
|
|
|
|
* Merges the shape masks for any child windows into the
|
|
|
|
* shape mask for @window. i.e. the union of all masks
|
|
|
|
* for @window and its children will become the new mask
|
|
|
|
* for @window. See gdk_window_shape_combine_mask().
|
|
|
|
*
|
|
|
|
* This function is distinct from gdk_window_set_child_shapes()
|
|
|
|
* because it includes @window's shape mask in the set of shapes to
|
|
|
|
* be merged.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
gdk_window_merge_child_shapes (GdkWindow *window)
|
|
|
|
{
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
2008-12-16 19:09:20 +00:00
|
|
|
do_child_shapes (window, TRUE);
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
2008-12-17 10:24:46 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_input_shape_combine_mask:
|
|
|
|
* @window: a #GdkWindow
|
2010-02-19 16:53:17 +00:00
|
|
|
* @mask: (allow-none): shape mask, or %NULL
|
2008-12-17 10:24:46 +00:00
|
|
|
* @x: X position of shape mask with respect to @window
|
|
|
|
* @y: Y position of shape mask with respect to @window
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2008-12-17 10:24:46 +00:00
|
|
|
* Like gdk_window_shape_combine_mask(), but the shape applies
|
|
|
|
* only to event handling. Mouse events which happen while
|
2009-06-01 10:04:36 +00:00
|
|
|
* the pointer position corresponds to an unset bit in the
|
2008-12-17 10:24:46 +00:00
|
|
|
* mask will be passed on the window below @window.
|
|
|
|
*
|
|
|
|
* An input shape is typically used with RGBA windows.
|
2009-06-01 10:04:36 +00:00
|
|
|
* The alpha channel of the window defines which pixels are
|
2008-12-17 10:24:46 +00:00
|
|
|
* invisible and allows for nicely antialiased borders,
|
|
|
|
* and the input shape controls where the window is
|
|
|
|
* "clickable".
|
|
|
|
*
|
|
|
|
* On the X11 platform, this requires version 1.1 of the
|
|
|
|
* shape extension.
|
|
|
|
*
|
|
|
|
* On the Win32 platform, this functionality is not present and the
|
|
|
|
* function does nothing.
|
|
|
|
*
|
|
|
|
* Since: 2.10
|
|
|
|
*/
|
2009-06-01 10:04:36 +00:00
|
|
|
void
|
2008-12-17 10:24:46 +00:00
|
|
|
gdk_window_input_shape_combine_mask (GdkWindow *window,
|
|
|
|
GdkBitmap *mask,
|
|
|
|
gint x,
|
|
|
|
gint y)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
|
|
|
GdkRegion *region;
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
|
2008-12-17 12:57:48 +00:00
|
|
|
if (mask)
|
|
|
|
region = _gdk_windowing_get_shape_for_mask (mask);
|
|
|
|
else
|
|
|
|
region = NULL;
|
2008-12-17 10:24:46 +00:00
|
|
|
|
|
|
|
gdk_window_input_shape_combine_region (window,
|
|
|
|
region,
|
|
|
|
x, y);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-07-21 16:44:25 +00:00
|
|
|
if (region != NULL)
|
|
|
|
gdk_region_destroy (region);
|
2008-12-17 10:24:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_input_shape_combine_region:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @shape_region: region of window to be non-transparent
|
|
|
|
* @offset_x: X position of @shape_region in @window coordinates
|
|
|
|
* @offset_y: Y position of @shape_region in @window coordinates
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2008-12-17 10:24:46 +00:00
|
|
|
* Like gdk_window_shape_combine_region(), but the shape applies
|
|
|
|
* only to event handling. Mouse events which happen while
|
2009-06-01 10:04:36 +00:00
|
|
|
* the pointer position corresponds to an unset bit in the
|
2008-12-17 10:24:46 +00:00
|
|
|
* mask will be passed on the window below @window.
|
|
|
|
*
|
|
|
|
* An input shape is typically used with RGBA windows.
|
2009-06-01 10:04:36 +00:00
|
|
|
* The alpha channel of the window defines which pixels are
|
2008-12-17 10:24:46 +00:00
|
|
|
* invisible and allows for nicely antialiased borders,
|
|
|
|
* and the input shape controls where the window is
|
|
|
|
* "clickable".
|
|
|
|
*
|
|
|
|
* On the X11 platform, this requires version 1.1 of the
|
|
|
|
* shape extension.
|
|
|
|
*
|
|
|
|
* On the Win32 platform, this functionality is not present and the
|
|
|
|
* function does nothing.
|
|
|
|
*
|
|
|
|
* Since: 2.10
|
|
|
|
*/
|
2009-06-01 10:04:36 +00:00
|
|
|
void
|
2008-12-17 10:24:46 +00:00
|
|
|
gdk_window_input_shape_combine_region (GdkWindow *window,
|
|
|
|
const GdkRegion *shape_region,
|
|
|
|
gint offset_x,
|
|
|
|
gint offset_y)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2008-12-17 10:24:46 +00:00
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
return;
|
|
|
|
|
|
|
|
if (private->input_shape)
|
|
|
|
gdk_region_destroy (private->input_shape);
|
|
|
|
|
|
|
|
if (shape_region)
|
|
|
|
{
|
|
|
|
private->input_shape = gdk_region_copy (shape_region);
|
2009-06-01 10:04:36 +00:00
|
|
|
gdk_region_offset (private->input_shape, offset_x, offset_y);
|
2008-12-17 10:24:46 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
private->input_shape = NULL;
|
|
|
|
|
|
|
|
if (gdk_window_has_impl (private))
|
2009-08-31 08:44:11 +00:00
|
|
|
{
|
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
impl_iface->input_shape_combine_region (window, private->input_shape, 0, 0);
|
|
|
|
}
|
2008-12-17 10:24:46 +00:00
|
|
|
|
|
|
|
/* Pointer may have e.g. moved outside window due to the input mask change */
|
2009-06-18 18:58:13 +00:00
|
|
|
_gdk_synthesize_crossing_events_for_geometry_change (window);
|
2008-12-17 10:24:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
do_child_input_shapes (GdkWindow *window,
|
|
|
|
gboolean merge)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
|
|
|
GdkRectangle r;
|
|
|
|
GdkRegion *region;
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-17 10:24:46 +00:00
|
|
|
r.x = 0;
|
|
|
|
r.y = 0;
|
|
|
|
r.width = private->width;
|
|
|
|
r.height = private->height;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-17 10:24:46 +00:00
|
|
|
region = gdk_region_rectangle (&r);
|
|
|
|
remove_child_area (private, NULL, TRUE, region);
|
|
|
|
|
|
|
|
if (merge && private->shape)
|
|
|
|
gdk_region_subtract (region, private->shape);
|
|
|
|
if (merge && private->input_shape)
|
|
|
|
gdk_region_subtract (region, private->input_shape);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-17 10:24:46 +00:00
|
|
|
gdk_window_input_shape_combine_region (window, region, 0, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_set_child_input_shapes:
|
|
|
|
* @window: a #GdkWindow
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2008-12-17 10:24:46 +00:00
|
|
|
* Sets the input shape mask of @window to the union of input shape masks
|
|
|
|
* for all children of @window, ignoring the input shape mask of @window
|
|
|
|
* itself. Contrast with gdk_window_merge_child_input_shapes() which includes
|
|
|
|
* the input shape mask of @window in the masks to be merged.
|
|
|
|
*
|
|
|
|
* Since: 2.10
|
|
|
|
**/
|
2009-06-01 10:04:36 +00:00
|
|
|
void
|
2008-12-17 10:24:46 +00:00
|
|
|
gdk_window_set_child_input_shapes (GdkWindow *window)
|
|
|
|
{
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-17 10:24:46 +00:00
|
|
|
do_child_input_shapes (window, FALSE);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_merge_child_input_shapes:
|
|
|
|
* @window: a #GdkWindow
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2008-12-17 10:24:46 +00:00
|
|
|
* Merges the input shape masks for any child windows into the
|
|
|
|
* input shape mask for @window. i.e. the union of all input masks
|
|
|
|
* for @window and its children will become the new input mask
|
|
|
|
* for @window. See gdk_window_input_shape_combine_mask().
|
|
|
|
*
|
|
|
|
* This function is distinct from gdk_window_set_child_input_shapes()
|
2009-06-01 10:04:36 +00:00
|
|
|
* because it includes @window's input shape mask in the set of
|
2008-12-17 10:24:46 +00:00
|
|
|
* shapes to be merged.
|
|
|
|
*
|
|
|
|
* Since: 2.10
|
|
|
|
**/
|
2009-06-01 10:04:36 +00:00
|
|
|
void
|
2008-12-17 10:24:46 +00:00
|
|
|
gdk_window_merge_child_input_shapes (GdkWindow *window)
|
|
|
|
{
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-17 10:24:46 +00:00
|
|
|
do_child_input_shapes (window, TRUE);
|
|
|
|
}
|
|
|
|
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_set_static_gravities:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @use_static: %TRUE to turn on static gravity
|
|
|
|
*
|
|
|
|
* Set the bit gravity of the given window to static, and flag it so
|
|
|
|
* all children get static subwindow gravity. This is used if you are
|
|
|
|
* implementing scary features that involve deep knowledge of the
|
|
|
|
* windowing system. Don't worry about it unless you have to.
|
|
|
|
*
|
|
|
|
* Return value: %TRUE if the server supports static gravity
|
|
|
|
*/
|
|
|
|
gboolean
|
|
|
|
gdk_window_set_static_gravities (GdkWindow *window,
|
|
|
|
gboolean use_static)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (gdk_window_has_impl (private))
|
2009-08-31 08:44:11 +00:00
|
|
|
{
|
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
|
|
|
|
return impl_iface->set_static_gravities (window, use_static);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
return FALSE;
|
2008-06-27 14:27:44 +00:00
|
|
|
}
|
|
|
|
|
2007-06-01 12:16:12 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_set_composited:
|
|
|
|
* @window: a #GdkWindow
|
2007-06-04 17:01:14 +00:00
|
|
|
* @composited: %TRUE to set the window as composited
|
2007-06-01 12:16:12 +00:00
|
|
|
*
|
2009-06-01 10:04:36 +00:00
|
|
|
* Sets a #GdkWindow as composited, or unsets it. Composited
|
|
|
|
* windows do not automatically have their contents drawn to
|
|
|
|
* the screen. Drawing is redirected to an offscreen buffer
|
|
|
|
* and an expose event is emitted on the parent of the composited
|
2007-06-04 17:01:14 +00:00
|
|
|
* window. It is the responsibility of the parent's expose handler
|
|
|
|
* to manually merge the off-screen content onto the screen in
|
2007-06-01 12:16:12 +00:00
|
|
|
* whatever way it sees fit. See <xref linkend="composited-window-example"/>
|
|
|
|
* for an example.
|
|
|
|
*
|
|
|
|
* It only makes sense for child windows to be composited; see
|
|
|
|
* gdk_window_set_opacity() if you need translucent toplevel
|
|
|
|
* windows.
|
|
|
|
*
|
|
|
|
* An additional effect of this call is that the area of this
|
|
|
|
* window is no longer clipped from regions marked for
|
|
|
|
* invalidation on its parent. Draws done on the parent
|
|
|
|
* window are also no longer clipped by the child.
|
|
|
|
*
|
|
|
|
* This call is only supported on some systems (currently,
|
2009-06-01 10:04:36 +00:00
|
|
|
* only X11 with new enough Xcomposite and Xdamage extensions).
|
2007-06-01 12:16:12 +00:00
|
|
|
* You must call gdk_display_supports_composite() to check if
|
|
|
|
* setting a window as composited is supported before
|
|
|
|
* attempting to do so.
|
|
|
|
*
|
|
|
|
* Since: 2.12
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
gdk_window_set_composited (GdkWindow *window,
|
2009-06-01 10:04:36 +00:00
|
|
|
gboolean composited)
|
2007-06-01 12:16:12 +00:00
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
|
|
|
GdkDisplay *display;
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
composited = composited != FALSE;
|
|
|
|
|
|
|
|
if (private->composited == composited)
|
|
|
|
return;
|
|
|
|
|
2008-12-08 11:51:19 +00:00
|
|
|
if (composited)
|
2009-06-01 09:57:59 +00:00
|
|
|
gdk_window_ensure_native (window);
|
2008-12-08 11:51:19 +00:00
|
|
|
|
2007-06-01 12:16:12 +00:00
|
|
|
display = gdk_drawable_get_display (GDK_DRAWABLE (window));
|
|
|
|
|
|
|
|
if (!gdk_display_supports_composite (display) && composited)
|
|
|
|
{
|
|
|
|
g_warning ("gdk_window_set_composited called but "
|
|
|
|
"compositing is not supported");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
_gdk_windowing_window_set_composited (window, composited);
|
|
|
|
|
2008-12-08 18:22:20 +00:00
|
|
|
recompute_visible_regions (private, TRUE, FALSE);
|
2008-12-18 13:29:28 +00:00
|
|
|
|
|
|
|
if (GDK_WINDOW_IS_MAPPED (window))
|
|
|
|
gdk_window_invalidate_in_parent (private);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2007-06-01 12:16:12 +00:00
|
|
|
private->composited = composited;
|
|
|
|
}
|
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
|
|
|
|
static void
|
2008-06-30 12:15:29 +00:00
|
|
|
remove_redirect_from_children (GdkWindowObject *private,
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkWindowRedirect *redirect)
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
{
|
|
|
|
GList *l;
|
|
|
|
GdkWindowObject *child;
|
|
|
|
|
|
|
|
for (l = private->children; l != NULL; l = l->next)
|
|
|
|
{
|
|
|
|
child = l->data;
|
|
|
|
|
|
|
|
/* Don't redirect this child if it already has another redirect */
|
|
|
|
if (child->redirect == redirect)
|
|
|
|
{
|
|
|
|
child->redirect = NULL;
|
|
|
|
remove_redirect_from_children (child, redirect);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_remove_redirection:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
*
|
2008-08-16 19:56:23 +00:00
|
|
|
* Removes any active redirection started by
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
* gdk_window_redirect_to_drawable().
|
2008-06-30 12:15:29 +00:00
|
|
|
*
|
|
|
|
* Since: 2.14
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
**/
|
|
|
|
void
|
|
|
|
gdk_window_remove_redirection (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
2008-06-30 12:15:29 +00:00
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
|
|
|
|
if (private->redirect &&
|
|
|
|
private->redirect->redirected == private)
|
|
|
|
{
|
|
|
|
remove_redirect_from_children (private, private->redirect);
|
|
|
|
gdk_window_redirect_free (private->redirect);
|
|
|
|
private->redirect = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2008-06-30 12:15:29 +00:00
|
|
|
apply_redirect_to_children (GdkWindowObject *private,
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkWindowRedirect *redirect)
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
{
|
|
|
|
GList *l;
|
|
|
|
GdkWindowObject *child;
|
|
|
|
|
|
|
|
for (l = private->children; l != NULL; l = l->next)
|
|
|
|
{
|
|
|
|
child = l->data;
|
|
|
|
|
|
|
|
/* Don't redirect this child if it already has another redirect */
|
|
|
|
if (!child->redirect)
|
|
|
|
{
|
|
|
|
child->redirect = redirect;
|
|
|
|
apply_redirect_to_children (child, redirect);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gdk_window_redirect_to_drawable:
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
* @drawable: a #GdkDrawable
|
2008-06-13 17:20:55 +00:00
|
|
|
* @src_x: x position in @window
|
|
|
|
* @src_y: y position in @window
|
|
|
|
* @dest_x: x position in @drawable
|
|
|
|
* @dest_y: y position in @drawable
|
2009-08-31 04:55:32 +00:00
|
|
|
* @width: width of redirection, or -1 to use the width of @window
|
|
|
|
* @height: height of redirection or -1 to use the height of @window
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
*
|
2008-08-16 19:56:23 +00:00
|
|
|
* Redirects drawing into @window so that drawing to the
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
* window in the rectangle specified by @src_x, @src_y,
|
|
|
|
* @width and @height is also drawn into @drawable at
|
|
|
|
* @dest_x, @dest_y.
|
|
|
|
*
|
2008-06-30 12:15:29 +00:00
|
|
|
* Only drawing between gdk_window_begin_paint_region() or
|
|
|
|
* gdk_window_begin_paint_rect() and gdk_window_end_paint() is
|
|
|
|
* redirected.
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
*
|
|
|
|
* Redirection is active until gdk_window_remove_redirection()
|
|
|
|
* is called.
|
|
|
|
*
|
2008-09-04 04:32:30 +00:00
|
|
|
* Since: 2.14
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
**/
|
|
|
|
void
|
2008-06-30 12:15:29 +00:00
|
|
|
gdk_window_redirect_to_drawable (GdkWindow *window,
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
GdkDrawable *drawable,
|
2008-06-30 12:15:29 +00:00
|
|
|
gint src_x,
|
2009-06-01 10:04:36 +00:00
|
|
|
gint src_y,
|
2008-06-30 12:15:29 +00:00
|
|
|
gint dest_x,
|
2009-06-01 10:04:36 +00:00
|
|
|
gint dest_y,
|
2008-06-30 12:15:29 +00:00
|
|
|
gint width,
|
2009-06-01 10:04:36 +00:00
|
|
|
gint height)
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
g_return_if_fail (GDK_IS_DRAWABLE (drawable));
|
|
|
|
g_return_if_fail (GDK_WINDOW_TYPE (window) != GDK_WINDOW_ROOT);
|
|
|
|
|
|
|
|
private = (GdkWindowObject *) window;
|
|
|
|
|
|
|
|
if (private->redirect)
|
|
|
|
gdk_window_remove_redirection (window);
|
|
|
|
|
|
|
|
if (width == -1 || height == -1)
|
|
|
|
{
|
|
|
|
gint w, h;
|
|
|
|
gdk_drawable_get_size (GDK_DRAWABLE (window), &w, &h);
|
|
|
|
if (width == -1)
|
|
|
|
width = w;
|
|
|
|
if (height == -1)
|
|
|
|
height = h;
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
private->redirect = g_new0 (GdkWindowRedirect, 1);
|
|
|
|
private->redirect->redirected = private;
|
|
|
|
private->redirect->pixmap = g_object_ref (drawable);
|
|
|
|
private->redirect->src_x = src_x;
|
|
|
|
private->redirect->src_y = src_y;
|
|
|
|
private->redirect->dest_x = dest_x;
|
|
|
|
private->redirect->dest_y = dest_y;
|
|
|
|
private->redirect->width = width;
|
|
|
|
private->redirect->height = height;
|
|
|
|
|
|
|
|
apply_redirect_to_children (private, private->redirect);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
window_get_size_rectangle (GdkWindow *window,
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkRectangle *rect)
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
{
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkWindowObject *private = (GdkWindowObject *) window;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
rect->x = rect->y = 0;
|
2008-07-18 13:03:42 +00:00
|
|
|
rect->width = private->width;
|
|
|
|
rect->height = private->height;
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Calculates the real clipping region for a window, in window coordinates,
|
|
|
|
* taking into account other windows, gc clip region and gc clip mask.
|
|
|
|
*/
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkRegion *
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
_gdk_window_calculate_full_clip_region (GdkWindow *window,
|
|
|
|
GdkWindow *base_window,
|
2008-07-18 13:03:42 +00:00
|
|
|
gboolean do_children,
|
|
|
|
gint *base_x_offset,
|
|
|
|
gint *base_y_offset)
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
{
|
|
|
|
GdkWindowObject *private = GDK_WINDOW_OBJECT (window);
|
|
|
|
GdkRectangle visible_rect;
|
|
|
|
GdkRegion *real_clip_region, *tmpreg;
|
|
|
|
gint x_offset, y_offset;
|
|
|
|
GdkWindowObject *parentwin, *lastwin;
|
|
|
|
|
|
|
|
if (base_x_offset)
|
|
|
|
*base_x_offset = 0;
|
|
|
|
if (base_y_offset)
|
|
|
|
*base_y_offset = 0;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-07-18 18:37:19 +00:00
|
|
|
if (!private->viewable || private->input_only)
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
return gdk_region_new ();
|
|
|
|
|
|
|
|
window_get_size_rectangle (window, &visible_rect);
|
|
|
|
|
|
|
|
/* real_clip_region is in window coordinates */
|
|
|
|
real_clip_region = gdk_region_rectangle (&visible_rect);
|
|
|
|
|
|
|
|
x_offset = y_offset = 0;
|
|
|
|
|
|
|
|
lastwin = private;
|
|
|
|
if (do_children)
|
|
|
|
parentwin = lastwin;
|
|
|
|
else
|
|
|
|
parentwin = lastwin->parent;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
/* Remove the areas of all overlapping windows above parentwin in the hiearachy */
|
2008-07-18 13:03:42 +00:00
|
|
|
for (; parentwin != NULL &&
|
2009-06-01 10:04:36 +00:00
|
|
|
(parentwin == private || lastwin != (GdkWindowObject*) base_window);
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
lastwin = parentwin, parentwin = lastwin->parent)
|
|
|
|
{
|
|
|
|
GList *cur;
|
|
|
|
GdkRectangle real_clip_rect;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
if (parentwin != private)
|
|
|
|
{
|
|
|
|
x_offset += GDK_WINDOW_OBJECT (lastwin)->x;
|
|
|
|
y_offset += GDK_WINDOW_OBJECT (lastwin)->y;
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
/* children is ordered in reverse stack order */
|
2008-07-18 13:03:42 +00:00
|
|
|
for (cur = parentwin->children;
|
2009-06-01 10:04:36 +00:00
|
|
|
cur && cur->data != lastwin;
|
|
|
|
cur = cur->next)
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
{
|
|
|
|
GdkWindow *child = cur->data;
|
|
|
|
GdkWindowObject *child_private = (GdkWindowObject *)child;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
if (!GDK_WINDOW_IS_MAPPED (child) || child_private->input_only)
|
|
|
|
continue;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
2009-06-01 10:04:36 +00:00
|
|
|
/* Ignore offscreen children, as they don't draw in their parent and
|
2008-07-18 13:03:42 +00:00
|
|
|
* don't take part in the clipping */
|
|
|
|
if (gdk_window_is_offscreen (child_private))
|
|
|
|
continue;
|
|
|
|
|
2009-06-01 10:04:36 +00:00
|
|
|
window_get_size_rectangle (child, &visible_rect);
|
2008-06-27 14:27:44 +00:00
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
/* Convert rect to "window" coords */
|
|
|
|
visible_rect.x += child_private->x - x_offset;
|
|
|
|
visible_rect.y += child_private->y - y_offset;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
/* This shortcut is really necessary for performance when there are a lot of windows */
|
|
|
|
gdk_region_get_clipbox (real_clip_region, &real_clip_rect);
|
|
|
|
if (visible_rect.x >= real_clip_rect.x + real_clip_rect.width ||
|
|
|
|
visible_rect.x + visible_rect.width <= real_clip_rect.x ||
|
|
|
|
visible_rect.y >= real_clip_rect.y + real_clip_rect.height ||
|
|
|
|
visible_rect.y + visible_rect.height <= real_clip_rect.y)
|
|
|
|
continue;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
tmpreg = gdk_region_rectangle (&visible_rect);
|
|
|
|
gdk_region_subtract (real_clip_region, tmpreg);
|
|
|
|
gdk_region_destroy (tmpreg);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-23 05:34:14 +00:00
|
|
|
/* Clip to the parent */
|
|
|
|
window_get_size_rectangle ((GdkWindow *)parentwin, &visible_rect);
|
|
|
|
/* Convert rect to "window" coords */
|
|
|
|
visible_rect.x += - x_offset;
|
|
|
|
visible_rect.y += - y_offset;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-23 05:34:14 +00:00
|
|
|
tmpreg = gdk_region_rectangle (&visible_rect);
|
|
|
|
gdk_region_intersect (real_clip_region, tmpreg);
|
|
|
|
gdk_region_destroy (tmpreg);
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (base_x_offset)
|
|
|
|
*base_x_offset = x_offset;
|
|
|
|
if (base_y_offset)
|
|
|
|
*base_y_offset = y_offset;
|
|
|
|
|
|
|
|
return real_clip_region;
|
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
void
|
|
|
|
_gdk_window_add_damage (GdkWindow *toplevel,
|
|
|
|
GdkRegion *damaged_region)
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
{
|
|
|
|
GdkDisplay *display;
|
|
|
|
GdkEvent event = { 0, };
|
|
|
|
event.expose.type = GDK_DAMAGE;
|
|
|
|
event.expose.window = toplevel;
|
|
|
|
event.expose.send_event = FALSE;
|
|
|
|
event.expose.region = damaged_region;
|
|
|
|
gdk_region_get_clipbox (event.expose.region, &event.expose.area);
|
|
|
|
display = gdk_drawable_get_display (event.expose.window);
|
|
|
|
_gdk_event_queue_append (display, gdk_event_copy (&event));
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_window_redirect_free (GdkWindowRedirect *redirect)
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
{
|
2008-07-18 13:03:42 +00:00
|
|
|
g_object_unref (redirect->pixmap);
|
|
|
|
g_free (redirect);
|
|
|
|
}
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
|
2009-06-08 13:57:59 +00:00
|
|
|
/* Gets the toplevel for a window as used for events,
|
|
|
|
i.e. including offscreen parents */
|
|
|
|
static GdkWindowObject *
|
|
|
|
get_event_parent (GdkWindowObject *window)
|
|
|
|
{
|
2010-04-15 11:08:47 +00:00
|
|
|
if (gdk_window_is_offscreen (window))
|
2009-07-01 12:36:36 +00:00
|
|
|
return (GdkWindowObject *)gdk_offscreen_window_get_embedder ((GdkWindow *)window);
|
2009-06-08 13:57:59 +00:00
|
|
|
else
|
|
|
|
return window->parent;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Gets the toplevel for a window as used for events,
|
|
|
|
i.e. including offscreen parents going up to the native
|
|
|
|
toplevel */
|
|
|
|
static GdkWindow *
|
|
|
|
get_event_toplevel (GdkWindow *w)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private = GDK_WINDOW_OBJECT (w);
|
|
|
|
GdkWindowObject *parent;
|
|
|
|
|
|
|
|
while ((parent = get_event_parent (private)) != NULL &&
|
2009-07-18 13:04:06 +00:00
|
|
|
(parent->window_type != GDK_WINDOW_ROOT))
|
2009-06-08 13:57:59 +00:00
|
|
|
private = parent;
|
|
|
|
|
|
|
|
return GDK_WINDOW (private);
|
|
|
|
}
|
|
|
|
|
2009-07-07 03:06:46 +00:00
|
|
|
gboolean
|
|
|
|
_gdk_window_event_parent_of (GdkWindow *parent,
|
|
|
|
GdkWindow *child)
|
2009-06-08 13:57:59 +00:00
|
|
|
{
|
|
|
|
GdkWindow *w;
|
|
|
|
|
|
|
|
w = child;
|
|
|
|
while (w != NULL)
|
|
|
|
{
|
|
|
|
if (w == parent)
|
|
|
|
return TRUE;
|
|
|
|
|
|
|
|
w = (GdkWindow *)get_event_parent ((GdkWindowObject *)w);
|
|
|
|
}
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
update_cursor (GdkDisplay *display)
|
|
|
|
{
|
2009-09-08 09:48:20 +00:00
|
|
|
GdkWindowObject *cursor_window, *parent, *toplevel;
|
|
|
|
GdkWindow *pointer_window;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2009-06-08 13:57:59 +00:00
|
|
|
GdkPointerGrabInfo *grab;
|
|
|
|
|
2009-09-08 09:48:20 +00:00
|
|
|
pointer_window = display->pointer_info.window_under_pointer;
|
2009-06-08 13:57:59 +00:00
|
|
|
|
|
|
|
/* We ignore the serials here and just pick the last grab
|
|
|
|
we've sent, as that would shortly be used anyway. */
|
|
|
|
grab = _gdk_display_get_last_pointer_grab (display);
|
2009-09-08 09:48:20 +00:00
|
|
|
if (/* have grab */
|
|
|
|
grab != NULL &&
|
|
|
|
/* the pointer is not in a descendant of the grab window */
|
|
|
|
!_gdk_window_event_parent_of (grab->window, pointer_window))
|
|
|
|
/* use the cursor from the grab window */
|
2009-06-08 13:57:59 +00:00
|
|
|
cursor_window = (GdkWindowObject *)grab->window;
|
2009-09-08 09:48:20 +00:00
|
|
|
else
|
|
|
|
/* otherwise use the cursor from the pointer window */
|
|
|
|
cursor_window = (GdkWindowObject *)pointer_window;
|
|
|
|
|
|
|
|
/* Find the first window with the cursor actually set, as
|
|
|
|
the cursor is inherited from the parent */
|
|
|
|
while (cursor_window->cursor == NULL &&
|
|
|
|
(parent = get_event_parent (cursor_window)) != NULL &&
|
|
|
|
parent->window_type != GDK_WINDOW_ROOT)
|
|
|
|
cursor_window = parent;
|
2009-06-08 13:57:59 +00:00
|
|
|
|
|
|
|
/* Set all cursors on toplevel, otherwise its tricky to keep track of
|
|
|
|
* which native window has what cursor set. */
|
2009-09-08 09:48:20 +00:00
|
|
|
toplevel = (GdkWindowObject *)get_event_toplevel (pointer_window);
|
2009-08-31 08:44:11 +00:00
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (toplevel->impl);
|
|
|
|
impl_iface->set_cursor ((GdkWindow *)toplevel, cursor_window->cursor);
|
2009-06-08 13:57:59 +00:00
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static gboolean
|
|
|
|
point_in_window (GdkWindowObject *window,
|
2009-08-31 04:55:32 +00:00
|
|
|
gdouble x,
|
|
|
|
gdouble y)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
return
|
2009-06-08 13:57:59 +00:00
|
|
|
x >= 0 && x < window->width &&
|
2008-12-16 19:09:20 +00:00
|
|
|
y >= 0 && y < window->height &&
|
|
|
|
(window->shape == NULL ||
|
|
|
|
gdk_region_point_in (window->shape,
|
2008-12-17 10:24:46 +00:00
|
|
|
x, y)) &&
|
|
|
|
(window->input_shape == NULL ||
|
|
|
|
gdk_region_point_in (window->input_shape,
|
2008-12-16 19:09:20 +00:00
|
|
|
x, y));
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
|
2009-02-03 11:24:30 +00:00
|
|
|
static GdkWindow *
|
2009-06-08 13:57:59 +00:00
|
|
|
convert_native_coords_to_toplevel (GdkWindow *window,
|
2009-08-31 04:55:32 +00:00
|
|
|
gdouble child_x,
|
|
|
|
gdouble child_y,
|
|
|
|
gdouble *toplevel_x,
|
|
|
|
gdouble *toplevel_y)
|
2009-02-03 11:24:30 +00:00
|
|
|
{
|
|
|
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
|
|
|
gdouble x, y;
|
|
|
|
|
|
|
|
x = child_x;
|
|
|
|
y = child_y;
|
|
|
|
|
2009-08-31 08:59:21 +00:00
|
|
|
while (!gdk_window_is_toplevel (private))
|
2009-02-03 11:24:30 +00:00
|
|
|
{
|
|
|
|
x += private->x;
|
|
|
|
y += private->y;
|
|
|
|
private = private->parent;
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-03 11:24:30 +00:00
|
|
|
*toplevel_x = x;
|
|
|
|
*toplevel_y = y;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-03 11:24:30 +00:00
|
|
|
return (GdkWindow *)private;
|
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static void
|
|
|
|
convert_toplevel_coords_to_window (GdkWindow *window,
|
|
|
|
gdouble toplevel_x,
|
|
|
|
gdouble toplevel_y,
|
|
|
|
gdouble *window_x,
|
|
|
|
gdouble *window_y)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
2009-06-08 13:57:59 +00:00
|
|
|
GdkWindowObject *parent;
|
2008-07-18 13:03:42 +00:00
|
|
|
gdouble x, y;
|
|
|
|
GList *children, *l;
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
private = GDK_WINDOW_OBJECT (window);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
x = toplevel_x;
|
|
|
|
y = toplevel_y;
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
children = NULL;
|
2009-06-08 13:57:59 +00:00
|
|
|
while ((parent = get_event_parent (private)) != NULL &&
|
2009-07-18 13:04:06 +00:00
|
|
|
(parent->window_type != GDK_WINDOW_ROOT))
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
children = g_list_prepend (children, private);
|
2009-06-08 13:57:59 +00:00
|
|
|
private = parent;
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
for (l = children; l != NULL; l = l->next)
|
2010-04-15 11:16:17 +00:00
|
|
|
gdk_window_coords_from_parent (l->data, x, y, &x, &y);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
g_list_free (children);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
*window_x = x;
|
|
|
|
*window_y = y;
|
|
|
|
}
|
|
|
|
|
2009-06-08 13:57:59 +00:00
|
|
|
static GdkWindowObject *
|
2009-07-01 12:36:36 +00:00
|
|
|
pick_embedded_child (GdkWindowObject *window,
|
2009-08-31 04:55:32 +00:00
|
|
|
gdouble x,
|
|
|
|
gdouble y)
|
2009-06-08 13:57:59 +00:00
|
|
|
{
|
|
|
|
GdkWindowObject *res;
|
|
|
|
|
|
|
|
res = NULL;
|
2009-06-24 18:33:13 +00:00
|
|
|
g_signal_emit (window,
|
2009-07-01 12:36:36 +00:00
|
|
|
signals[PICK_EMBEDDED_CHILD], 0,
|
2009-06-24 18:33:13 +00:00
|
|
|
x, y, &res);
|
2009-06-08 13:57:59 +00:00
|
|
|
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
|
2009-06-04 16:45:35 +00:00
|
|
|
GdkWindow *
|
|
|
|
_gdk_window_find_child_at (GdkWindow *window,
|
2009-08-31 04:55:32 +00:00
|
|
|
int x,
|
|
|
|
int y)
|
2009-06-04 16:45:35 +00:00
|
|
|
{
|
|
|
|
GdkWindowObject *private, *sub;
|
|
|
|
double child_x, child_y;
|
|
|
|
GList *l;
|
|
|
|
|
|
|
|
private = (GdkWindowObject *)window;
|
|
|
|
|
|
|
|
if (point_in_window (private, x, y))
|
|
|
|
{
|
|
|
|
/* Children is ordered in reverse stack order, i.e. first is topmost */
|
|
|
|
for (l = private->children; l != NULL; l = l->next)
|
|
|
|
{
|
|
|
|
sub = l->data;
|
|
|
|
|
|
|
|
if (!GDK_WINDOW_IS_MAPPED (sub))
|
|
|
|
continue;
|
|
|
|
|
2010-04-15 11:16:17 +00:00
|
|
|
gdk_window_coords_from_parent ((GdkWindow *)sub,
|
|
|
|
x, y,
|
|
|
|
&child_x, &child_y);
|
2009-06-04 16:45:35 +00:00
|
|
|
if (point_in_window (sub, child_x, child_y))
|
|
|
|
return (GdkWindow *)sub;
|
|
|
|
}
|
2009-06-08 13:57:59 +00:00
|
|
|
|
2009-07-01 12:36:36 +00:00
|
|
|
if (private->num_offscreen_children > 0)
|
2009-06-08 13:57:59 +00:00
|
|
|
{
|
2009-07-01 12:36:36 +00:00
|
|
|
sub = pick_embedded_child (private,
|
|
|
|
x, y);
|
2009-06-08 13:57:59 +00:00
|
|
|
if (sub)
|
|
|
|
return (GdkWindow *)sub;
|
|
|
|
}
|
2009-06-04 16:45:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkWindow *
|
|
|
|
_gdk_window_find_descendant_at (GdkWindow *toplevel,
|
2009-08-31 04:55:32 +00:00
|
|
|
gdouble x,
|
|
|
|
gdouble y,
|
|
|
|
gdouble *found_x,
|
|
|
|
gdouble *found_y)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
GdkWindowObject *private, *sub;
|
2009-08-31 04:55:32 +00:00
|
|
|
gdouble child_x, child_y;
|
2008-07-18 13:03:42 +00:00
|
|
|
GList *l;
|
2009-06-08 13:57:59 +00:00
|
|
|
gboolean found;
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
private = (GdkWindowObject *)toplevel;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (point_in_window (private, x, y))
|
|
|
|
{
|
2009-06-01 10:04:36 +00:00
|
|
|
do
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
2009-06-08 13:57:59 +00:00
|
|
|
found = FALSE;
|
2008-07-18 13:03:42 +00:00
|
|
|
/* Children is ordered in reverse stack order, i.e. first is topmost */
|
|
|
|
for (l = private->children; l != NULL; l = l->next)
|
|
|
|
{
|
|
|
|
sub = l->data;
|
|
|
|
|
2009-06-01 10:04:36 +00:00
|
|
|
if (!GDK_WINDOW_IS_MAPPED (sub))
|
|
|
|
continue;
|
|
|
|
|
2010-04-15 11:16:17 +00:00
|
|
|
gdk_window_coords_from_parent ((GdkWindow *)sub,
|
|
|
|
x, y,
|
|
|
|
&child_x, &child_y);
|
2008-07-18 13:03:42 +00:00
|
|
|
if (point_in_window (sub, child_x, child_y))
|
|
|
|
{
|
|
|
|
x = child_x;
|
|
|
|
y = child_y;
|
|
|
|
private = sub;
|
2009-06-08 13:57:59 +00:00
|
|
|
found = TRUE;
|
2008-07-18 13:03:42 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2009-06-08 13:57:59 +00:00
|
|
|
if (!found &&
|
2009-07-01 12:36:36 +00:00
|
|
|
private->num_offscreen_children > 0)
|
2009-06-08 13:57:59 +00:00
|
|
|
{
|
2009-07-01 12:36:36 +00:00
|
|
|
sub = pick_embedded_child (private,
|
|
|
|
x, y);
|
2009-06-08 13:57:59 +00:00
|
|
|
if (sub)
|
|
|
|
{
|
|
|
|
found = TRUE;
|
|
|
|
private = sub;
|
2009-07-01 12:36:36 +00:00
|
|
|
from_embedder (sub, x, y, &x, &y);
|
2009-06-08 13:57:59 +00:00
|
|
|
}
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
2009-06-08 13:57:59 +00:00
|
|
|
while (found);
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* Not in window at all */
|
|
|
|
private = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (found_x)
|
|
|
|
*found_x = x;
|
|
|
|
if (found_y)
|
|
|
|
*found_y = y;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
return (GdkWindow *)private;
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
}
|
|
|
|
|
2009-06-11 20:11:48 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_beep:
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
*
|
|
|
|
* Emits a short beep associated to @window in the appropriate
|
|
|
|
* display, if supported. Otherwise, emits a short beep on
|
|
|
|
* the display just as gdk_display_beep().
|
|
|
|
*
|
|
|
|
* Since: 2.12
|
|
|
|
**/
|
|
|
|
void
|
|
|
|
gdk_window_beep (GdkWindow *window)
|
|
|
|
{
|
|
|
|
GdkDisplay *display;
|
|
|
|
GdkWindow *toplevel;
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
return;
|
|
|
|
|
|
|
|
toplevel = get_event_toplevel (window);
|
|
|
|
display = gdk_drawable_get_display (GDK_DRAWABLE (window));
|
|
|
|
|
2009-08-29 17:06:04 +00:00
|
|
|
if (toplevel && !gdk_window_is_offscreen ((GdkWindowObject *)toplevel))
|
2009-06-11 20:11:48 +00:00
|
|
|
_gdk_windowing_window_beep (toplevel);
|
|
|
|
else
|
|
|
|
gdk_display_beep (display);
|
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static const guint type_masks[] = {
|
|
|
|
GDK_SUBSTRUCTURE_MASK, /* GDK_DELETE = 0 */
|
|
|
|
GDK_STRUCTURE_MASK, /* GDK_DESTROY = 1 */
|
|
|
|
GDK_EXPOSURE_MASK, /* GDK_EXPOSE = 2 */
|
|
|
|
GDK_POINTER_MOTION_MASK, /* GDK_MOTION_NOTIFY = 3 */
|
|
|
|
GDK_BUTTON_PRESS_MASK, /* GDK_BUTTON_PRESS = 4 */
|
|
|
|
GDK_BUTTON_PRESS_MASK, /* GDK_2BUTTON_PRESS = 5 */
|
|
|
|
GDK_BUTTON_PRESS_MASK, /* GDK_3BUTTON_PRESS = 6 */
|
|
|
|
GDK_BUTTON_RELEASE_MASK, /* GDK_BUTTON_RELEASE = 7 */
|
|
|
|
GDK_KEY_PRESS_MASK, /* GDK_KEY_PRESS = 8 */
|
|
|
|
GDK_KEY_RELEASE_MASK, /* GDK_KEY_RELEASE = 9 */
|
|
|
|
GDK_ENTER_NOTIFY_MASK, /* GDK_ENTER_NOTIFY = 10 */
|
|
|
|
GDK_LEAVE_NOTIFY_MASK, /* GDK_LEAVE_NOTIFY = 11 */
|
|
|
|
GDK_FOCUS_CHANGE_MASK, /* GDK_FOCUS_CHANGE = 12 */
|
|
|
|
GDK_STRUCTURE_MASK, /* GDK_CONFIGURE = 13 */
|
|
|
|
GDK_VISIBILITY_NOTIFY_MASK, /* GDK_MAP = 14 */
|
|
|
|
GDK_VISIBILITY_NOTIFY_MASK, /* GDK_UNMAP = 15 */
|
|
|
|
GDK_PROPERTY_CHANGE_MASK, /* GDK_PROPERTY_NOTIFY = 16 */
|
|
|
|
GDK_PROPERTY_CHANGE_MASK, /* GDK_SELECTION_CLEAR = 17 */
|
|
|
|
GDK_PROPERTY_CHANGE_MASK, /* GDK_SELECTION_REQUEST = 18 */
|
|
|
|
GDK_PROPERTY_CHANGE_MASK, /* GDK_SELECTION_NOTIFY = 19 */
|
|
|
|
GDK_PROXIMITY_IN_MASK, /* GDK_PROXIMITY_IN = 20 */
|
|
|
|
GDK_PROXIMITY_OUT_MASK, /* GDK_PROXIMITY_OUT = 21 */
|
|
|
|
GDK_ALL_EVENTS_MASK, /* GDK_DRAG_ENTER = 22 */
|
|
|
|
GDK_ALL_EVENTS_MASK, /* GDK_DRAG_LEAVE = 23 */
|
|
|
|
GDK_ALL_EVENTS_MASK, /* GDK_DRAG_MOTION = 24 */
|
|
|
|
GDK_ALL_EVENTS_MASK, /* GDK_DRAG_STATUS = 25 */
|
|
|
|
GDK_ALL_EVENTS_MASK, /* GDK_DROP_START = 26 */
|
|
|
|
GDK_ALL_EVENTS_MASK, /* GDK_DROP_FINISHED = 27 */
|
|
|
|
GDK_ALL_EVENTS_MASK, /* GDK_CLIENT_EVENT = 28 */
|
|
|
|
GDK_VISIBILITY_NOTIFY_MASK, /* GDK_VISIBILITY_NOTIFY = 29 */
|
|
|
|
GDK_EXPOSURE_MASK, /* GDK_NO_EXPOSE = 30 */
|
|
|
|
GDK_SCROLL_MASK | GDK_BUTTON_PRESS_MASK,/* GDK_SCROLL= 31 */
|
|
|
|
0, /* GDK_WINDOW_STATE = 32 */
|
|
|
|
0, /* GDK_SETTING = 33 */
|
|
|
|
0, /* GDK_OWNER_CHANGE = 34 */
|
|
|
|
0, /* GDK_GRAB_BROKEN = 35 */
|
|
|
|
0, /* GDK_DAMAGE = 36 */
|
|
|
|
};
|
|
|
|
G_STATIC_ASSERT (G_N_ELEMENTS (type_masks) == GDK_EVENT_LAST);
|
|
|
|
|
|
|
|
/* send motion events if the right buttons are down */
|
|
|
|
static guint
|
|
|
|
update_evmask_for_button_motion (guint evmask,
|
2009-06-01 10:04:36 +00:00
|
|
|
GdkModifierType mask)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
if (evmask & GDK_BUTTON_MOTION_MASK &&
|
|
|
|
mask & (GDK_BUTTON1_MASK |
|
|
|
|
GDK_BUTTON2_MASK |
|
|
|
|
GDK_BUTTON3_MASK |
|
|
|
|
GDK_BUTTON4_MASK |
|
|
|
|
GDK_BUTTON5_MASK))
|
|
|
|
evmask |= GDK_POINTER_MOTION_MASK;
|
|
|
|
|
|
|
|
if ((evmask & GDK_BUTTON1_MOTION_MASK && mask & GDK_BUTTON1_MASK) ||
|
|
|
|
(evmask & GDK_BUTTON2_MOTION_MASK && mask & GDK_BUTTON2_MASK) ||
|
|
|
|
(evmask & GDK_BUTTON3_MOTION_MASK && mask & GDK_BUTTON3_MASK))
|
|
|
|
evmask |= GDK_POINTER_MOTION_MASK;
|
|
|
|
|
|
|
|
return evmask;
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
is_button_type (GdkEventType type)
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
{
|
2008-07-18 13:03:42 +00:00
|
|
|
return type == GDK_BUTTON_PRESS ||
|
2009-06-01 10:04:36 +00:00
|
|
|
type == GDK_2BUTTON_PRESS ||
|
|
|
|
type == GDK_3BUTTON_PRESS ||
|
|
|
|
type == GDK_BUTTON_RELEASE ||
|
|
|
|
type == GDK_SCROLL;
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
is_motion_type (GdkEventType type)
|
|
|
|
{
|
|
|
|
return type == GDK_MOTION_NOTIFY ||
|
2009-06-01 10:04:36 +00:00
|
|
|
type == GDK_ENTER_NOTIFY ||
|
|
|
|
type == GDK_LEAVE_NOTIFY;
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
static GdkWindowObject *
|
|
|
|
find_common_ancestor (GdkWindowObject *win1,
|
|
|
|
GdkWindowObject *win2)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
GdkWindowObject *tmp;
|
|
|
|
GList *path1 = NULL, *path2 = NULL;
|
|
|
|
GList *list1, *list2;
|
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
tmp = win1;
|
2008-07-18 13:03:42 +00:00
|
|
|
while (tmp != NULL && tmp->window_type != GDK_WINDOW_ROOT)
|
|
|
|
{
|
|
|
|
path1 = g_list_prepend (path1, tmp);
|
2009-06-08 13:57:59 +00:00
|
|
|
tmp = get_event_parent (tmp);
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
tmp = win2;
|
2008-07-18 13:03:42 +00:00
|
|
|
while (tmp != NULL && tmp->window_type != GDK_WINDOW_ROOT)
|
|
|
|
{
|
|
|
|
path2 = g_list_prepend (path2, tmp);
|
2009-06-08 13:57:59 +00:00
|
|
|
tmp = get_event_parent (tmp);
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
list1 = path1;
|
|
|
|
list2 = path2;
|
|
|
|
tmp = NULL;
|
|
|
|
while (list1 && list2 && (list1->data == list2->data))
|
|
|
|
{
|
|
|
|
tmp = (GdkWindowObject *)list1->data;
|
|
|
|
list1 = g_list_next (list1);
|
|
|
|
list2 = g_list_next (list2);
|
|
|
|
}
|
|
|
|
g_list_free (path1);
|
|
|
|
g_list_free (path2);
|
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
return tmp;
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
GdkEvent *
|
|
|
|
_gdk_make_event (GdkWindow *window,
|
|
|
|
GdkEventType type,
|
|
|
|
GdkEvent *event_in_queue,
|
|
|
|
gboolean before_event)
|
|
|
|
{
|
|
|
|
GdkEvent *event = gdk_event_new (type);
|
|
|
|
guint32 the_time;
|
|
|
|
GdkModifierType the_state;
|
|
|
|
|
|
|
|
the_time = gdk_event_get_time (event_in_queue);
|
|
|
|
gdk_event_get_state (event_in_queue, &the_state);
|
|
|
|
|
|
|
|
event->any.window = g_object_ref (window);
|
|
|
|
event->any.send_event = FALSE;
|
2009-08-26 08:34:15 +00:00
|
|
|
if (event_in_queue && event_in_queue->any.send_event)
|
|
|
|
event->any.send_event = TRUE;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
switch (type)
|
|
|
|
{
|
|
|
|
case GDK_MOTION_NOTIFY:
|
|
|
|
event->motion.time = the_time;
|
|
|
|
event->motion.axes = NULL;
|
|
|
|
event->motion.state = the_state;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case GDK_BUTTON_PRESS:
|
|
|
|
case GDK_2BUTTON_PRESS:
|
|
|
|
case GDK_3BUTTON_PRESS:
|
|
|
|
case GDK_BUTTON_RELEASE:
|
|
|
|
event->button.time = the_time;
|
|
|
|
event->button.axes = NULL;
|
|
|
|
event->button.state = the_state;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case GDK_SCROLL:
|
|
|
|
event->scroll.time = the_time;
|
|
|
|
event->scroll.state = the_state;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case GDK_KEY_PRESS:
|
|
|
|
case GDK_KEY_RELEASE:
|
|
|
|
event->key.time = the_time;
|
|
|
|
event->key.state = the_state;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case GDK_ENTER_NOTIFY:
|
|
|
|
case GDK_LEAVE_NOTIFY:
|
|
|
|
event->crossing.time = the_time;
|
|
|
|
event->crossing.state = the_state;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case GDK_PROPERTY_NOTIFY:
|
|
|
|
event->property.time = the_time;
|
|
|
|
event->property.state = the_state;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case GDK_SELECTION_CLEAR:
|
|
|
|
case GDK_SELECTION_REQUEST:
|
|
|
|
case GDK_SELECTION_NOTIFY:
|
|
|
|
event->selection.time = the_time;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case GDK_PROXIMITY_IN:
|
|
|
|
case GDK_PROXIMITY_OUT:
|
|
|
|
event->proximity.time = the_time;
|
|
|
|
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:
|
|
|
|
event->dnd.time = the_time;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case GDK_FOCUS_CHANGE:
|
|
|
|
case GDK_CONFIGURE:
|
|
|
|
case GDK_MAP:
|
|
|
|
case GDK_UNMAP:
|
|
|
|
case GDK_CLIENT_EVENT:
|
|
|
|
case GDK_VISIBILITY_NOTIFY:
|
|
|
|
case GDK_NO_EXPOSE:
|
|
|
|
case GDK_DELETE:
|
|
|
|
case GDK_DESTROY:
|
|
|
|
case GDK_EXPOSE:
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (event_in_queue)
|
|
|
|
{
|
|
|
|
if (before_event)
|
|
|
|
_gdk_event_queue_insert_before (gdk_drawable_get_display (window), event_in_queue, event);
|
|
|
|
else
|
|
|
|
_gdk_event_queue_insert_after (gdk_drawable_get_display (window), event_in_queue, event);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
_gdk_event_queue_append (gdk_drawable_get_display (window), event);
|
|
|
|
|
|
|
|
return event;
|
|
|
|
}
|
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
static void
|
|
|
|
send_crossing_event (GdkDisplay *display,
|
|
|
|
GdkWindowObject *toplevel,
|
|
|
|
GdkWindowObject *window,
|
|
|
|
GdkEventType type,
|
|
|
|
GdkCrossingMode mode,
|
|
|
|
GdkNotifyType notify_type,
|
|
|
|
GdkWindow *subwindow,
|
|
|
|
gint toplevel_x,
|
|
|
|
gint toplevel_y,
|
|
|
|
GdkModifierType mask,
|
|
|
|
guint32 time_,
|
2009-01-31 18:42:44 +00:00
|
|
|
GdkEvent *event_in_queue,
|
|
|
|
gulong serial)
|
2008-12-15 09:24:54 +00:00
|
|
|
{
|
|
|
|
GdkEvent *event;
|
2009-09-15 12:39:04 +00:00
|
|
|
guint32 window_event_mask, type_event_mask;
|
2009-01-31 18:42:44 +00:00
|
|
|
GdkPointerGrabInfo *grab;
|
2009-08-31 08:44:11 +00:00
|
|
|
GdkWindowImplIface *impl_iface;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-31 18:42:44 +00:00
|
|
|
grab = _gdk_display_has_pointer_grab (display, serial);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-31 18:42:44 +00:00
|
|
|
if (grab != NULL &&
|
2009-09-15 12:39:04 +00:00
|
|
|
!grab->owner_events)
|
|
|
|
{
|
|
|
|
/* !owner_event => only report events wrt grab window, ignore rest */
|
|
|
|
if ((GdkWindow *)window != grab->window)
|
|
|
|
return;
|
|
|
|
window_event_mask = grab->event_mask;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
window_event_mask = window->event_mask;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
if (type == GDK_LEAVE_NOTIFY)
|
2009-09-15 12:39:04 +00:00
|
|
|
type_event_mask = GDK_LEAVE_NOTIFY_MASK;
|
2008-12-15 09:24:54 +00:00
|
|
|
else
|
2009-09-15 12:39:04 +00:00
|
|
|
type_event_mask = GDK_ENTER_NOTIFY_MASK;
|
2008-12-15 09:24:54 +00:00
|
|
|
|
2009-05-29 14:39:12 +00:00
|
|
|
if (window->extension_events != 0)
|
2009-08-31 08:44:11 +00:00
|
|
|
{
|
|
|
|
impl_iface = GDK_WINDOW_IMPL_GET_IFACE (window->impl);
|
|
|
|
impl_iface->input_window_crossing ((GdkWindow *)window,
|
|
|
|
type == GDK_ENTER_NOTIFY);
|
|
|
|
}
|
2009-05-29 14:39:12 +00:00
|
|
|
|
2009-09-15 12:39:04 +00:00
|
|
|
if (window_event_mask & type_event_mask)
|
2008-12-15 09:24:54 +00:00
|
|
|
{
|
2008-12-15 12:38:41 +00:00
|
|
|
event = _gdk_make_event ((GdkWindow *)window, type, event_in_queue, TRUE);
|
2008-12-15 09:24:54 +00:00
|
|
|
event->crossing.time = time_;
|
|
|
|
event->crossing.subwindow = subwindow;
|
|
|
|
if (subwindow)
|
|
|
|
g_object_ref (subwindow);
|
|
|
|
convert_toplevel_coords_to_window ((GdkWindow *)window,
|
|
|
|
toplevel_x, toplevel_y,
|
|
|
|
&event->crossing.x, &event->crossing.y);
|
|
|
|
event->crossing.x_root = toplevel_x + toplevel->x;
|
|
|
|
event->crossing.y_root = toplevel_y + toplevel->y;
|
|
|
|
event->crossing.mode = mode;
|
|
|
|
event->crossing.detail = notify_type;
|
|
|
|
event->crossing.focus = FALSE;
|
|
|
|
event->crossing.state = mask;
|
|
|
|
}
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* The coordinates are in the toplevel window that src/dest are in.
|
|
|
|
* src and dest are always (if != NULL) in the same toplevel, as
|
|
|
|
* we get a leave-notify and set the window_under_pointer to null
|
|
|
|
* before crossing to another toplevel.
|
|
|
|
*/
|
|
|
|
void
|
2009-06-18 18:58:13 +00:00
|
|
|
_gdk_synthesize_crossing_events (GdkDisplay *display,
|
2009-07-09 14:48:22 +00:00
|
|
|
GdkWindow *src,
|
|
|
|
GdkWindow *dest,
|
|
|
|
GdkCrossingMode mode,
|
|
|
|
gint toplevel_x,
|
|
|
|
gint toplevel_y,
|
|
|
|
GdkModifierType mask,
|
|
|
|
guint32 time_,
|
|
|
|
GdkEvent *event_in_queue,
|
|
|
|
gulong serial,
|
|
|
|
gboolean non_linear)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
2008-12-15 09:24:54 +00:00
|
|
|
GdkWindowObject *c;
|
|
|
|
GdkWindowObject *win, *last, *next;
|
2008-07-18 13:03:42 +00:00
|
|
|
GList *path, *list;
|
2008-12-15 09:24:54 +00:00
|
|
|
GdkWindowObject *a;
|
|
|
|
GdkWindowObject *b;
|
2008-12-04 14:20:19 +00:00
|
|
|
GdkWindowObject *toplevel;
|
2008-12-15 09:24:54 +00:00
|
|
|
GdkNotifyType notify_type;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
/* TODO: Don't send events to toplevel, as we get those from the windowing system */
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
a = (GdkWindowObject *)src;
|
|
|
|
b = (GdkWindowObject *)dest;
|
2008-07-18 13:03:42 +00:00
|
|
|
if (a == b)
|
|
|
|
return; /* No crossings generated between src and dest */
|
2008-12-04 14:20:19 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
c = find_common_ancestor (a, b);
|
2008-12-15 09:24:54 +00:00
|
|
|
|
2009-07-09 14:48:22 +00:00
|
|
|
non_linear |= (c != a) && (c != b);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
if (a) /* There might not be a source (i.e. if no previous pointer_in_window) */
|
|
|
|
{
|
2008-12-15 09:24:54 +00:00
|
|
|
toplevel = (GdkWindowObject *)gdk_window_get_toplevel ((GdkWindow *)a);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* Traverse up from a to (excluding) c sending leave events */
|
2008-12-15 09:24:54 +00:00
|
|
|
if (non_linear)
|
|
|
|
notify_type = GDK_NOTIFY_NONLINEAR;
|
|
|
|
else if (c == a)
|
|
|
|
notify_type = GDK_NOTIFY_INFERIOR;
|
|
|
|
else
|
|
|
|
notify_type = GDK_NOTIFY_ANCESTOR;
|
|
|
|
send_crossing_event (display, toplevel,
|
|
|
|
a, GDK_LEAVE_NOTIFY,
|
|
|
|
mode,
|
|
|
|
notify_type,
|
|
|
|
NULL,
|
|
|
|
toplevel_x, toplevel_y,
|
|
|
|
mask, time_,
|
2009-01-31 18:42:44 +00:00
|
|
|
event_in_queue,
|
|
|
|
serial);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
if (c != a)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
if (non_linear)
|
2008-12-15 09:24:54 +00:00
|
|
|
notify_type = GDK_NOTIFY_NONLINEAR_VIRTUAL;
|
2008-07-18 13:03:42 +00:00
|
|
|
else
|
2008-12-15 09:24:54 +00:00
|
|
|
notify_type = GDK_NOTIFY_VIRTUAL;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
last = a;
|
2009-06-08 13:57:59 +00:00
|
|
|
win = get_event_parent (a);
|
2009-07-18 13:04:06 +00:00
|
|
|
while (win != c && win->window_type != GDK_WINDOW_ROOT)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
2008-12-15 09:24:54 +00:00
|
|
|
send_crossing_event (display, toplevel,
|
|
|
|
win, GDK_LEAVE_NOTIFY,
|
|
|
|
mode,
|
|
|
|
notify_type,
|
|
|
|
(GdkWindow *)last,
|
|
|
|
toplevel_x, toplevel_y,
|
|
|
|
mask, time_,
|
2009-01-31 18:42:44 +00:00
|
|
|
event_in_queue,
|
|
|
|
serial);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
last = win;
|
2009-06-08 13:57:59 +00:00
|
|
|
win = get_event_parent (win);
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (b) /* Might not be a dest, e.g. if we're moving out of the window */
|
|
|
|
{
|
2008-12-15 09:24:54 +00:00
|
|
|
toplevel = (GdkWindowObject *)gdk_window_get_toplevel ((GdkWindow *)b);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
/* Traverse down from c to b */
|
|
|
|
if (c != b)
|
|
|
|
{
|
|
|
|
path = NULL;
|
2009-06-08 13:57:59 +00:00
|
|
|
win = get_event_parent (b);
|
2009-07-18 13:04:06 +00:00
|
|
|
while (win != c && win->window_type != GDK_WINDOW_ROOT)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
path = g_list_prepend (path, win);
|
2009-06-08 13:57:59 +00:00
|
|
|
win = get_event_parent (win);
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
if (non_linear)
|
|
|
|
notify_type = GDK_NOTIFY_NONLINEAR_VIRTUAL;
|
|
|
|
else
|
|
|
|
notify_type = GDK_NOTIFY_VIRTUAL;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
list = path;
|
|
|
|
while (list)
|
|
|
|
{
|
2008-12-15 09:24:54 +00:00
|
|
|
win = (GdkWindowObject *)list->data;
|
2008-07-18 13:03:42 +00:00
|
|
|
list = g_list_next (list);
|
|
|
|
if (list)
|
2008-12-15 09:24:54 +00:00
|
|
|
next = (GdkWindowObject *)list->data;
|
2008-07-18 13:03:42 +00:00
|
|
|
else
|
|
|
|
next = b;
|
2008-12-15 09:24:54 +00:00
|
|
|
|
|
|
|
send_crossing_event (display, toplevel,
|
|
|
|
win, GDK_ENTER_NOTIFY,
|
|
|
|
mode,
|
|
|
|
notify_type,
|
|
|
|
(GdkWindow *)next,
|
|
|
|
toplevel_x, toplevel_y,
|
|
|
|
mask, time_,
|
2009-01-31 18:42:44 +00:00
|
|
|
event_in_queue,
|
|
|
|
serial);
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
g_list_free (path);
|
|
|
|
}
|
2008-12-15 09:24:54 +00:00
|
|
|
|
|
|
|
|
|
|
|
if (non_linear)
|
|
|
|
notify_type = GDK_NOTIFY_NONLINEAR;
|
|
|
|
else if (c == a)
|
|
|
|
notify_type = GDK_NOTIFY_ANCESTOR;
|
|
|
|
else
|
|
|
|
notify_type = GDK_NOTIFY_INFERIOR;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
send_crossing_event (display, toplevel,
|
|
|
|
b, GDK_ENTER_NOTIFY,
|
|
|
|
mode,
|
|
|
|
notify_type,
|
|
|
|
NULL,
|
|
|
|
toplevel_x, toplevel_y,
|
|
|
|
mask, time_,
|
2009-01-31 18:42:44 +00:00
|
|
|
event_in_queue,
|
|
|
|
serial);
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
/* Returns the window inside the event window with the pointer in it
|
|
|
|
* at the specified coordinates, or NULL if its not in any child of
|
|
|
|
* the toplevel. It also takes into account !owner_events grabs.
|
|
|
|
*/
|
|
|
|
static GdkWindow *
|
|
|
|
get_pointer_window (GdkDisplay *display,
|
|
|
|
GdkWindow *event_window,
|
|
|
|
gdouble toplevel_x,
|
2009-01-31 18:42:44 +00:00
|
|
|
gdouble toplevel_y,
|
|
|
|
gulong serial)
|
2008-12-15 09:24:54 +00:00
|
|
|
{
|
|
|
|
GdkWindow *pointer_window;
|
2009-01-31 18:42:44 +00:00
|
|
|
GdkPointerGrabInfo *grab;
|
2008-12-15 09:24:54 +00:00
|
|
|
|
|
|
|
if (event_window == display->pointer_info.toplevel_under_pointer)
|
|
|
|
pointer_window =
|
|
|
|
_gdk_window_find_descendant_at (event_window,
|
|
|
|
toplevel_x, toplevel_y,
|
|
|
|
NULL, NULL);
|
|
|
|
else
|
|
|
|
pointer_window = NULL;
|
|
|
|
|
2009-01-31 18:42:44 +00:00
|
|
|
grab = _gdk_display_has_pointer_grab (display, serial);
|
|
|
|
if (grab != NULL &&
|
|
|
|
!grab->owner_events &&
|
|
|
|
pointer_window != grab->window)
|
2008-12-15 09:24:54 +00:00
|
|
|
pointer_window = NULL;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
return pointer_window;
|
|
|
|
}
|
|
|
|
|
2008-12-15 13:02:52 +00:00
|
|
|
void
|
|
|
|
_gdk_display_set_window_under_pointer (GdkDisplay *display,
|
|
|
|
GdkWindow *window)
|
2008-12-15 09:24:54 +00:00
|
|
|
{
|
2009-08-24 13:18:10 +00:00
|
|
|
/* We don't track this if all native, and it can cause issues
|
|
|
|
with the update_cursor call below */
|
|
|
|
if (_gdk_native_windows)
|
|
|
|
return;
|
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
if (display->pointer_info.window_under_pointer)
|
|
|
|
g_object_unref (display->pointer_info.window_under_pointer);
|
|
|
|
display->pointer_info.window_under_pointer = window;
|
|
|
|
if (window)
|
|
|
|
g_object_ref (window);
|
2008-12-15 13:02:52 +00:00
|
|
|
|
|
|
|
if (window)
|
2008-12-15 13:16:54 +00:00
|
|
|
update_cursor (display);
|
2009-01-23 12:04:44 +00:00
|
|
|
|
2009-01-23 20:07:53 +00:00
|
|
|
_gdk_display_enable_motion_hints (display);
|
2008-12-15 09:24:54 +00:00
|
|
|
}
|
|
|
|
|
2009-06-05 12:50:58 +00:00
|
|
|
/*
|
|
|
|
*--------------------------------------------------------------
|
|
|
|
* gdk_pointer_grab
|
|
|
|
*
|
|
|
|
* Grabs the pointer to a specific window
|
|
|
|
*
|
|
|
|
* Arguments:
|
|
|
|
* "window" is the window which will receive the grab
|
|
|
|
* "owner_events" specifies whether events will be reported as is,
|
|
|
|
* or relative to "window"
|
|
|
|
* "event_mask" masks only interesting events
|
|
|
|
* "confine_to" limits the cursor movement to the specified window
|
|
|
|
* "cursor" changes the cursor for the duration of the grab
|
|
|
|
* "time" specifies the time
|
|
|
|
*
|
|
|
|
* Results:
|
|
|
|
*
|
|
|
|
* Side effects:
|
|
|
|
* requires a corresponding call to gdk_pointer_ungrab
|
|
|
|
*
|
|
|
|
*--------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
GdkGrabStatus
|
|
|
|
gdk_pointer_grab (GdkWindow * window,
|
|
|
|
gboolean owner_events,
|
|
|
|
GdkEventMask event_mask,
|
|
|
|
GdkWindow * confine_to,
|
|
|
|
GdkCursor * cursor,
|
|
|
|
guint32 time)
|
|
|
|
{
|
|
|
|
GdkWindow *native;
|
|
|
|
GdkDisplay *display;
|
|
|
|
GdkGrabStatus res;
|
|
|
|
gulong serial;
|
|
|
|
|
|
|
|
g_return_val_if_fail (window != NULL, 0);
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
|
|
|
|
g_return_val_if_fail (confine_to == NULL || GDK_IS_WINDOW (confine_to), 0);
|
|
|
|
|
|
|
|
/* We need a native window for confine to to work, ensure we have one */
|
|
|
|
if (confine_to)
|
|
|
|
{
|
|
|
|
if (!gdk_window_ensure_native (confine_to))
|
|
|
|
{
|
|
|
|
g_warning ("Can't confine to grabbed window, not native");
|
|
|
|
confine_to = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Non-viewable client side window => fail */
|
|
|
|
if (!_gdk_window_has_impl (window) &&
|
|
|
|
!gdk_window_is_viewable (window))
|
|
|
|
return GDK_GRAB_NOT_VIEWABLE;
|
|
|
|
|
2009-08-24 13:18:10 +00:00
|
|
|
if (_gdk_native_windows)
|
|
|
|
native = window;
|
|
|
|
else
|
|
|
|
native = gdk_window_get_toplevel (window);
|
2009-06-05 12:50:58 +00:00
|
|
|
while (gdk_window_is_offscreen ((GdkWindowObject *)native))
|
|
|
|
{
|
2009-07-01 12:36:36 +00:00
|
|
|
native = gdk_offscreen_window_get_embedder (native);
|
2009-06-05 12:50:58 +00:00
|
|
|
|
|
|
|
if (native == NULL ||
|
|
|
|
(!_gdk_window_has_impl (native) &&
|
|
|
|
!gdk_window_is_viewable (native)))
|
|
|
|
return GDK_GRAB_NOT_VIEWABLE;
|
|
|
|
|
|
|
|
native = gdk_window_get_toplevel (native);
|
|
|
|
}
|
|
|
|
|
|
|
|
display = gdk_drawable_get_display (window);
|
|
|
|
|
|
|
|
serial = _gdk_windowing_window_get_next_serial (display);
|
|
|
|
|
|
|
|
res = _gdk_windowing_pointer_grab (window,
|
|
|
|
native,
|
|
|
|
owner_events,
|
2009-09-25 09:28:26 +00:00
|
|
|
get_native_grab_event_mask (event_mask),
|
2009-06-05 12:50:58 +00:00
|
|
|
confine_to,
|
|
|
|
cursor,
|
|
|
|
time);
|
|
|
|
|
|
|
|
if (res == GDK_GRAB_SUCCESS)
|
|
|
|
_gdk_display_add_pointer_grab (display,
|
|
|
|
window,
|
|
|
|
native,
|
|
|
|
owner_events,
|
|
|
|
event_mask,
|
|
|
|
serial,
|
|
|
|
time,
|
|
|
|
FALSE);
|
|
|
|
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
|
2009-07-03 19:17:26 +00:00
|
|
|
/**
|
|
|
|
* gdk_window_geometry_changed:
|
2009-08-31 23:51:19 +00:00
|
|
|
* @window: an embedded offscreen #GdkWindow
|
|
|
|
*
|
|
|
|
* This function informs GDK that the geometry of an embedded
|
|
|
|
* offscreen window has changed. This is necessary for GDK to keep
|
|
|
|
* track of which offscreen window the pointer is in.
|
2009-07-03 19:17:26 +00:00
|
|
|
*
|
|
|
|
* Since: 2.18
|
|
|
|
*/
|
2009-06-04 18:15:29 +00:00
|
|
|
void
|
2009-07-01 12:36:36 +00:00
|
|
|
gdk_window_geometry_changed (GdkWindow *window)
|
2009-06-11 10:06:01 +00:00
|
|
|
{
|
2009-06-18 18:58:13 +00:00
|
|
|
_gdk_synthesize_crossing_events_for_geometry_change (window);
|
2009-06-11 10:06:01 +00:00
|
|
|
}
|
2009-06-04 18:15:29 +00:00
|
|
|
|
2009-06-11 19:49:17 +00:00
|
|
|
static gboolean
|
|
|
|
do_synthesize_crossing_event (gpointer data)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
GdkDisplay *display;
|
|
|
|
GdkWindow *changed_toplevel;
|
2009-06-11 19:49:17 +00:00
|
|
|
GdkWindowObject *changed_toplevel_priv;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkWindow *new_window_under_pointer;
|
2009-01-31 18:42:44 +00:00
|
|
|
gulong serial;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-06-11 19:49:17 +00:00
|
|
|
changed_toplevel = data;
|
|
|
|
changed_toplevel_priv = (GdkWindowObject *)changed_toplevel;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-06-11 19:56:02 +00:00
|
|
|
changed_toplevel_priv->synthesize_crossing_event_queued = FALSE;
|
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (changed_toplevel))
|
2009-06-12 10:45:31 +00:00
|
|
|
return FALSE;
|
2009-06-11 19:56:02 +00:00
|
|
|
|
2009-06-11 19:49:17 +00:00
|
|
|
display = gdk_drawable_get_display (changed_toplevel);
|
2009-01-31 18:42:44 +00:00
|
|
|
serial = _gdk_windowing_window_get_next_serial (display);
|
2009-06-11 19:49:17 +00:00
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
if (changed_toplevel == display->pointer_info.toplevel_under_pointer)
|
|
|
|
{
|
|
|
|
new_window_under_pointer =
|
|
|
|
get_pointer_window (display, changed_toplevel,
|
|
|
|
display->pointer_info.toplevel_x,
|
2009-01-31 18:42:44 +00:00
|
|
|
display->pointer_info.toplevel_y,
|
|
|
|
serial);
|
2008-12-15 09:24:54 +00:00
|
|
|
if (new_window_under_pointer !=
|
|
|
|
display->pointer_info.window_under_pointer)
|
|
|
|
{
|
2009-06-18 18:58:13 +00:00
|
|
|
_gdk_synthesize_crossing_events (display,
|
2009-07-09 14:48:22 +00:00
|
|
|
display->pointer_info.window_under_pointer,
|
|
|
|
new_window_under_pointer,
|
|
|
|
GDK_CROSSING_NORMAL,
|
|
|
|
display->pointer_info.toplevel_x,
|
|
|
|
display->pointer_info.toplevel_y,
|
|
|
|
display->pointer_info.state,
|
|
|
|
GDK_CURRENT_TIME,
|
|
|
|
NULL,
|
|
|
|
serial,
|
|
|
|
FALSE);
|
2008-12-15 13:02:52 +00:00
|
|
|
_gdk_display_set_window_under_pointer (display, new_window_under_pointer);
|
2008-12-15 09:24:54 +00:00
|
|
|
}
|
|
|
|
}
|
2009-06-11 19:49:17 +00:00
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2009-06-18 18:58:13 +00:00
|
|
|
_gdk_synthesize_crossing_events_for_geometry_change (GdkWindow *changed_window)
|
2009-06-11 19:49:17 +00:00
|
|
|
{
|
|
|
|
GdkDisplay *display;
|
|
|
|
GdkWindow *toplevel;
|
|
|
|
GdkWindowObject *toplevel_priv;
|
|
|
|
|
2009-08-24 13:18:10 +00:00
|
|
|
if (_gdk_native_windows)
|
|
|
|
return; /* We use the native crossing events if all native */
|
|
|
|
|
2009-06-11 19:49:17 +00:00
|
|
|
display = gdk_drawable_get_display (changed_window);
|
|
|
|
|
|
|
|
toplevel = get_event_toplevel (changed_window);
|
|
|
|
toplevel_priv = (GdkWindowObject *)toplevel;
|
|
|
|
|
|
|
|
if (toplevel == display->pointer_info.toplevel_under_pointer &&
|
|
|
|
!toplevel_priv->synthesize_crossing_event_queued)
|
|
|
|
{
|
|
|
|
toplevel_priv->synthesize_crossing_event_queued = TRUE;
|
|
|
|
g_idle_add_full (GDK_PRIORITY_EVENTS - 1,
|
|
|
|
do_synthesize_crossing_event,
|
|
|
|
g_object_ref (toplevel),
|
|
|
|
g_object_unref);
|
|
|
|
}
|
2008-12-15 09:24:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Don't use for crossing events */
|
|
|
|
static GdkWindow *
|
|
|
|
get_event_window (GdkDisplay *display,
|
|
|
|
GdkWindow *pointer_window,
|
|
|
|
GdkEventType type,
|
2009-01-23 12:04:44 +00:00
|
|
|
GdkModifierType mask,
|
2009-01-31 18:42:44 +00:00
|
|
|
guint *evmask_out,
|
|
|
|
gulong serial)
|
2008-12-15 09:24:54 +00:00
|
|
|
{
|
|
|
|
guint evmask;
|
|
|
|
GdkWindow *grab_window;
|
|
|
|
GdkWindowObject *w;
|
2009-01-31 18:42:44 +00:00
|
|
|
GdkPointerGrabInfo *grab;
|
|
|
|
|
|
|
|
grab = _gdk_display_has_pointer_grab (display, serial);
|
2008-12-15 09:24:54 +00:00
|
|
|
|
2009-01-31 18:42:44 +00:00
|
|
|
if (grab != NULL && !grab->owner_events)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
2009-01-31 18:42:44 +00:00
|
|
|
evmask = grab->event_mask;
|
2008-12-15 09:24:54 +00:00
|
|
|
evmask = update_evmask_for_button_motion (evmask, mask);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-01-31 18:42:44 +00:00
|
|
|
grab_window = grab->window;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
if (evmask & type_masks[type])
|
2009-01-23 12:04:44 +00:00
|
|
|
{
|
|
|
|
if (evmask_out)
|
|
|
|
*evmask_out = evmask;
|
|
|
|
return grab_window;
|
|
|
|
}
|
2008-12-15 09:24:54 +00:00
|
|
|
else
|
|
|
|
return NULL;
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
2008-12-15 09:24:54 +00:00
|
|
|
|
|
|
|
w = (GdkWindowObject *)pointer_window;
|
|
|
|
while (w != NULL)
|
|
|
|
{
|
|
|
|
evmask = w->event_mask;
|
|
|
|
evmask = update_evmask_for_button_motion (evmask, mask);
|
|
|
|
|
|
|
|
if (evmask & type_masks[type])
|
2009-01-23 12:04:44 +00:00
|
|
|
{
|
|
|
|
if (evmask_out)
|
|
|
|
*evmask_out = evmask;
|
|
|
|
return (GdkWindow *)w;
|
|
|
|
}
|
2008-12-15 09:24:54 +00:00
|
|
|
|
2009-06-08 13:57:59 +00:00
|
|
|
w = get_event_parent (w);
|
2008-12-15 09:24:54 +00:00
|
|
|
}
|
|
|
|
|
2009-01-31 18:42:44 +00:00
|
|
|
if (grab != NULL &&
|
|
|
|
grab->owner_events)
|
2008-12-15 09:24:54 +00:00
|
|
|
{
|
2009-01-31 18:42:44 +00:00
|
|
|
evmask = grab->event_mask;
|
2008-12-15 09:24:54 +00:00
|
|
|
evmask = update_evmask_for_button_motion (evmask, mask);
|
|
|
|
|
|
|
|
if (evmask & type_masks[type])
|
2009-01-23 12:04:44 +00:00
|
|
|
{
|
|
|
|
if (evmask_out)
|
|
|
|
*evmask_out = evmask;
|
2009-01-31 18:42:44 +00:00
|
|
|
return grab->window;
|
2009-01-23 12:04:44 +00:00
|
|
|
}
|
2008-12-15 09:24:54 +00:00
|
|
|
else
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
proxy_pointer_event (GdkDisplay *display,
|
2009-01-23 20:07:53 +00:00
|
|
|
GdkEvent *source_event,
|
|
|
|
gulong serial)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
2009-02-03 11:24:30 +00:00
|
|
|
GdkWindow *toplevel_window, *event_window;
|
2008-12-15 09:24:54 +00:00
|
|
|
GdkWindow *pointer_window;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkEvent *event;
|
|
|
|
guint state;
|
2008-12-15 09:24:54 +00:00
|
|
|
gdouble toplevel_x, toplevel_y;
|
2008-07-18 13:03:42 +00:00
|
|
|
guint32 time_;
|
2009-07-09 14:48:22 +00:00
|
|
|
gboolean non_linear;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-02-03 11:24:30 +00:00
|
|
|
event_window = source_event->any.window;
|
2008-12-15 09:24:54 +00:00
|
|
|
gdk_event_get_coords (source_event, &toplevel_x, &toplevel_y);
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_event_get_state (source_event, &state);
|
|
|
|
time_ = gdk_event_get_time (source_event);
|
2009-06-08 13:57:59 +00:00
|
|
|
toplevel_window = convert_native_coords_to_toplevel (event_window,
|
|
|
|
toplevel_x, toplevel_y,
|
|
|
|
&toplevel_x, &toplevel_y);
|
2009-02-03 11:24:30 +00:00
|
|
|
|
2009-07-09 14:48:22 +00:00
|
|
|
non_linear = FALSE;
|
|
|
|
if ((source_event->type == GDK_LEAVE_NOTIFY ||
|
|
|
|
source_event->type == GDK_ENTER_NOTIFY) &&
|
|
|
|
(source_event->crossing.detail == GDK_NOTIFY_NONLINEAR ||
|
|
|
|
source_event->crossing.detail == GDK_NOTIFY_NONLINEAR_VIRTUAL))
|
|
|
|
non_linear = TRUE;
|
2009-02-03 11:24:30 +00:00
|
|
|
|
|
|
|
/* If we get crossing events with subwindow unexpectedly being NULL
|
|
|
|
that means there is a native subwindow that gdk doesn't know about.
|
|
|
|
We track these and forward them, with the correct virtual window
|
|
|
|
events inbetween.
|
|
|
|
This is important to get right, as metacity uses gdk for the frame
|
|
|
|
windows, but gdk doesn't know about the client windows reparented
|
|
|
|
into the frame. */
|
|
|
|
if (((source_event->type == GDK_LEAVE_NOTIFY &&
|
|
|
|
source_event->crossing.detail == GDK_NOTIFY_INFERIOR) ||
|
|
|
|
(source_event->type == GDK_ENTER_NOTIFY &&
|
|
|
|
(source_event->crossing.detail == GDK_NOTIFY_VIRTUAL ||
|
|
|
|
source_event->crossing.detail == GDK_NOTIFY_NONLINEAR_VIRTUAL))) &&
|
|
|
|
source_event->crossing.subwindow == NULL)
|
|
|
|
{
|
|
|
|
/* Left for an unknown (to gdk) subwindow */
|
|
|
|
|
|
|
|
/* Send leave events from window under pointer to event window
|
|
|
|
that will get the subwindow == NULL window */
|
2009-06-18 18:58:13 +00:00
|
|
|
_gdk_synthesize_crossing_events (display,
|
2009-07-09 14:48:22 +00:00
|
|
|
display->pointer_info.window_under_pointer,
|
|
|
|
event_window,
|
|
|
|
source_event->crossing.mode,
|
|
|
|
toplevel_x, toplevel_y,
|
|
|
|
state, time_,
|
|
|
|
source_event,
|
|
|
|
serial,
|
|
|
|
non_linear);
|
2009-02-03 11:24:30 +00:00
|
|
|
|
|
|
|
/* Send subwindow == NULL event */
|
|
|
|
send_crossing_event (display,
|
|
|
|
(GdkWindowObject *)toplevel_window,
|
|
|
|
(GdkWindowObject *)event_window,
|
|
|
|
source_event->type,
|
|
|
|
source_event->crossing.mode,
|
|
|
|
source_event->crossing.detail,
|
|
|
|
NULL,
|
|
|
|
toplevel_x, toplevel_y,
|
|
|
|
state, time_,
|
|
|
|
source_event,
|
|
|
|
serial);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-03 11:24:30 +00:00
|
|
|
_gdk_display_set_window_under_pointer (display, NULL);
|
|
|
|
return TRUE;
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-03 11:24:30 +00:00
|
|
|
pointer_window = get_pointer_window (display, toplevel_window,
|
|
|
|
toplevel_x, toplevel_y, serial);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-03 11:24:30 +00:00
|
|
|
if (((source_event->type == GDK_ENTER_NOTIFY &&
|
|
|
|
source_event->crossing.detail == GDK_NOTIFY_INFERIOR) ||
|
|
|
|
(source_event->type == GDK_LEAVE_NOTIFY &&
|
|
|
|
(source_event->crossing.detail == GDK_NOTIFY_VIRTUAL ||
|
|
|
|
source_event->crossing.detail == GDK_NOTIFY_NONLINEAR_VIRTUAL))) &&
|
|
|
|
source_event->crossing.subwindow == NULL)
|
|
|
|
{
|
|
|
|
/* Entered from an unknown (to gdk) subwindow */
|
|
|
|
|
|
|
|
/* Send subwindow == NULL event */
|
|
|
|
send_crossing_event (display,
|
|
|
|
(GdkWindowObject *)toplevel_window,
|
|
|
|
(GdkWindowObject *)event_window,
|
|
|
|
source_event->type,
|
|
|
|
source_event->crossing.mode,
|
|
|
|
source_event->crossing.detail,
|
|
|
|
NULL,
|
|
|
|
toplevel_x, toplevel_y,
|
|
|
|
state, time_,
|
|
|
|
source_event,
|
|
|
|
serial);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-03 11:24:30 +00:00
|
|
|
/* Send enter events from event window to pointer_window */
|
2009-06-18 18:58:13 +00:00
|
|
|
_gdk_synthesize_crossing_events (display,
|
2009-07-09 14:48:22 +00:00
|
|
|
event_window,
|
|
|
|
pointer_window,
|
|
|
|
source_event->crossing.mode,
|
|
|
|
toplevel_x, toplevel_y,
|
|
|
|
state, time_,
|
|
|
|
source_event,
|
|
|
|
serial, non_linear);
|
2009-02-03 11:24:30 +00:00
|
|
|
_gdk_display_set_window_under_pointer (display, pointer_window);
|
|
|
|
return TRUE;
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
if (display->pointer_info.window_under_pointer != pointer_window)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
2008-12-15 09:24:54 +00:00
|
|
|
/* Either a toplevel crossing notify that ended up inside a child window,
|
|
|
|
or a motion notify that got into another child window */
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
/* Different than last time, send crossing events */
|
2009-06-18 18:58:13 +00:00
|
|
|
_gdk_synthesize_crossing_events (display,
|
2009-07-09 14:48:22 +00:00
|
|
|
display->pointer_info.window_under_pointer,
|
|
|
|
pointer_window,
|
|
|
|
GDK_CROSSING_NORMAL,
|
|
|
|
toplevel_x, toplevel_y,
|
|
|
|
state, time_,
|
|
|
|
source_event,
|
|
|
|
serial, non_linear);
|
2008-12-15 13:02:52 +00:00
|
|
|
_gdk_display_set_window_under_pointer (display, pointer_window);
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
2009-02-04 19:23:51 +00:00
|
|
|
else if (source_event->type == GDK_MOTION_NOTIFY)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
2008-12-15 09:24:54 +00:00
|
|
|
GdkWindow *event_win;
|
2009-01-23 12:04:44 +00:00
|
|
|
guint evmask;
|
|
|
|
gboolean is_hint;
|
2008-12-15 09:24:54 +00:00
|
|
|
|
|
|
|
event_win = get_event_window (display,
|
|
|
|
pointer_window,
|
|
|
|
source_event->type,
|
2009-01-23 12:04:44 +00:00
|
|
|
state,
|
2009-01-31 18:42:44 +00:00
|
|
|
&evmask,
|
|
|
|
serial);
|
2009-01-23 12:04:44 +00:00
|
|
|
|
|
|
|
is_hint = FALSE;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-23 12:04:44 +00:00
|
|
|
if (event_win &&
|
|
|
|
(evmask & GDK_POINTER_MOTION_HINT_MASK))
|
|
|
|
{
|
2009-01-23 20:07:53 +00:00
|
|
|
if (display->pointer_info.motion_hint_serial != 0 &&
|
|
|
|
serial < display->pointer_info.motion_hint_serial)
|
2009-01-23 12:04:44 +00:00
|
|
|
event_win = NULL; /* Ignore event */
|
|
|
|
else
|
|
|
|
{
|
|
|
|
is_hint = TRUE;
|
2009-01-23 20:07:53 +00:00
|
|
|
display->pointer_info.motion_hint_serial = G_MAXULONG;
|
2009-01-23 12:04:44 +00:00
|
|
|
}
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-05-29 14:39:12 +00:00
|
|
|
if (event_win && !display->ignore_core_events)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
event = _gdk_make_event (event_win, GDK_MOTION_NOTIFY, source_event, FALSE);
|
|
|
|
event->motion.time = time_;
|
|
|
|
convert_toplevel_coords_to_window (event_win,
|
|
|
|
toplevel_x, toplevel_y,
|
|
|
|
&event->motion.x, &event->motion.y);
|
2008-12-04 14:20:19 +00:00
|
|
|
event->motion.x_root = source_event->motion.x_root;
|
|
|
|
event->motion.y_root = source_event->motion.y_root;;
|
2008-07-18 13:03:42 +00:00
|
|
|
event->motion.state = state;
|
2009-01-23 12:04:44 +00:00
|
|
|
event->motion.is_hint = is_hint;
|
2008-07-18 13:03:42 +00:00
|
|
|
event->motion.device = NULL;
|
2009-01-23 12:04:44 +00:00
|
|
|
event->motion.device = source_event->motion.device;
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
/* unlink all move events from queue.
|
|
|
|
We handle our own, including our emulated masks. */
|
|
|
|
return TRUE;
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
2009-02-02 13:57:08 +00:00
|
|
|
#define GDK_ANY_BUTTON_MASK (GDK_BUTTON1_MASK | \
|
2009-06-01 10:04:36 +00:00
|
|
|
GDK_BUTTON2_MASK | \
|
|
|
|
GDK_BUTTON3_MASK | \
|
|
|
|
GDK_BUTTON4_MASK | \
|
|
|
|
GDK_BUTTON5_MASK)
|
2009-02-02 13:57:08 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
static gboolean
|
2009-01-31 18:42:44 +00:00
|
|
|
proxy_button_event (GdkEvent *source_event,
|
|
|
|
gulong serial)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
2009-02-04 10:22:54 +00:00
|
|
|
GdkWindow *toplevel_window, *event_window;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkWindow *event_win;
|
2008-12-15 09:24:54 +00:00
|
|
|
GdkWindow *pointer_window;
|
2009-06-08 13:57:59 +00:00
|
|
|
GdkWindowObject *parent;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkEvent *event;
|
|
|
|
guint state;
|
|
|
|
guint32 time_;
|
|
|
|
GdkEventType type;
|
2008-12-15 09:24:54 +00:00
|
|
|
gdouble toplevel_x, toplevel_y;
|
2008-07-18 13:03:42 +00:00
|
|
|
GdkDisplay *display;
|
2008-12-15 13:26:10 +00:00
|
|
|
GdkWindowObject *w;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
type = source_event->any.type;
|
2009-02-04 10:22:54 +00:00
|
|
|
event_window = source_event->any.window;
|
2008-12-15 09:24:54 +00:00
|
|
|
gdk_event_get_coords (source_event, &toplevel_x, &toplevel_y);
|
2008-07-18 13:03:42 +00:00
|
|
|
gdk_event_get_state (source_event, &state);
|
|
|
|
time_ = gdk_event_get_time (source_event);
|
|
|
|
display = gdk_drawable_get_display (source_event->any.window);
|
2009-06-08 13:57:59 +00:00
|
|
|
toplevel_window = convert_native_coords_to_toplevel (event_window,
|
|
|
|
toplevel_x, toplevel_y,
|
|
|
|
&toplevel_x, &toplevel_y);
|
2008-12-15 09:24:54 +00:00
|
|
|
|
2009-02-02 13:57:08 +00:00
|
|
|
if (type == GDK_BUTTON_PRESS &&
|
2009-09-28 13:29:37 +00:00
|
|
|
!source_event->any.send_event &&
|
2009-02-02 13:57:08 +00:00
|
|
|
_gdk_display_has_pointer_grab (display, serial) == NULL)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
2008-12-15 09:24:54 +00:00
|
|
|
pointer_window =
|
|
|
|
_gdk_window_find_descendant_at (toplevel_window,
|
|
|
|
toplevel_x, toplevel_y,
|
|
|
|
NULL, NULL);
|
2008-12-15 13:26:10 +00:00
|
|
|
|
2009-02-02 13:57:08 +00:00
|
|
|
/* Find the event window, that gets the grab */
|
2008-12-15 13:26:10 +00:00
|
|
|
w = (GdkWindowObject *)pointer_window;
|
2009-06-08 13:57:59 +00:00
|
|
|
while (w != NULL &&
|
|
|
|
(parent = get_event_parent (w)) != NULL &&
|
|
|
|
parent->window_type != GDK_WINDOW_ROOT)
|
2008-12-15 13:26:10 +00:00
|
|
|
{
|
|
|
|
if (w->event_mask & GDK_BUTTON_PRESS_MASK)
|
|
|
|
break;
|
2009-06-08 13:57:59 +00:00
|
|
|
w = parent;
|
2008-12-15 13:26:10 +00:00
|
|
|
}
|
2008-12-15 14:50:41 +00:00
|
|
|
pointer_window = (GdkWindow *)w;
|
2009-02-02 13:57:08 +00:00
|
|
|
|
|
|
|
_gdk_display_add_pointer_grab (display,
|
|
|
|
pointer_window,
|
|
|
|
toplevel_window,
|
|
|
|
FALSE,
|
|
|
|
gdk_window_get_events (pointer_window),
|
|
|
|
serial,
|
|
|
|
time_,
|
|
|
|
TRUE);
|
|
|
|
_gdk_display_pointer_grab_update (display, serial);
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
2009-01-31 18:42:44 +00:00
|
|
|
pointer_window = get_pointer_window (display, toplevel_window,
|
|
|
|
toplevel_x, toplevel_y,
|
|
|
|
serial);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
event_win = get_event_window (display,
|
|
|
|
pointer_window,
|
2009-01-31 18:42:44 +00:00
|
|
|
type, state,
|
|
|
|
NULL, serial);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-05-29 14:39:12 +00:00
|
|
|
if (event_win == NULL || display->ignore_core_events)
|
2008-07-18 13:03:42 +00:00
|
|
|
return TRUE;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
event = _gdk_make_event (event_win, type, source_event, FALSE);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
switch (type)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
2008-12-15 09:24:54 +00:00
|
|
|
case GDK_BUTTON_PRESS:
|
|
|
|
case GDK_BUTTON_RELEASE:
|
|
|
|
event->button.button = source_event->button.button;
|
|
|
|
convert_toplevel_coords_to_window (event_win,
|
|
|
|
toplevel_x, toplevel_y,
|
|
|
|
&event->button.x, &event->button.y);
|
|
|
|
event->button.x_root = source_event->button.x_root;
|
|
|
|
event->button.y_root = source_event->button.y_root;
|
|
|
|
event->button.state = state;
|
|
|
|
event->button.device = source_event->button.device;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
if (type == GDK_BUTTON_PRESS)
|
|
|
|
_gdk_event_button_generate (display, event);
|
|
|
|
return TRUE;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
case GDK_SCROLL:
|
|
|
|
event->scroll.direction = source_event->scroll.direction;
|
|
|
|
convert_toplevel_coords_to_window (event_win,
|
|
|
|
toplevel_x, toplevel_y,
|
|
|
|
&event->scroll.x, &event->scroll.y);
|
|
|
|
event->scroll.x_root = source_event->scroll.x_root;
|
|
|
|
event->scroll.y_root = source_event->scroll.y_root;
|
|
|
|
event->scroll.state = state;
|
|
|
|
event->scroll.device = source_event->scroll.device;
|
|
|
|
return TRUE;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
default:
|
2008-07-18 13:03:42 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
2008-12-15 09:24:54 +00:00
|
|
|
|
|
|
|
return TRUE; /* Always unlink original, we want to obey the emulated event mask */
|
2008-07-18 13:03:42 +00:00
|
|
|
}
|
|
|
|
|
2008-12-18 10:30:10 +00:00
|
|
|
#ifdef DEBUG_WINDOW_PRINTING
|
|
|
|
static void
|
|
|
|
gdk_window_print (GdkWindowObject *window,
|
|
|
|
int indent)
|
|
|
|
{
|
|
|
|
GdkRectangle r;
|
2009-08-28 10:48:13 +00:00
|
|
|
const char *window_types[] = {
|
|
|
|
"root",
|
|
|
|
"toplevel",
|
|
|
|
"child",
|
|
|
|
"dialog",
|
|
|
|
"temp",
|
|
|
|
"foreign",
|
|
|
|
"offscreen"
|
|
|
|
};
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-18 10:30:10 +00:00
|
|
|
g_print ("%*s%p: [%s] %d,%d %dx%d", indent, "", window,
|
|
|
|
window->user_data ? g_type_name_from_instance (window->user_data) : "no widget",
|
|
|
|
window->x, window->y,
|
|
|
|
window->width, window->height
|
|
|
|
);
|
|
|
|
|
|
|
|
if (gdk_window_has_impl (window))
|
|
|
|
{
|
2009-01-21 10:23:51 +00:00
|
|
|
#ifdef GDK_WINDOWING_X11
|
2008-12-18 10:30:10 +00:00
|
|
|
g_print (" impl(0x%lx)", gdk_x11_drawable_get_xid (GDK_DRAWABLE (window)));
|
2009-01-21 10:23:51 +00:00
|
|
|
#endif
|
2008-12-18 10:30:10 +00:00
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-08-28 10:48:13 +00:00
|
|
|
if (window->window_type != GDK_WINDOW_CHILD)
|
|
|
|
g_print (" %s", window_types[window->window_type]);
|
|
|
|
|
2008-12-18 10:30:10 +00:00
|
|
|
if (window->input_only)
|
|
|
|
g_print (" input-only");
|
|
|
|
|
2009-08-28 10:48:13 +00:00
|
|
|
if (window->shaped)
|
|
|
|
g_print (" shaped");
|
|
|
|
|
2008-12-18 10:30:10 +00:00
|
|
|
if (!gdk_window_is_visible ((GdkWindow *)window))
|
|
|
|
g_print (" hidden");
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-18 10:30:10 +00:00
|
|
|
g_print (" abs[%d,%d]",
|
|
|
|
window->abs_x, window->abs_y);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-18 10:30:10 +00:00
|
|
|
gdk_region_get_clipbox (window->clip_region, &r);
|
|
|
|
if (gdk_region_empty (window->clip_region))
|
|
|
|
g_print (" clipbox[empty]");
|
|
|
|
else
|
|
|
|
g_print (" clipbox[%d,%d %dx%d]", r.x, r.y, r.width, r.height);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-18 10:30:10 +00:00
|
|
|
g_print ("\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
gdk_window_print_tree (GdkWindow *window,
|
|
|
|
int indent,
|
|
|
|
gboolean include_input_only)
|
|
|
|
{
|
|
|
|
GdkWindowObject *private;
|
|
|
|
GList *l;
|
|
|
|
|
|
|
|
private = (GdkWindowObject *)window;
|
|
|
|
|
|
|
|
if (private->input_only && !include_input_only)
|
|
|
|
return;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-18 10:30:10 +00:00
|
|
|
gdk_window_print (private, indent);
|
|
|
|
|
|
|
|
for (l = private->children; l != NULL; l = l->next)
|
|
|
|
gdk_window_print_tree (l->data, indent + 4, include_input_only);
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif /* DEBUG_WINDOW_PRINTING */
|
|
|
|
|
2009-05-29 14:39:12 +00:00
|
|
|
static gboolean
|
|
|
|
is_input_event (GdkDisplay *display,
|
|
|
|
GdkEvent *event)
|
|
|
|
{
|
|
|
|
GdkDevice *core_pointer;
|
|
|
|
|
|
|
|
core_pointer = gdk_display_get_core_pointer (display);
|
|
|
|
if ((event->type == GDK_MOTION_NOTIFY &&
|
|
|
|
event->motion.device != core_pointer) ||
|
2009-06-03 09:24:27 +00:00
|
|
|
((event->type == GDK_BUTTON_PRESS ||
|
|
|
|
event->type == GDK_BUTTON_RELEASE) &&
|
|
|
|
event->button.device != core_pointer))
|
2009-05-29 14:39:12 +00:00
|
|
|
return TRUE;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
void
|
|
|
|
_gdk_windowing_got_event (GdkDisplay *display,
|
|
|
|
GList *event_link,
|
2009-01-23 20:07:53 +00:00
|
|
|
GdkEvent *event,
|
|
|
|
gulong serial)
|
2008-07-18 13:03:42 +00:00
|
|
|
{
|
|
|
|
GdkWindow *event_window;
|
|
|
|
GdkWindowObject *event_private;
|
2008-12-15 09:24:54 +00:00
|
|
|
gdouble x, y;
|
2008-07-18 13:03:42 +00:00
|
|
|
gboolean unlink_event;
|
2009-01-23 12:04:44 +00:00
|
|
|
guint old_state, old_button;
|
2009-01-31 18:42:44 +00:00
|
|
|
GdkPointerGrabInfo *button_release_grab;
|
2009-02-03 11:24:30 +00:00
|
|
|
gboolean is_toplevel;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-01-31 18:42:44 +00:00
|
|
|
if (gdk_event_get_time (event) != GDK_CURRENT_TIME)
|
|
|
|
display->last_event_time = gdk_event_get_time (event);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-01-31 18:42:44 +00:00
|
|
|
_gdk_display_pointer_grab_update (display,
|
|
|
|
serial);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
event_window = event->any.window;
|
|
|
|
if (!event_window)
|
|
|
|
return;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-08-27 13:55:01 +00:00
|
|
|
event_private = GDK_WINDOW_OBJECT (event_window);
|
|
|
|
|
|
|
|
#ifdef DEBUG_WINDOW_PRINTING
|
|
|
|
if (event->type == GDK_KEY_PRESS &&
|
|
|
|
(event->key.keyval == 0xa7 ||
|
|
|
|
event->key.keyval == 0xbd))
|
|
|
|
{
|
|
|
|
gdk_window_print_tree (event_window, 0,
|
|
|
|
event->key.keyval == 0xbd);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2009-08-24 13:18:10 +00:00
|
|
|
if (_gdk_native_windows)
|
|
|
|
{
|
|
|
|
if (event->type == GDK_BUTTON_PRESS &&
|
2009-09-28 13:29:37 +00:00
|
|
|
!event->any.send_event &&
|
2009-08-24 13:18:10 +00:00
|
|
|
_gdk_display_has_pointer_grab (display, serial) == NULL)
|
|
|
|
{
|
|
|
|
_gdk_display_add_pointer_grab (display,
|
|
|
|
event_window,
|
|
|
|
event_window,
|
|
|
|
FALSE,
|
|
|
|
gdk_window_get_events (event_window),
|
|
|
|
serial,
|
|
|
|
gdk_event_get_time (event),
|
|
|
|
TRUE);
|
|
|
|
_gdk_display_pointer_grab_update (display,
|
|
|
|
serial);
|
|
|
|
}
|
2009-09-28 13:29:37 +00:00
|
|
|
if (event->type == GDK_BUTTON_RELEASE &&
|
|
|
|
!event->any.send_event)
|
2009-08-24 13:18:10 +00:00
|
|
|
{
|
|
|
|
button_release_grab =
|
|
|
|
_gdk_display_has_pointer_grab (display, serial);
|
|
|
|
if (button_release_grab &&
|
|
|
|
button_release_grab->implicit &&
|
|
|
|
(event->button.state & GDK_ANY_BUTTON_MASK & ~(GDK_BUTTON1_MASK << (event->button.button - 1))) == 0)
|
|
|
|
{
|
|
|
|
button_release_grab->serial_end = serial;
|
2009-09-10 17:27:45 +00:00
|
|
|
button_release_grab->implicit_ungrab = FALSE;
|
2009-08-24 13:18:10 +00:00
|
|
|
_gdk_display_pointer_grab_update (display, serial);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (event->type == GDK_BUTTON_PRESS)
|
|
|
|
_gdk_event_button_generate (display, event);
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2009-05-26 18:53:48 +00:00
|
|
|
if (event->type == GDK_VISIBILITY_NOTIFY)
|
|
|
|
{
|
|
|
|
event_private->native_visibility = event->visibility.state;
|
|
|
|
gdk_window_update_visibility_recursively (event_private,
|
|
|
|
event_private);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2009-05-29 14:39:12 +00:00
|
|
|
if (is_input_event (display, event))
|
|
|
|
return;
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
if (!(is_button_type (event->type) ||
|
2009-01-28 12:41:12 +00:00
|
|
|
is_motion_type (event->type)) ||
|
2009-07-18 13:04:06 +00:00
|
|
|
event_private->window_type == GDK_WINDOW_ROOT)
|
2008-07-18 13:03:42 +00:00
|
|
|
return;
|
|
|
|
|
2009-08-31 08:59:21 +00:00
|
|
|
is_toplevel = gdk_window_is_toplevel (event_private);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-03 19:15:19 +00:00
|
|
|
if ((event->type == GDK_ENTER_NOTIFY ||
|
|
|
|
event->type == GDK_LEAVE_NOTIFY) &&
|
|
|
|
(event->crossing.mode == GDK_CROSSING_GRAB ||
|
|
|
|
event->crossing.mode == GDK_CROSSING_UNGRAB) &&
|
2009-02-03 21:51:27 +00:00
|
|
|
(_gdk_display_has_pointer_grab (display, serial) ||
|
|
|
|
event->crossing.detail == GDK_NOTIFY_INFERIOR))
|
2009-02-03 19:15:19 +00:00
|
|
|
{
|
2009-06-24 18:59:29 +00:00
|
|
|
/* We synthesize all crossing events due to grabs ourselves,
|
2009-02-03 21:51:27 +00:00
|
|
|
* so we ignore the native ones caused by our native pointer_grab
|
|
|
|
* calls. Otherwise we would proxy these crossing event and cause
|
|
|
|
* multiple copies of crossing events for grabs.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2009-02-03 21:51:27 +00:00
|
|
|
* We do want to handle grabs from other clients though, as for
|
|
|
|
* instance alt-tab in metacity causes grabs like these and
|
|
|
|
* we want to handle those. Thus the has_pointer_grab check.
|
2009-06-01 10:04:36 +00:00
|
|
|
*
|
2009-02-03 21:51:27 +00:00
|
|
|
* Implicit grabs on child windows create some grabbing events
|
|
|
|
* that are sent before the button press. This means we can't
|
|
|
|
* detect these with the has_pointer_grab check (as the implicit
|
|
|
|
* grab is only noticed when we get button press event), so we
|
2009-06-01 10:04:36 +00:00
|
|
|
* detect these events by checking for INFERIOR enter or leave
|
2009-02-03 21:51:27 +00:00
|
|
|
* events. These should never be a problem to filter out.
|
|
|
|
*/
|
2009-02-03 19:15:19 +00:00
|
|
|
|
|
|
|
/* We ended up in this window after some (perhaps other clients)
|
|
|
|
grab, so update the toplevel_under_window state */
|
|
|
|
if (is_toplevel &&
|
|
|
|
event->type == GDK_ENTER_NOTIFY &&
|
|
|
|
event->crossing.mode == GDK_CROSSING_UNGRAB)
|
|
|
|
{
|
|
|
|
if (display->pointer_info.toplevel_under_pointer)
|
|
|
|
g_object_unref (display->pointer_info.toplevel_under_pointer);
|
|
|
|
display->pointer_info.toplevel_under_pointer = g_object_ref (event_window);
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-03 19:15:19 +00:00
|
|
|
unlink_event = TRUE;
|
|
|
|
goto out;
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2009-02-03 11:24:30 +00:00
|
|
|
/* Track toplevel_under_pointer */
|
|
|
|
if (is_toplevel)
|
2008-12-15 09:24:54 +00:00
|
|
|
{
|
2009-02-03 11:24:30 +00:00
|
|
|
if (event->type == GDK_ENTER_NOTIFY &&
|
|
|
|
event->crossing.detail != GDK_NOTIFY_INFERIOR)
|
|
|
|
{
|
|
|
|
if (display->pointer_info.toplevel_under_pointer)
|
|
|
|
g_object_unref (display->pointer_info.toplevel_under_pointer);
|
|
|
|
display->pointer_info.toplevel_under_pointer = g_object_ref (event_window);
|
|
|
|
}
|
|
|
|
else if (event->type == GDK_LEAVE_NOTIFY &&
|
|
|
|
event->crossing.detail != GDK_NOTIFY_INFERIOR &&
|
|
|
|
display->pointer_info.toplevel_under_pointer == event_window)
|
|
|
|
{
|
|
|
|
if (display->pointer_info.toplevel_under_pointer)
|
|
|
|
g_object_unref (display->pointer_info.toplevel_under_pointer);
|
|
|
|
display->pointer_info.toplevel_under_pointer = NULL;
|
|
|
|
}
|
2008-12-15 09:24:54 +00:00
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
2009-02-03 11:24:30 +00:00
|
|
|
/* Store last pointer window and position/state */
|
2009-01-23 12:04:44 +00:00
|
|
|
old_state = display->pointer_info.state;
|
|
|
|
old_button = display->pointer_info.button;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
gdk_event_get_coords (event, &x, &y);
|
2009-06-08 13:57:59 +00:00
|
|
|
convert_native_coords_to_toplevel (event_window, x, y, &x, &y);
|
2008-07-18 13:03:42 +00:00
|
|
|
display->pointer_info.toplevel_x = x;
|
|
|
|
display->pointer_info.toplevel_y = y;
|
|
|
|
gdk_event_get_state (event, &display->pointer_info.state);
|
2009-01-23 12:04:44 +00:00
|
|
|
if (event->type == GDK_BUTTON_PRESS ||
|
|
|
|
event->type == GDK_BUTTON_RELEASE)
|
|
|
|
display->pointer_info.button = event->button.button;
|
2008-12-15 09:24:54 +00:00
|
|
|
|
2009-01-23 12:04:44 +00:00
|
|
|
if (display->pointer_info.state != old_state ||
|
|
|
|
display->pointer_info.button != old_button)
|
2009-01-23 20:07:53 +00:00
|
|
|
_gdk_display_enable_motion_hints (display);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
2008-12-15 09:24:54 +00:00
|
|
|
unlink_event = FALSE;
|
|
|
|
if (is_motion_type (event->type))
|
|
|
|
unlink_event = proxy_pointer_event (display,
|
2009-06-01 10:04:36 +00:00
|
|
|
event,
|
2009-01-23 20:07:53 +00:00
|
|
|
serial);
|
2008-12-15 09:24:54 +00:00
|
|
|
else if (is_button_type (event->type))
|
2009-01-31 18:42:44 +00:00
|
|
|
unlink_event = proxy_button_event (event,
|
|
|
|
serial);
|
|
|
|
|
2009-09-28 13:29:37 +00:00
|
|
|
if (event->type == GDK_BUTTON_RELEASE &&
|
|
|
|
!event->any.send_event)
|
2009-01-31 18:42:44 +00:00
|
|
|
{
|
|
|
|
button_release_grab =
|
|
|
|
_gdk_display_has_pointer_grab (display, serial);
|
|
|
|
if (button_release_grab &&
|
2009-02-02 13:57:08 +00:00
|
|
|
button_release_grab->implicit &&
|
|
|
|
(event->button.state & GDK_ANY_BUTTON_MASK & ~(GDK_BUTTON1_MASK << (event->button.button - 1))) == 0)
|
2009-01-31 18:42:44 +00:00
|
|
|
{
|
|
|
|
button_release_grab->serial_end = serial;
|
2009-09-10 17:27:45 +00:00
|
|
|
button_release_grab->implicit_ungrab = FALSE;
|
2009-01-31 18:42:44 +00:00
|
|
|
_gdk_display_pointer_grab_update (display, serial);
|
|
|
|
}
|
|
|
|
}
|
2008-12-09 12:35:46 +00:00
|
|
|
|
2009-02-03 19:15:19 +00:00
|
|
|
out:
|
2008-12-09 12:35:46 +00:00
|
|
|
if (unlink_event)
|
|
|
|
{
|
|
|
|
_gdk_event_queue_remove_link (display, event_link);
|
|
|
|
g_list_free_1 (event_link);
|
|
|
|
gdk_event_free (event);
|
|
|
|
}
|
Bug 318807 – Offscreen windows and window redirection.
2008-03-18 10:49:20 Tim Janik <timj@imendio.com>
* Applied pixmap redirection patch by Alexander Larsson with
various updates from:
Bug 318807 – Offscreen windows and window redirection.
Updates:
* updated docs to mention "Since 2.16".
* tests/testgtk.c: fixed snapshooting pixmap leak.
convert pixmap to pixbuf after snapshooting, to compensate for different
bit depths (occurs when snapshooting ARGB visuals and displaying the
pixmap in an RGB visual).
* gdk/gdkwindow.[hc]: made GdkWindowRedirect private.
* gdk/gdkwindow.c: removed damage idle handler, there's no aparent
need for it. enqueue damage notification as GDK_DAMAGE events
for each painting redirection at the start of the event queue.
consider windows with a redirection fully visible when invalidating,
and when updating from backing store. cleaned up stale variables.
* gdk/gdkevents.c: added _gdk_event_queue_prepend().
* gtk/gtkwidget.c: fixed coordinates for !NO_WINDOW widgets in
gtk_widget_get_snapshot; this fixes garbage snap offsets for gammacurve,
tree, drawingarea, text, handlebox, etc.
clip the redirected window hierarchy to window sizes, the visible
rectangles don't need to be taken into account here.
extended snapshooting docs to recommend gdk_pixbuf_get_from_drawable()
in case pixmap visuals could mismatch.
* gdk/x11/gdkwindow-x11.c: removed _gdk_windowing_window_get_visible_rect().
Base patch:
* tests/testgtk.c: add a "Snapshot" test to demonstrate snapshooting
of possibly obscured widgets into an offscreen pixmap.
* gtk/gtkwidget.[hc]: add GtkWidget::damage-event signal, add
gtk_widget_get_snapshot() to render a widget's contents to a GdkPixmap.
* gtk/gtkmain.c: dispatch GDK_DAMAGE events.
* gdk/gdkwindow.c: moved outer gdk_window_new() and gdk_window_reparent()
implementations here, adapted them to propagate redirects to child windows.
gdk_window_end_paint(): copy repainted window contents to redirection pixmap,
clipped to visible region. queue GDK_DAMAGE event delivery.
gdk_window_redirect_to_drawable(): install window painting redirection.
gdk_window_remove_redirection(): remove previously installed redirection.
* gdk/x11/gdkwindow-x11.c: added _gdk_windowing_window_get_visible_rect(),
renamed _gdk_window_new() and _gdk_window_reparent().
* gdk/gdkwindow.h: added GdkWindowRedirect* to GdkWindowObject, export
gdk_window_redirect_to_drawable() and gdk_window_remove_redirection().
* gdk/gdkevents.h: added GDK_DAMAGE event type.
* gdk/gdkevents.c: extract time and state from GDK_DAMAGE events.
* gdk/gdkinternals.h: added internal prototypes.
svn path=/trunk/; revision=20122
2008-05-21 19:04:24 +00:00
|
|
|
}
|
|
|
|
|
2009-05-29 14:39:12 +00:00
|
|
|
|
|
|
|
static GdkWindow *
|
|
|
|
get_extension_event_window (GdkDisplay *display,
|
|
|
|
GdkWindow *pointer_window,
|
|
|
|
GdkEventType type,
|
|
|
|
gulong serial)
|
|
|
|
{
|
|
|
|
guint evmask;
|
|
|
|
GdkWindow *grab_window;
|
|
|
|
GdkWindowObject *w;
|
|
|
|
GdkPointerGrabInfo *grab;
|
|
|
|
|
|
|
|
grab = _gdk_display_has_pointer_grab (display, serial);
|
|
|
|
|
|
|
|
if (grab != NULL && !grab->owner_events)
|
|
|
|
{
|
|
|
|
evmask = grab->event_mask;
|
|
|
|
|
|
|
|
grab_window = grab->window;
|
|
|
|
|
|
|
|
if (evmask & type_masks[type])
|
|
|
|
return grab_window;
|
|
|
|
else
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
w = (GdkWindowObject *)pointer_window;
|
|
|
|
while (w != NULL)
|
|
|
|
{
|
|
|
|
evmask = w->extension_events;
|
|
|
|
|
|
|
|
if (evmask & type_masks[type])
|
|
|
|
return (GdkWindow *)w;
|
|
|
|
|
2009-06-08 13:57:59 +00:00
|
|
|
w = get_event_parent (w);
|
2009-05-29 14:39:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (grab != NULL &&
|
|
|
|
grab->owner_events)
|
|
|
|
{
|
|
|
|
evmask = grab->event_mask;
|
|
|
|
|
|
|
|
if (evmask & type_masks[type])
|
|
|
|
return grab->window;
|
|
|
|
else
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
GdkWindow *
|
|
|
|
_gdk_window_get_input_window_for_event (GdkWindow *native_window,
|
|
|
|
GdkEventType event_type,
|
|
|
|
int x, int y,
|
|
|
|
gulong serial)
|
|
|
|
{
|
|
|
|
GdkDisplay *display;
|
|
|
|
GdkWindow *toplevel_window;
|
|
|
|
GdkWindow *pointer_window;
|
|
|
|
GdkWindow *event_win;
|
|
|
|
gdouble toplevel_x, toplevel_y;
|
|
|
|
|
|
|
|
toplevel_x = x;
|
|
|
|
toplevel_y = y;
|
|
|
|
|
|
|
|
display = gdk_drawable_get_display (native_window);
|
2009-06-08 13:57:59 +00:00
|
|
|
toplevel_window = convert_native_coords_to_toplevel (native_window,
|
|
|
|
toplevel_x, toplevel_y,
|
|
|
|
&toplevel_x, &toplevel_y);
|
2009-05-29 14:39:12 +00:00
|
|
|
pointer_window = get_pointer_window (display, toplevel_window,
|
|
|
|
toplevel_x, toplevel_y, serial);
|
|
|
|
event_win = get_extension_event_window (display,
|
|
|
|
pointer_window,
|
|
|
|
event_type,
|
|
|
|
serial);
|
|
|
|
|
|
|
|
return event_win;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-03-16 03:17:27 +00:00
|
|
|
#define __GDK_WINDOW_C__
|
|
|
|
#include "gdkaliasdef.c"
|