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
|
2012-02-27 13:01:10 +00:00
|
|
|
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
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
|
|
|
|
*/
|
|
|
|
|
|
2010-05-14 15:23:33 +00:00
|
|
|
|
#include "config.h"
|
|
|
|
|
|
2010-10-14 11:25:23 +00:00
|
|
|
|
#include <cairo-gobject.h>
|
|
|
|
|
|
2010-05-14 15:23:33 +00:00
|
|
|
|
#include "gdkwindow.h"
|
|
|
|
|
|
2010-10-15 02:05:51 +00:00
|
|
|
|
#include "gdkrectangle.h"
|
2010-05-14 15:23:33 +00:00
|
|
|
|
#include "gdkinternals.h"
|
|
|
|
|
#include "gdkintl.h"
|
2010-12-16 03:09:35 +00:00
|
|
|
|
#include "gdkdisplayprivate.h"
|
2010-05-25 22:38:44 +00:00
|
|
|
|
#include "gdkdeviceprivate.h"
|
2010-05-14 15:23:33 +00:00
|
|
|
|
#include "gdkmarshalers.h"
|
2012-10-03 22:34:01 +00:00
|
|
|
|
#include "gdkframeclockidle.h"
|
2010-05-14 15:23:33 +00:00
|
|
|
|
#include "gdkwindowimpl.h"
|
2014-10-09 08:45:44 +00:00
|
|
|
|
#include "gdkglcontextprivate.h"
|
2016-05-30 08:44:30 +00:00
|
|
|
|
#include "gdkdrawingcontextprivate.h"
|
2014-11-07 14:27:56 +00:00
|
|
|
|
#include "gdk-private.h"
|
2010-05-14 15:23:33 +00:00
|
|
|
|
|
2010-10-15 02:05:51 +00:00
|
|
|
|
#include <math.h>
|
|
|
|
|
|
2014-10-09 08:45:44 +00:00
|
|
|
|
#include <epoxy/gl.h>
|
|
|
|
|
|
2013-02-21 07:54:18 +00:00
|
|
|
|
/* for the use of round() */
|
|
|
|
|
#include "fallback-c89.c"
|
|
|
|
|
|
2014-08-21 15:26:18 +00:00
|
|
|
|
#ifdef GDK_WINDOWING_WAYLAND
|
|
|
|
|
#include "wayland/gdkwayland.h"
|
|
|
|
|
#endif
|
|
|
|
|
|
2010-05-14 15:23:33 +00:00
|
|
|
|
#undef DEBUG_WINDOW_PRINTING
|
|
|
|
|
|
|
|
|
|
|
2010-05-13 02:51:37 +00:00
|
|
|
|
/**
|
|
|
|
|
* SECTION:windows
|
|
|
|
|
* @Short_description: Onscreen display areas in the target window system
|
|
|
|
|
* @Title: Windows
|
|
|
|
|
*
|
2011-02-09 07:43:07 +00:00
|
|
|
|
* A #GdkWindow is a (usually) rectangular region on the screen.
|
2014-02-07 18:01:26 +00:00
|
|
|
|
* It’s a low-level object, used to implement high-level objects such as
|
2011-02-09 07:43:07 +00:00
|
|
|
|
* #GtkWidget and #GtkWindow on the GTK+ level. A #GtkWindow is a toplevel
|
2014-02-05 19:50:22 +00:00
|
|
|
|
* window, the thing a user might think of as a “window” with a titlebar
|
2014-02-02 05:29:00 +00:00
|
|
|
|
* and so on; a #GtkWindow may contain many #GdkWindows. For example,
|
|
|
|
|
* each #GtkButton has a #GdkWindow associated with it.
|
2010-05-13 02:51:37 +00:00
|
|
|
|
*/
|
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
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
|
2014-02-05 19:50:22 +00:00
|
|
|
|
* object available as “impl” in the window object.
|
2008-07-18 13:03:42 +00:00
|
|
|
|
*
|
2016-10-25 07:54:37 +00:00
|
|
|
|
* With the addition of client side windows this changes a bit. The
|
|
|
|
|
* application-visible GdkWindow object behaves as it did before, but
|
2016-12-15 16:53:08 +00:00
|
|
|
|
* such windows now don't a corresponding native window. Instead subwindows
|
|
|
|
|
* windows are “client side”, i.e. emulated by the gdk code such
|
|
|
|
|
* that clipping, drawing, moving, events etc work as expected.
|
2009-06-01 11:38:04 +00:00
|
|
|
|
*
|
2014-02-05 19:50:22 +00:00
|
|
|
|
* 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
|
2009-06-01 11:38:04 +00:00
|
|
|
|
* 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
|
2013-04-17 14:36:52 +00:00
|
|
|
|
* region of the window wrt parent windows, in window-relative coordinates (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
|
|
|
|
|
2009-06-04 18:15:29 +00:00
|
|
|
|
enum {
|
2016-06-15 15:00:38 +00:00
|
|
|
|
MOVED_TO_RECT,
|
2009-06-04 18:15:29 +00:00
|
|
|
|
LAST_SIGNAL
|
|
|
|
|
};
|
|
|
|
|
|
2009-07-16 06:16:01 +00:00
|
|
|
|
enum {
|
|
|
|
|
PROP_0,
|
2015-09-06 19:02:34 +00:00
|
|
|
|
PROP_CURSOR,
|
2016-10-27 13:38:41 +00:00
|
|
|
|
PROP_DISPLAY,
|
2015-09-06 19:02:34 +00:00
|
|
|
|
LAST_PROP
|
2009-07-16 06:16:01 +00:00
|
|
|
|
};
|
|
|
|
|
|
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 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);
|
|
|
|
|
|
2014-06-21 15:25:16 +00:00
|
|
|
|
static void gdk_window_clear_backing_region (GdkWindow *window);
|
1998-05-03 22:41:32 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
static void recompute_visible_regions (GdkWindow *private,
|
2009-01-20 22:03:16 +00:00
|
|
|
|
gboolean recalculate_children);
|
2010-11-22 23:55:39 +00:00
|
|
|
|
static void gdk_window_invalidate_in_parent (GdkWindow *private);
|
2010-05-25 22:38:44 +00:00
|
|
|
|
static void update_cursor (GdkDisplay *display,
|
|
|
|
|
GdkDevice *device);
|
2010-11-22 23:55:39 +00:00
|
|
|
|
static void impl_window_add_update_area (GdkWindow *impl_window,
|
2010-06-28 12:54:37 +00:00
|
|
|
|
cairo_region_t *region);
|
2009-11-04 13:03:04 +00:00
|
|
|
|
static void gdk_window_invalidate_region_full (GdkWindow *window,
|
2010-06-28 12:54:37 +00:00
|
|
|
|
const cairo_region_t *region,
|
2013-04-19 15:40:58 +00:00
|
|
|
|
gboolean invalidate_children);
|
2009-11-04 13:03:04 +00:00
|
|
|
|
static void gdk_window_invalidate_rect_full (GdkWindow *window,
|
|
|
|
|
const GdkRectangle *rect,
|
2013-04-19 15:40:58 +00:00
|
|
|
|
gboolean invalidate_children);
|
2012-08-22 15:01:15 +00:00
|
|
|
|
static cairo_surface_t *gdk_window_ref_impl_surface (GdkWindow *window);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2013-01-30 20:09:44 +00:00
|
|
|
|
static void gdk_window_set_frame_clock (GdkWindow *window,
|
|
|
|
|
GdkFrameClock *clock);
|
2012-10-03 22:34:01 +00:00
|
|
|
|
|
2014-10-09 08:45:44 +00:00
|
|
|
|
|
2009-06-04 18:15:29 +00:00
|
|
|
|
static guint signals[LAST_SIGNAL] = { 0 };
|
2015-09-06 19:02:34 +00:00
|
|
|
|
static GParamSpec *properties[LAST_PROP] = { NULL, };
|
2006-05-31 03:34:04 +00:00
|
|
|
|
|
2010-12-21 02:54:15 +00:00
|
|
|
|
G_DEFINE_ABSTRACT_TYPE (GdkWindow, gdk_window, G_TYPE_OBJECT)
|
1999-10-03 22:12:41 +00:00
|
|
|
|
|
2012-08-23 09:59:00 +00:00
|
|
|
|
#ifdef DEBUG_WINDOW_PRINTING
|
|
|
|
|
char *
|
|
|
|
|
print_region (cairo_region_t *region)
|
|
|
|
|
{
|
|
|
|
|
GString *s = g_string_new ("{");
|
|
|
|
|
if (cairo_region_is_empty (region))
|
|
|
|
|
{
|
|
|
|
|
g_string_append (s, "empty");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
int num = cairo_region_num_rectangles (region);
|
|
|
|
|
cairo_rectangle_int_t r;
|
|
|
|
|
|
|
|
|
|
if (num == 1)
|
|
|
|
|
{
|
|
|
|
|
cairo_region_get_rectangle (region, 0, &r);
|
|
|
|
|
g_string_append_printf (s, "%dx%d @%d,%d", r.width, r.height, r.x, r.y);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2013-03-01 13:55:54 +00:00
|
|
|
|
int i;
|
2012-08-23 09:59:00 +00:00
|
|
|
|
cairo_region_get_extents (region, &r);
|
|
|
|
|
g_string_append_printf (s, "extent: %dx%d @%d,%d, details: ", r.width, r.height, r.x, r.y);
|
2013-03-01 13:55:54 +00:00
|
|
|
|
for (i = 0; i < num; i++)
|
2012-08-23 09:59:00 +00:00
|
|
|
|
{
|
2013-05-15 08:55:14 +00:00
|
|
|
|
cairo_region_get_rectangle (region, i, &r);
|
2012-08-23 09:59:00 +00:00
|
|
|
|
g_string_append_printf (s, "[%dx%d @%d,%d]", r.width, r.height, r.x, r.y);
|
|
|
|
|
if (i != num -1)
|
|
|
|
|
g_string_append (s, ", ");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
g_string_append (s, "}");
|
|
|
|
|
return g_string_free (s, FALSE);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
2015-09-10 10:57:16 +00:00
|
|
|
|
static GList *
|
|
|
|
|
list_insert_link_before (GList *list,
|
|
|
|
|
GList *sibling,
|
|
|
|
|
GList *link)
|
|
|
|
|
{
|
|
|
|
|
if (list == NULL || sibling == list)
|
|
|
|
|
{
|
|
|
|
|
link->prev = NULL;
|
|
|
|
|
link->next = list;
|
|
|
|
|
if (list)
|
|
|
|
|
list->prev = link;
|
|
|
|
|
return link;
|
|
|
|
|
}
|
|
|
|
|
else if (sibling == NULL)
|
|
|
|
|
{
|
|
|
|
|
GList *last = g_list_last (list);
|
|
|
|
|
|
|
|
|
|
last->next = link;
|
|
|
|
|
link->prev = last;
|
|
|
|
|
link->next = NULL;
|
|
|
|
|
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
link->next = sibling;
|
|
|
|
|
link->prev = sibling->prev;
|
|
|
|
|
sibling->prev = link;
|
|
|
|
|
|
2015-09-21 14:58:41 +00:00
|
|
|
|
if (link->prev)
|
|
|
|
|
link->prev->next = link;
|
|
|
|
|
|
2015-09-10 10:57:16 +00:00
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
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
|
2010-11-22 23:55:39 +00:00
|
|
|
|
gdk_window_init (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
|
|
|
|
{
|
|
|
|
|
/* 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;
|
2013-01-21 10:49:45 +00:00
|
|
|
|
window->fullscreen_mode = GDK_FULLSCREEN_ON_CURRENT_MONITOR;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
window->width = 1;
|
|
|
|
|
window->height = 1;
|
|
|
|
|
window->toplevel_window_type = -1;
|
2015-09-10 10:57:16 +00:00
|
|
|
|
window->children_list_node.data = window;
|
2011-05-03 22:01:10 +00:00
|
|
|
|
|
|
|
|
|
window->device_cursor = g_hash_table_new_full (NULL, NULL,
|
|
|
|
|
NULL, g_object_unref);
|
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
|
|
|
|
|
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
|
2010-12-03 15:14:31 +00:00
|
|
|
|
gdk_window_class_init (GdkWindowClass *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);
|
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
|
|
|
|
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
|
|
|
|
|
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
|
|
|
|
|
*/
|
2015-09-06 19:02:34 +00:00
|
|
|
|
properties[PROP_CURSOR] =
|
|
|
|
|
g_param_spec_object ("cursor",
|
|
|
|
|
P_("Cursor"),
|
|
|
|
|
P_("Cursor"),
|
|
|
|
|
GDK_TYPE_CURSOR,
|
2017-11-18 02:38:08 +00:00
|
|
|
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
2016-10-27 13:38:41 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* GdkWindow:display:
|
|
|
|
|
*
|
|
|
|
|
* The #GdkDisplay connection of the window. See gdk_window_get_display()
|
|
|
|
|
* for details.
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.90
|
|
|
|
|
*/
|
|
|
|
|
properties[PROP_DISPLAY] =
|
|
|
|
|
g_param_spec_object ("display",
|
|
|
|
|
P_("Display"),
|
|
|
|
|
P_("Display"),
|
|
|
|
|
GDK_TYPE_DISPLAY,
|
2017-11-18 02:38:08 +00:00
|
|
|
|
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
|
2016-10-27 13:38:41 +00:00
|
|
|
|
|
2015-09-06 19:02:34 +00:00
|
|
|
|
g_object_class_install_properties (object_class, LAST_PROP, properties);
|
2009-07-16 06:16:01 +00:00
|
|
|
|
|
2016-06-15 15:00:38 +00:00
|
|
|
|
/**
|
|
|
|
|
* GdkWindow::moved-to-rect:
|
|
|
|
|
* @window: the #GdkWindow that moved
|
|
|
|
|
* @flipped_rect: (nullable): the position of @window after any possible
|
|
|
|
|
* flipping or %NULL if the backend can't obtain it
|
|
|
|
|
* @final_rect: (nullable): the final position of @window or %NULL if the
|
|
|
|
|
* backend can't obtain it
|
|
|
|
|
* @flipped_x: %TRUE if the anchors were flipped horizontally
|
|
|
|
|
* @flipped_y: %TRUE if the anchors were flipped vertically
|
|
|
|
|
*
|
|
|
|
|
* Emitted when the position of @window is finalized after being moved to a
|
|
|
|
|
* destination rectangle.
|
|
|
|
|
*
|
|
|
|
|
* @window might be flipped over the destination rectangle in order to keep
|
|
|
|
|
* it on-screen, in which case @flipped_x and @flipped_y will be set to %TRUE
|
|
|
|
|
* accordingly.
|
|
|
|
|
*
|
|
|
|
|
* @flipped_rect is the ideal position of @window after any possible
|
|
|
|
|
* flipping, but before any possible sliding. @final_rect is @flipped_rect,
|
|
|
|
|
* but possibly translated in the case that flipping is still ineffective in
|
|
|
|
|
* keeping @window on-screen.
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.22
|
|
|
|
|
* Stability: Private
|
|
|
|
|
*/
|
|
|
|
|
signals[MOVED_TO_RECT] =
|
|
|
|
|
g_signal_new (g_intern_static_string ("moved-to-rect"),
|
|
|
|
|
G_OBJECT_CLASS_TYPE (object_class),
|
|
|
|
|
G_SIGNAL_RUN_FIRST,
|
|
|
|
|
0,
|
|
|
|
|
NULL,
|
|
|
|
|
NULL,
|
|
|
|
|
_gdk_marshal_VOID__POINTER_POINTER_BOOLEAN_BOOLEAN,
|
|
|
|
|
G_TYPE_NONE,
|
|
|
|
|
4,
|
|
|
|
|
G_TYPE_POINTER,
|
|
|
|
|
G_TYPE_POINTER,
|
|
|
|
|
G_TYPE_BOOLEAN,
|
|
|
|
|
G_TYPE_BOOLEAN);
|
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
|
|
|
|
|
2010-05-25 22:38:44 +00:00
|
|
|
|
static void
|
2015-12-15 22:22:00 +00:00
|
|
|
|
seat_removed_cb (GdkDisplay *display,
|
|
|
|
|
GdkSeat *seat,
|
|
|
|
|
GdkWindow *window)
|
2010-05-25 22:38:44 +00:00
|
|
|
|
{
|
2015-12-15 22:22:00 +00:00
|
|
|
|
GdkDevice *device = gdk_seat_get_pointer (seat);
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->devices_inside = g_list_remove (window->devices_inside, device);
|
|
|
|
|
g_hash_table_remove (window->device_cursor, device);
|
2010-05-25 22:38:44 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->device_events)
|
|
|
|
|
g_hash_table_remove (window->device_events, device);
|
2010-05-25 22:38: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);
|
2010-05-25 22:38:44 +00:00
|
|
|
|
|
2015-12-15 22:22:00 +00:00
|
|
|
|
g_signal_handlers_disconnect_by_func (gdk_window_get_display (window),
|
|
|
|
|
seat_removed_cb, 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
|
|
|
|
if (!GDK_WINDOW_DESTROYED (window))
|
|
|
|
|
{
|
|
|
|
|
if (GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN)
|
|
|
|
|
{
|
2016-02-28 17:20:39 +00:00
|
|
|
|
g_warning ("losing last reference to undestroyed 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_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
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->impl)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
g_object_unref (window->impl);
|
|
|
|
|
window->impl = NULL;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->impl_window != window)
|
2009-01-23 19:08:39 +00:00
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
g_object_unref (window->impl_window);
|
|
|
|
|
window->impl_window = NULL;
|
2009-01-23 19:08:39 +00:00
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->shape)
|
|
|
|
|
cairo_region_destroy (window->shape);
|
2008-12-17 10:24:46 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->input_shape)
|
|
|
|
|
cairo_region_destroy (window->input_shape);
|
2008-12-17 10:24:46 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->cursor)
|
2010-12-20 02:23:44 +00:00
|
|
|
|
g_object_unref (window->cursor);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->device_cursor)
|
|
|
|
|
g_hash_table_destroy (window->device_cursor);
|
2010-05-25 22:38:44 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->device_events)
|
|
|
|
|
g_hash_table_destroy (window->device_events);
|
2010-05-25 22:38:44 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->devices_inside)
|
|
|
|
|
g_list_free (window->devices_inside);
|
2010-05-25 22:38:44 +00:00
|
|
|
|
|
2016-10-27 13:38:41 +00:00
|
|
|
|
g_clear_object (&window->display);
|
|
|
|
|
|
2017-08-18 10:01:54 +00:00
|
|
|
|
if (window->opaque_region)
|
|
|
|
|
cairo_region_destroy (window->opaque_region);
|
|
|
|
|
|
2015-09-06 17:14:01 +00:00
|
|
|
|
G_OBJECT_CLASS (gdk_window_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)
|
|
|
|
|
{
|
2016-10-27 13:38:41 +00:00
|
|
|
|
GdkWindow *window = GDK_WINDOW (object);
|
2009-07-16 06:16:01 +00:00
|
|
|
|
|
|
|
|
|
switch (prop_id)
|
|
|
|
|
{
|
|
|
|
|
case PROP_CURSOR:
|
2010-12-20 02:09:31 +00:00
|
|
|
|
gdk_window_set_cursor (window, g_value_get_object (value));
|
2009-07-16 06:16:01 +00:00
|
|
|
|
break;
|
|
|
|
|
|
2016-10-27 13:38:41 +00:00
|
|
|
|
case PROP_DISPLAY:
|
|
|
|
|
window->display = g_value_dup_object (value);
|
|
|
|
|
g_assert (window->display != NULL);
|
|
|
|
|
break;
|
|
|
|
|
|
2009-07-16 06:16:01 +00:00
|
|
|
|
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)
|
|
|
|
|
{
|
2016-10-27 13:38:41 +00:00
|
|
|
|
GdkWindow *window = GDK_WINDOW (object);
|
2009-07-16 06:16:01 +00:00
|
|
|
|
|
|
|
|
|
switch (prop_id)
|
|
|
|
|
{
|
|
|
|
|
case PROP_CURSOR:
|
2010-12-20 02:09:31 +00:00
|
|
|
|
g_value_set_object (value, gdk_window_get_cursor (window));
|
2009-07-16 06:16:01 +00:00
|
|
|
|
break;
|
|
|
|
|
|
2016-10-27 13:38:41 +00:00
|
|
|
|
case PROP_DISPLAY:
|
|
|
|
|
g_value_set_object (value, window->display);
|
|
|
|
|
break;
|
|
|
|
|
|
2009-07-16 06:16:01 +00:00
|
|
|
|
default:
|
|
|
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2017-02-01 14:09:52 +00:00
|
|
|
|
static gboolean
|
|
|
|
|
gdk_window_is_subsurface (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
return window->window_type == GDK_WINDOW_SUBSURFACE;
|
|
|
|
|
}
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
static GdkWindow *
|
|
|
|
|
gdk_window_get_impl_window (GdkWindow *window)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
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)
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return gdk_window_get_impl_window (window);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static gboolean
|
2010-11-22 23:55:39 +00:00
|
|
|
|
gdk_window_has_impl (GdkWindow *window)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
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
|
2010-11-22 23:55:39 +00:00
|
|
|
|
gdk_window_is_toplevel (GdkWindow *window)
|
2009-08-31 08:59:21 +00:00
|
|
|
|
{
|
|
|
|
|
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)
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return gdk_window_has_impl (window);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static gboolean
|
2010-11-22 23:55:39 +00:00
|
|
|
|
gdk_window_has_no_impl (GdkWindow *window)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
2009-01-26 14:45:17 +00:00
|
|
|
|
return window->impl_window != window;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
2013-04-17 14:36:52 +00:00
|
|
|
|
remove_sibling_overlapped_area (GdkWindow *window,
|
|
|
|
|
cairo_region_t *region)
|
2011-12-05 11:16:55 +00:00
|
|
|
|
{
|
2013-04-17 14:36:52 +00:00
|
|
|
|
GdkWindow *parent;
|
|
|
|
|
GdkWindow *sibling;
|
2011-12-05 11:16:55 +00:00
|
|
|
|
cairo_region_t *child_region;
|
|
|
|
|
GdkRectangle r;
|
|
|
|
|
GList *l;
|
|
|
|
|
|
2013-04-17 14:36:52 +00:00
|
|
|
|
parent = window->parent;
|
|
|
|
|
|
2013-05-15 08:55:59 +00:00
|
|
|
|
if (gdk_window_is_toplevel (window))
|
2013-04-17 14:36:52 +00:00
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
/* Convert from from window coords to parent coords */
|
|
|
|
|
cairo_region_translate (region, window->x, window->y);
|
|
|
|
|
|
|
|
|
|
for (l = parent->children; l; l = l->next)
|
2011-12-05 11:16:55 +00:00
|
|
|
|
{
|
2013-04-17 14:36:52 +00:00
|
|
|
|
sibling = l->data;
|
2011-12-05 11:16:55 +00:00
|
|
|
|
|
2013-04-17 14:36:52 +00:00
|
|
|
|
if (sibling == window)
|
2011-12-05 11:16:55 +00:00
|
|
|
|
break;
|
|
|
|
|
|
2016-10-02 01:02:10 +00:00
|
|
|
|
if (!GDK_WINDOW_IS_MAPPED (sibling) || sibling->input_only)
|
2011-12-05 11:16:55 +00:00
|
|
|
|
continue;
|
|
|
|
|
|
2013-04-17 14:36:52 +00:00
|
|
|
|
r.x = sibling->x;
|
|
|
|
|
r.y = sibling->y;
|
|
|
|
|
r.width = sibling->width;
|
|
|
|
|
r.height = sibling->height;
|
2011-12-05 11:16:55 +00:00
|
|
|
|
|
|
|
|
|
child_region = cairo_region_create_rectangle (&r);
|
2013-04-17 14:36:52 +00:00
|
|
|
|
|
|
|
|
|
if (sibling->shape)
|
2011-12-05 11:16:55 +00:00
|
|
|
|
{
|
|
|
|
|
/* Adjust shape region to parent window coords */
|
2013-04-17 14:36:52 +00:00
|
|
|
|
cairo_region_translate (sibling->shape, sibling->x, sibling->y);
|
|
|
|
|
cairo_region_intersect (child_region, sibling->shape);
|
|
|
|
|
cairo_region_translate (sibling->shape, -sibling->x, -sibling->y);
|
|
|
|
|
}
|
2011-12-05 11:16:55 +00:00
|
|
|
|
|
|
|
|
|
cairo_region_subtract (region, child_region);
|
|
|
|
|
cairo_region_destroy (child_region);
|
|
|
|
|
}
|
2013-04-17 14:36:52 +00:00
|
|
|
|
|
2013-05-15 08:55:59 +00:00
|
|
|
|
remove_sibling_overlapped_area (parent, region);
|
|
|
|
|
|
2013-04-17 14:36:52 +00:00
|
|
|
|
/* Convert back to window coords */
|
|
|
|
|
cairo_region_translate (region, -window->x, -window->y);
|
2011-12-05 11:16:55 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
remove_child_area (GdkWindow *window,
|
2008-12-17 10:24:46 +00:00
|
|
|
|
gboolean for_input,
|
2013-04-17 14:36:52 +00:00
|
|
|
|
cairo_region_t *region)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
GdkWindow *child;
|
2010-06-28 12:54:37 +00:00
|
|
|
|
cairo_region_t *child_region;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
GdkRectangle r;
|
|
|
|
|
GList *l;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2011-12-05 11:16:55 +00:00
|
|
|
|
for (l = window->children; l; l = l->next)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
|
|
|
|
child = l->data;
|
|
|
|
|
|
2009-07-19 20:36:43 +00:00
|
|
|
|
/* If region is empty already, no need to do
|
|
|
|
|
anything potentially costly */
|
2010-06-28 12:44:12 +00:00
|
|
|
|
if (cairo_region_is_empty (region))
|
2009-07-19 20:36:43 +00:00
|
|
|
|
break;
|
|
|
|
|
|
2016-10-02 01:02:10 +00:00
|
|
|
|
if (!GDK_WINDOW_IS_MAPPED (child) || child->input_only)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
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 */
|
2010-06-28 12:44:12 +00:00
|
|
|
|
if (cairo_region_contains_rectangle (region, &r) == CAIRO_REGION_OVERLAP_OUT)
|
2009-07-19 20:35:25 +00:00
|
|
|
|
continue;
|
|
|
|
|
|
2010-06-28 12:44:12 +00:00
|
|
|
|
child_region = cairo_region_create_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 */
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_region_translate (child->shape, child->x, child->y);
|
|
|
|
|
cairo_region_intersect (child_region, child->shape);
|
|
|
|
|
cairo_region_translate (child->shape, -child->x, -child->y);
|
2009-07-07 14:51:11 +00:00
|
|
|
|
}
|
2008-12-17 10:24:46 +00:00
|
|
|
|
|
|
|
|
|
if (for_input)
|
|
|
|
|
{
|
|
|
|
|
if (child->input_shape)
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_region_intersect (child_region, child->input_shape);
|
2008-12-17 10:24:46 +00:00
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2013-04-17 14:36:52 +00:00
|
|
|
|
cairo_region_subtract (region, child_region);
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_region_destroy (child_region);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-27 16:04:07 +00:00
|
|
|
|
static gboolean
|
2010-11-22 23:55:39 +00:00
|
|
|
|
should_apply_clip_as_shape (GdkWindow *window)
|
2009-08-27 16:04:07 +00:00
|
|
|
|
{
|
|
|
|
|
return
|
2010-11-22 23:55:39 +00:00
|
|
|
|
gdk_window_has_impl (window) &&
|
2016-10-25 07:54:37 +00:00
|
|
|
|
/* Not for non-shaped toplevels */
|
2016-12-15 16:53:08 +00:00
|
|
|
|
(window->shape != NULL || window->applied_shape) &&
|
2009-08-27 16:04:07 +00:00
|
|
|
|
/* or for foreign windows */
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->window_type != GDK_WINDOW_FOREIGN &&
|
2009-08-27 16:04:07 +00:00
|
|
|
|
/* or for the root window */
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->window_type != GDK_WINDOW_ROOT;
|
2009-08-27 16:04:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
2010-11-22 23:55:39 +00:00
|
|
|
|
apply_shape (GdkWindow *window,
|
2010-06-28 12:54:37 +00:00
|
|
|
|
cairo_region_t *region)
|
2009-08-27 16:04:07 +00:00
|
|
|
|
{
|
2010-11-22 19:42:00 +00:00
|
|
|
|
GdkWindowImplClass *impl_class;
|
2009-08-27 16:04:07 +00:00
|
|
|
|
|
|
|
|
|
/* 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 */
|
2010-11-22 23:55:39 +00:00
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
2009-08-27 16:04:07 +00:00
|
|
|
|
if (region)
|
2010-11-22 23:55:39 +00:00
|
|
|
|
impl_class->shape_combine_region (window,
|
2009-08-27 16:04:07 +00:00
|
|
|
|
region, 0, 0);
|
2010-11-22 23:55:39 +00:00
|
|
|
|
else if (window->applied_shape)
|
|
|
|
|
impl_class->shape_combine_region (window,
|
2009-08-27 16:04:07 +00:00
|
|
|
|
NULL, 0, 0);
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->applied_shape = region != NULL;
|
2009-08-27 16:04:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
2010-06-28 12:44:12 +00:00
|
|
|
|
static gboolean
|
|
|
|
|
region_rect_equal (const cairo_region_t *region,
|
|
|
|
|
const GdkRectangle *rect)
|
|
|
|
|
{
|
|
|
|
|
GdkRectangle extents;
|
|
|
|
|
|
|
|
|
|
if (cairo_region_num_rectangles (region) != 1)
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
|
|
cairo_region_get_extents (region, &extents);
|
|
|
|
|
|
|
|
|
|
return extents.x == rect->x &&
|
|
|
|
|
extents.y == rect->y &&
|
|
|
|
|
extents.width == rect->width &&
|
|
|
|
|
extents.height == rect->height;
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-27 16:04:07 +00:00
|
|
|
|
static void
|
2010-11-22 23:55:39 +00:00
|
|
|
|
apply_clip_as_shape (GdkWindow *window)
|
2009-08-27 16:04:07 +00:00
|
|
|
|
{
|
|
|
|
|
GdkRectangle r;
|
2013-03-27 10:47:37 +00:00
|
|
|
|
cairo_region_t *region;
|
2009-08-27 16:04:07 +00:00
|
|
|
|
|
|
|
|
|
r.x = r.y = 0;
|
2010-11-22 23:55:39 +00:00
|
|
|
|
r.width = window->width;
|
|
|
|
|
r.height = window->height;
|
2009-08-27 16:04:07 +00:00
|
|
|
|
|
2013-03-27 10:47:37 +00:00
|
|
|
|
region = cairo_region_copy (window->clip_region);
|
2013-04-17 14:36:52 +00:00
|
|
|
|
remove_sibling_overlapped_area (window, region);
|
2013-03-27 10:47:37 +00:00
|
|
|
|
|
2009-08-27 16:04:07 +00:00
|
|
|
|
/* 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 */
|
2013-03-27 10:47:37 +00:00
|
|
|
|
if (!region_rect_equal (region, &r))
|
|
|
|
|
apply_shape (window, region);
|
2009-08-27 16:04:07 +00:00
|
|
|
|
else
|
2010-11-22 23:55:39 +00:00
|
|
|
|
apply_shape (window, NULL);
|
2013-03-27 10:47:37 +00:00
|
|
|
|
|
|
|
|
|
cairo_region_destroy (region);
|
2009-08-27 16:04:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
static void
|
2010-11-22 23:55:39 +00:00
|
|
|
|
recompute_visible_regions_internal (GdkWindow *private,
|
|
|
|
|
gboolean recalculate_clip,
|
|
|
|
|
gboolean recalculate_children)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
|
|
|
|
GdkRectangle r;
|
|
|
|
|
GList *l;
|
2010-11-22 23:55:39 +00:00
|
|
|
|
GdkWindow *child;
|
2013-04-17 14:36:52 +00:00
|
|
|
|
cairo_region_t *new_clip;
|
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 */
|
2016-11-23 13:55:40 +00:00
|
|
|
|
if ((gdk_window_has_impl (private) &&
|
|
|
|
|
private->window_type != GDK_WINDOW_SUBSURFACE) ||
|
|
|
|
|
(gdk_window_is_toplevel (private) &&
|
|
|
|
|
private->window_type == GDK_WINDOW_SUBSURFACE))
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
2016-11-23 13:55:40 +00:00
|
|
|
|
/* Native windows and toplevel subsurfaces start here */
|
2008-07-18 13:03:42 +00:00
|
|
|
|
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
|
2013-04-17 14:36:52 +00:00
|
|
|
|
* window size/position
|
2008-07-18 13:03:42 +00:00
|
|
|
|
*/
|
|
|
|
|
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;
|
2010-06-28 12:44:12 +00:00
|
|
|
|
new_clip = cairo_region_create_rectangle (&r);
|
2009-07-20 21:15:34 +00:00
|
|
|
|
|
2009-08-31 08:59:21 +00:00
|
|
|
|
if (!gdk_window_is_toplevel (private))
|
2013-04-17 14:36:52 +00:00
|
|
|
|
cairo_region_intersect (new_clip, private->parent->clip_region);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2009-07-20 21:15:34 +00:00
|
|
|
|
/* Convert from parent coords to window coords */
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_region_translate (new_clip, -private->x, -private->y);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2014-04-28 19:19:40 +00:00
|
|
|
|
if (should_apply_clip_as_shape (private) && private->shape)
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_region_intersect (new_clip, private->shape);
|
2009-07-20 21:15:34 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
2011-12-01 12:57:47 +00:00
|
|
|
|
new_clip = cairo_region_create ();
|
2008-12-16 19:09:20 +00:00
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
if (private->clip_region == NULL ||
|
2010-06-28 12:44:12 +00:00
|
|
|
|
!cairo_region_equal (private->clip_region, new_clip))
|
2008-07-18 13:03:42 +00:00
|
|
|
|
clip_region_changed = TRUE;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
if (private->clip_region)
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_region_destroy (private->clip_region);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
private->clip_region = new_clip;
|
|
|
|
|
}
|
|
|
|
|
|
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),
|
2013-04-17 15:05:49 +00:00
|
|
|
|
FALSE);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 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
|
|
|
|
|
*
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* Unless the window didn’t change stacking order or size/pos, pass in TRUE
|
2008-07-18 13:03:42 +00:00
|
|
|
|
* for recalculate_siblings. (Mostly used internally for the recursion)
|
2009-06-01 10:04:36 +00:00
|
|
|
|
*
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* If a child window was removed (and you can’t use that child for
|
2008-07-18 13:03:42 +00:00
|
|
|
|
* recompute_visible_regions), pass in TRUE for recalculate_children on the parent
|
|
|
|
|
*/
|
|
|
|
|
static void
|
2010-11-22 23:55:39 +00:00
|
|
|
|
recompute_visible_regions (GdkWindow *private,
|
2008-07-18 13:03:42 +00:00
|
|
|
|
gboolean recalculate_children)
|
|
|
|
|
{
|
2013-05-15 08:55:59 +00:00
|
|
|
|
GdkWindow *toplevel;
|
|
|
|
|
|
|
|
|
|
toplevel = gdk_window_get_toplevel (private);
|
|
|
|
|
toplevel->geometry_dirty = TRUE;
|
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
recompute_visible_regions_internal (private,
|
|
|
|
|
TRUE,
|
|
|
|
|
recalculate_children);
|
|
|
|
|
}
|
|
|
|
|
|
2014-10-09 08:09:51 +00:00
|
|
|
|
static void
|
|
|
|
|
gdk_window_clear_old_updated_area (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < 2; i++)
|
|
|
|
|
{
|
|
|
|
|
if (window->old_updated_area[i])
|
|
|
|
|
{
|
|
|
|
|
cairo_region_destroy (window->old_updated_area[i]);
|
|
|
|
|
window->old_updated_area[i] = NULL;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
gdk_window_append_old_updated_area (GdkWindow *window,
|
|
|
|
|
cairo_region_t *region)
|
|
|
|
|
{
|
|
|
|
|
if (window->old_updated_area[1])
|
|
|
|
|
cairo_region_destroy (window->old_updated_area[1]);
|
|
|
|
|
window->old_updated_area[1] = window->old_updated_area[0];
|
|
|
|
|
window->old_updated_area[0] = cairo_region_reference (region);
|
|
|
|
|
}
|
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
void
|
|
|
|
|
_gdk_window_update_size (GdkWindow *window)
|
|
|
|
|
{
|
2014-10-09 08:09:51 +00:00
|
|
|
|
gdk_window_clear_old_updated_area (window);
|
2013-04-17 15:05:49 +00:00
|
|
|
|
recompute_visible_regions (window, FALSE);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
2008-12-04 09:32:08 +00:00
|
|
|
|
static GdkEventMask
|
2010-11-22 23:55:39 +00:00
|
|
|
|
get_native_device_event_mask (GdkWindow *private,
|
|
|
|
|
GdkDevice *device)
|
2008-12-04 09:32:08 +00:00
|
|
|
|
{
|
2010-05-25 22:38:44 +00:00
|
|
|
|
GdkEventMask event_mask;
|
|
|
|
|
|
|
|
|
|
if (device)
|
|
|
|
|
event_mask = GPOINTER_TO_INT (g_hash_table_lookup (private->device_events, device));
|
|
|
|
|
else
|
|
|
|
|
event_mask = private->event_mask;
|
|
|
|
|
|
2011-03-07 15:01:46 +00:00
|
|
|
|
if (private->window_type == GDK_WINDOW_ROOT ||
|
2009-08-24 13:18:10 +00:00
|
|
|
|
private->window_type == GDK_WINDOW_FOREIGN)
|
2010-05-25 22:38:44 +00:00
|
|
|
|
return event_mask;
|
2009-08-24 13:18:10 +00:00
|
|
|
|
else
|
2009-02-04 10:22:54 +00:00
|
|
|
|
{
|
2009-09-29 10:56:57 +00:00
|
|
|
|
GdkEventMask mask;
|
|
|
|
|
|
2017-09-15 16:58:50 +00:00
|
|
|
|
mask = private->event_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 |
|
2016-12-15 16:53:08 +00:00
|
|
|
|
GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK |
|
|
|
|
|
GDK_TOUCH_MASK |
|
|
|
|
|
GDK_POINTER_MOTION_MASK |
|
|
|
|
|
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
|
|
|
|
|
GDK_SCROLL_MASK;
|
2009-09-29 10:56:57 +00:00
|
|
|
|
|
|
|
|
|
return mask;
|
2009-02-04 10:22:54 +00:00
|
|
|
|
}
|
2008-12-04 09:32:08 +00:00
|
|
|
|
}
|
|
|
|
|
|
2010-05-25 22:38:44 +00:00
|
|
|
|
static GdkEventMask
|
2010-11-22 23:55:39 +00:00
|
|
|
|
get_native_event_mask (GdkWindow *private)
|
2010-05-25 22:38:44 +00:00
|
|
|
|
{
|
|
|
|
|
return get_native_device_event_mask (private, 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
|
|
|
|
GdkWindow*
|
2017-08-12 13:36:49 +00:00
|
|
|
|
gdk_window_new (GdkDisplay *display,
|
|
|
|
|
GdkWindow *parent,
|
2016-11-07 00:33:43 +00:00
|
|
|
|
GdkWindowAttr *attributes)
|
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 *window;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
gboolean native;
|
|
|
|
|
GdkEventMask event_mask;
|
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
|
|
|
|
|
2017-11-06 00:28:37 +00:00
|
|
|
|
if (parent != NULL && GDK_WINDOW_DESTROYED (parent))
|
2009-08-30 15:14:40 +00:00
|
|
|
|
{
|
2016-02-28 17:20:39 +00:00
|
|
|
|
g_warning ("gdk_window_new(): parent is destroyed");
|
2009-08-30 15:14:40 +00:00
|
|
|
|
return NULL;
|
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2010-12-21 02:06:59 +00:00
|
|
|
|
window = _gdk_display_create_window (display);
|
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
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->parent = parent;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->accept_focus = TRUE;
|
|
|
|
|
window->focus_on_map = TRUE;
|
2013-10-29 21:43:05 +00:00
|
|
|
|
window->event_compression = TRUE;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2016-11-07 00:33:43 +00:00
|
|
|
|
window->x = attributes->x;
|
|
|
|
|
window->y = attributes->y;
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->width = (attributes->width > 1) ? (attributes->width) : (1);
|
|
|
|
|
window->height = (attributes->height > 1) ? (attributes->height) : (1);
|
2012-11-07 12:03:32 +00:00
|
|
|
|
window->alpha = 255;
|
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
|
|
|
|
|
*/
|
2017-11-06 00:28:37 +00:00
|
|
|
|
if (parent == NULL)
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->window_type = GDK_WINDOW_TEMP;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
else
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->window_type = GDK_WINDOW_CHILD;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->window_type = attributes->window_type;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
|
|
/* Sanity checks */
|
2010-11-22 23:55:39 +00:00
|
|
|
|
switch (window->window_type)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
|
|
|
|
case GDK_WINDOW_TOPLEVEL:
|
|
|
|
|
case GDK_WINDOW_TEMP:
|
2017-11-06 00:28:37 +00:00
|
|
|
|
if (parent != NULL && GDK_WINDOW_TYPE (parent) != GDK_WINDOW_ROOT)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
g_warning (G_STRLOC "Toplevel windows must be created as children of\n"
|
2016-12-15 16:53:08 +00:00
|
|
|
|
"a window of type GDK_WINDOW_ROOT");
|
2009-02-18 11:57:12 +00:00
|
|
|
|
break;
|
2014-08-21 15:26:18 +00:00
|
|
|
|
case GDK_WINDOW_SUBSURFACE:
|
|
|
|
|
#ifdef GDK_WINDOWING_WAYLAND
|
|
|
|
|
if (!GDK_IS_WAYLAND_DISPLAY (display))
|
|
|
|
|
{
|
|
|
|
|
g_warning (G_STRLOC "Subsurface windows can only be used on Wayland");
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
break;
|
2014-06-29 23:49:49 +00:00
|
|
|
|
case GDK_WINDOW_CHILD:
|
2016-12-15 16:53:08 +00:00
|
|
|
|
if (GDK_WINDOW_TYPE (parent) == GDK_WINDOW_ROOT ||
|
|
|
|
|
GDK_WINDOW_TYPE (parent) == GDK_WINDOW_FOREIGN)
|
|
|
|
|
{
|
|
|
|
|
g_warning (G_STRLOC "Child windows must not be created as children of\n"
|
|
|
|
|
"a window of type GDK_WINDOW_ROOT or GDK_WINDOW_FOREIGN");
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
break;
|
|
|
|
|
default:
|
2010-11-22 23:55:39 +00:00
|
|
|
|
g_warning (G_STRLOC "cannot make windows of type %d", window->window_type);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
return NULL;
|
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2017-11-13 17:00:31 +00:00
|
|
|
|
window->event_mask = GDK_ALL_EVENTS_MASK;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
|
|
if (attributes->wclass == GDK_INPUT_OUTPUT)
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->input_only = FALSE;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->input_only = TRUE;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-11-06 00:28:37 +00:00
|
|
|
|
native = FALSE;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2017-11-06 00:28:37 +00:00
|
|
|
|
if (window->parent != NULL)
|
|
|
|
|
window->parent->children = g_list_concat (&window->children_list_node, window->parent->children);
|
|
|
|
|
else
|
2013-01-30 20:09:44 +00:00
|
|
|
|
{
|
|
|
|
|
GdkFrameClock *frame_clock = g_object_new (GDK_TYPE_FRAME_CLOCK_IDLE, NULL);
|
|
|
|
|
gdk_window_set_frame_clock (window, frame_clock);
|
2013-02-18 20:14:53 +00:00
|
|
|
|
g_object_unref (frame_clock);
|
2013-01-30 20:09:44 +00:00
|
|
|
|
|
2017-11-06 00:28:37 +00:00
|
|
|
|
native = TRUE; /* Always use native windows for toplevels */
|
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2016-11-15 13:49:03 +00:00
|
|
|
|
#ifdef GDK_WINDOWING_WAYLAND
|
|
|
|
|
if (window->window_type == GDK_WINDOW_SUBSURFACE)
|
|
|
|
|
native = TRUE; /* Always use native windows for subsurfaces as well */
|
|
|
|
|
#endif
|
|
|
|
|
|
2016-10-25 07:54:37 +00:00
|
|
|
|
if (native)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
event_mask = get_native_event_mask (window);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
/* Create the impl */
|
2017-10-31 21:23:15 +00:00
|
|
|
|
_gdk_display_create_window_impl (display, window, parent, event_mask, attributes);
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->impl_window = 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
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->impl_window = g_object_ref (window->parent->impl_window);
|
|
|
|
|
window->impl = g_object_ref (window->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
|
|
|
|
|
2013-04-17 15:05:49 +00:00
|
|
|
|
recompute_visible_regions (window, FALSE);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2017-11-06 00:28:37 +00:00
|
|
|
|
g_signal_connect (display, "seat-removed", G_CALLBACK (seat_removed_cb), window);
|
2014-10-09 09:03:47 +00:00
|
|
|
|
|
2014-11-07 04:29:16 +00:00
|
|
|
|
if ((_gdk_gl_flags & (GDK_GL_ALWAYS | GDK_GL_DISABLE)) == GDK_GL_ALWAYS)
|
2014-10-09 09:03:47 +00:00
|
|
|
|
{
|
|
|
|
|
GError *error = NULL;
|
|
|
|
|
|
|
|
|
|
if (gdk_window_get_paint_gl_context (window, &error) == NULL)
|
|
|
|
|
{
|
2016-02-28 17:20:39 +00:00
|
|
|
|
g_warning ("Unable to force GL enabled: %s", error->message);
|
2014-10-09 09:03:47 +00:00
|
|
|
|
g_error_free (error);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2016-11-06 16:40:59 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_new_toplevel: (constructor)
|
|
|
|
|
* @display: the display to create the window on
|
|
|
|
|
* @width: width of new window
|
|
|
|
|
* @height: height of new window
|
|
|
|
|
*
|
|
|
|
|
* Creates a new toplevel window. The window will be managed by the window
|
|
|
|
|
* manager.
|
|
|
|
|
*
|
|
|
|
|
* Returns: (transfer full): the new #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.90
|
|
|
|
|
**/
|
|
|
|
|
GdkWindow *
|
|
|
|
|
gdk_window_new_toplevel (GdkDisplay *display,
|
|
|
|
|
gint width,
|
|
|
|
|
gint height)
|
|
|
|
|
{
|
|
|
|
|
GdkWindowAttr attr;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
|
|
|
|
|
|
|
|
|
|
attr.wclass = GDK_INPUT_OUTPUT;
|
2016-11-07 00:33:43 +00:00
|
|
|
|
attr.x = 0;
|
|
|
|
|
attr.y = 0;
|
2016-11-06 16:40:59 +00:00
|
|
|
|
attr.width = width;
|
|
|
|
|
attr.height = height;
|
|
|
|
|
attr.window_type = GDK_WINDOW_TOPLEVEL;
|
|
|
|
|
|
2017-08-12 13:36:49 +00:00
|
|
|
|
return gdk_window_new (display, NULL, &attr);
|
2016-11-06 16:40:59 +00:00
|
|
|
|
}
|
|
|
|
|
|
2016-11-06 22:47:56 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_new_popup: (constructor)
|
|
|
|
|
* @display: the display to create the window on
|
|
|
|
|
* @position: position of the window on screen
|
|
|
|
|
*
|
|
|
|
|
* Creates a new toplevel popup window. The window will bypass window
|
|
|
|
|
* management.
|
|
|
|
|
*
|
|
|
|
|
* Returns: (transfer full): the new #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.90
|
|
|
|
|
**/
|
|
|
|
|
GdkWindow *
|
|
|
|
|
gdk_window_new_popup (GdkDisplay *display,
|
|
|
|
|
const GdkRectangle *position)
|
|
|
|
|
{
|
|
|
|
|
GdkWindowAttr attr;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
|
|
|
|
|
g_return_val_if_fail (position != NULL, NULL);
|
|
|
|
|
|
|
|
|
|
attr.wclass = GDK_INPUT_OUTPUT;
|
|
|
|
|
attr.x = position->x;
|
|
|
|
|
attr.y = position->y;
|
|
|
|
|
attr.width = position->width;
|
|
|
|
|
attr.height = position->height;
|
|
|
|
|
attr.window_type = GDK_WINDOW_TEMP;
|
|
|
|
|
|
2017-08-12 13:36:49 +00:00
|
|
|
|
return gdk_window_new (display, NULL, &attr);
|
2016-11-06 22:47:56 +00:00
|
|
|
|
}
|
2016-11-07 00:03:17 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_new_temp: (constructor)
|
|
|
|
|
* @display: the display to create the window on
|
|
|
|
|
*
|
|
|
|
|
* Creates a new toplevel temporary window. The window will be
|
|
|
|
|
* situated off-screen and not handle output.
|
|
|
|
|
*
|
|
|
|
|
* You most likely do not want to use this function.
|
|
|
|
|
*
|
|
|
|
|
* Returns: (transfer full): the new #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.90
|
|
|
|
|
**/
|
|
|
|
|
GdkWindow *
|
|
|
|
|
gdk_window_new_temp (GdkDisplay *display)
|
|
|
|
|
{
|
|
|
|
|
GdkWindowAttr attr;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
|
|
|
|
|
|
|
|
|
|
attr.wclass = GDK_INPUT_ONLY;
|
|
|
|
|
attr.x = -100;
|
|
|
|
|
attr.y = -100;
|
|
|
|
|
attr.width = 10;
|
|
|
|
|
attr.height = 10;
|
|
|
|
|
attr.window_type = GDK_WINDOW_TEMP;
|
|
|
|
|
|
2017-08-12 13:36:49 +00:00
|
|
|
|
return gdk_window_new (display, NULL, &attr);
|
2016-11-07 00:03:17 +00:00
|
|
|
|
}
|
|
|
|
|
|
2016-10-17 18:11:23 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_new_child: (constructor)
|
|
|
|
|
* @parent: the parent window
|
|
|
|
|
* @position: placement of the window inside @parent
|
|
|
|
|
*
|
|
|
|
|
* Creates a new client-side child window.
|
|
|
|
|
*
|
|
|
|
|
* Returns: (transfer full): the new #GdkWindow
|
2016-10-18 11:27:19 +00:00
|
|
|
|
*
|
|
|
|
|
* Since: 3.90
|
2016-10-17 18:11:23 +00:00
|
|
|
|
**/
|
|
|
|
|
GdkWindow *
|
|
|
|
|
gdk_window_new_child (GdkWindow *parent,
|
|
|
|
|
const GdkRectangle *position)
|
|
|
|
|
{
|
|
|
|
|
GdkWindowAttr attr;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (parent), NULL);
|
|
|
|
|
|
|
|
|
|
attr.wclass = GDK_INPUT_OUTPUT;
|
|
|
|
|
attr.x = position->x;
|
|
|
|
|
attr.y = position->y;
|
|
|
|
|
attr.width = position->width;
|
|
|
|
|
attr.height = position->height;
|
|
|
|
|
attr.window_type = GDK_WINDOW_CHILD;
|
|
|
|
|
|
2017-08-12 13:36:49 +00:00
|
|
|
|
return gdk_window_new (gdk_window_get_display (parent), parent, &attr);
|
2016-10-17 18:11:23 +00:00
|
|
|
|
}
|
|
|
|
|
|
2010-12-17 13:03:01 +00:00
|
|
|
|
/**
|
|
|
|
|
* _gdk_event_filter_unref:
|
2011-05-03 07:30:49 +00:00
|
|
|
|
* @window: (allow-none): A #GdkWindow, or %NULL to be the global window
|
2010-12-17 13:03:01 +00:00
|
|
|
|
* @filter: A window filter
|
|
|
|
|
*
|
|
|
|
|
* Release a reference to @filter. Note this function may
|
|
|
|
|
* mutate the list storage, so you need to handle this
|
|
|
|
|
* if iterating over a list of filters.
|
|
|
|
|
*/
|
|
|
|
|
void
|
|
|
|
|
_gdk_event_filter_unref (GdkWindow *window,
|
|
|
|
|
GdkEventFilter *filter)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
2010-12-17 13:03:01 +00:00
|
|
|
|
GList **filters;
|
|
|
|
|
GList *tmp_list;
|
|
|
|
|
|
|
|
|
|
if (window == NULL)
|
|
|
|
|
filters = &_gdk_default_filters;
|
|
|
|
|
else
|
|
|
|
|
filters = &window->filters;
|
|
|
|
|
|
2010-12-17 20:36:51 +00:00
|
|
|
|
tmp_list = *filters;
|
|
|
|
|
while (tmp_list)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
2010-12-17 13:03:01 +00:00
|
|
|
|
GdkEventFilter *iter_filter = tmp_list->data;
|
|
|
|
|
GList *node;
|
|
|
|
|
|
2010-12-17 20:36:51 +00:00
|
|
|
|
node = tmp_list;
|
|
|
|
|
tmp_list = tmp_list->next;
|
|
|
|
|
|
2010-12-17 13:03:01 +00:00
|
|
|
|
if (iter_filter != filter)
|
|
|
|
|
continue;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-12-17 13:03:01 +00:00
|
|
|
|
g_assert (iter_filter->ref_count > 0);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-12-17 13:03:01 +00:00
|
|
|
|
filter->ref_count--;
|
|
|
|
|
if (filter->ref_count != 0)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
*filters = g_list_remove_link (*filters, node);
|
|
|
|
|
g_free (filter);
|
|
|
|
|
g_list_free_1 (node);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2010-12-17 13:03:01 +00:00
|
|
|
|
static void
|
|
|
|
|
window_remove_filters (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
while (window->filters)
|
|
|
|
|
_gdk_event_filter_unref (window, window->filters->data);
|
|
|
|
|
}
|
|
|
|
|
|
2010-05-25 22:38:44 +00:00
|
|
|
|
static void
|
|
|
|
|
update_pointer_info_foreach (GdkDisplay *display,
|
|
|
|
|
GdkDevice *device,
|
|
|
|
|
GdkPointerWindowInfo *pointer_info,
|
|
|
|
|
gpointer user_data)
|
|
|
|
|
{
|
|
|
|
|
GdkWindow *window = user_data;
|
|
|
|
|
|
2017-09-15 17:39:18 +00:00
|
|
|
|
if (pointer_info->window_under_pointer == window)
|
2010-05-25 22:38:44 +00:00
|
|
|
|
{
|
2017-09-15 17:39:18 +00:00
|
|
|
|
g_object_unref (pointer_info->window_under_pointer);
|
|
|
|
|
pointer_info->window_under_pointer = NULL;
|
2010-05-25 22:38:44 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
window_remove_from_pointer_info (GdkWindow *window,
|
|
|
|
|
GdkDisplay *display)
|
|
|
|
|
{
|
|
|
|
|
_gdk_display_pointer_info_foreach (display,
|
|
|
|
|
update_pointer_info_foreach,
|
|
|
|
|
window);
|
|
|
|
|
}
|
|
|
|
|
|
2014-06-21 00:20:14 +00:00
|
|
|
|
static void
|
|
|
|
|
gdk_window_free_current_paint (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
cairo_surface_destroy (window->current_paint.surface);
|
|
|
|
|
window->current_paint.surface = NULL;
|
|
|
|
|
|
|
|
|
|
cairo_region_destroy (window->current_paint.region);
|
|
|
|
|
window->current_paint.region = NULL;
|
|
|
|
|
|
|
|
|
|
window->current_paint.surface_needs_composite = FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
/**
|
|
|
|
|
* _gdk_window_destroy_hierarchy:
|
2000-05-15 16:09:53 +00:00
|
|
|
|
* @window: a #GdkWindow
|
2014-05-17 03:12:51 +00:00
|
|
|
|
* @recursing: If %TRUE, then this is being called because a parent
|
2009-06-01 10:04:36 +00:00
|
|
|
|
* was destroyed.
|
2014-05-17 03:12:51 +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.
|
2014-05-17 03:12:51 +00:00
|
|
|
|
* @foreign_destroy: If %TRUE, the window or a parent was destroyed by some
|
2009-06-01 10:04:36 +00:00
|
|
|
|
* 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)
|
|
|
|
|
{
|
2010-11-22 19:42:00 +00:00
|
|
|
|
GdkWindowImplClass *impl_class;
|
2000-05-15 16:09:53 +00:00
|
|
|
|
GdkWindow *temp_window;
|
2008-12-15 09:24:54 +00:00
|
|
|
|
GdkDisplay *display;
|
2000-05-15 16:09:53 +00:00
|
|
|
|
GList *tmp;
|
2008-10-21 21:42:39 +00:00
|
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
2004-03-13 18:27:56 +00:00
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
|
return;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-08-29 00:08:47 +00:00
|
|
|
|
display = gdk_window_get_display (window);
|
2009-02-28 05:24:07 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
switch (window->window_type)
|
2000-05-15 16:09:53 +00:00
|
|
|
|
{
|
2017-10-06 19:19:42 +00:00
|
|
|
|
default:
|
|
|
|
|
g_assert_not_reached ();
|
|
|
|
|
break;
|
|
|
|
|
|
2005-11-10 12:09:42 +00:00
|
|
|
|
case GDK_WINDOW_ROOT:
|
2017-11-01 21:08:04 +00:00
|
|
|
|
if (!gdk_display_is_closed (display))
|
2005-11-10 12:09:42 +00:00
|
|
|
|
{
|
|
|
|
|
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_TEMP:
|
|
|
|
|
case GDK_WINDOW_FOREIGN:
|
2016-11-23 13:45:16 +00:00
|
|
|
|
case GDK_WINDOW_SUBSURFACE:
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->window_type == GDK_WINDOW_FOREIGN && !foreign_destroy)
|
2004-03-13 18:27:56 +00:00
|
|
|
|
{
|
2016-12-15 16:53:08 +00:00
|
|
|
|
/* For historical reasons, we remove any filters
|
2004-03-13 18:27:56 +00:00
|
|
|
|
* 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
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->parent)
|
2000-05-15 16:09:53 +00:00
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->parent->children)
|
2015-09-10 10:57:16 +00:00
|
|
|
|
window->parent->children = g_list_remove_link (window->parent->children, &window->children_list_node);
|
2008-12-18 13:29:28 +00:00
|
|
|
|
|
|
|
|
|
if (!recursing &&
|
|
|
|
|
GDK_WINDOW_IS_MAPPED (window))
|
|
|
|
|
{
|
2013-04-17 15:05:49 +00:00
|
|
|
|
recompute_visible_regions (window, FALSE);
|
2010-11-22 23:55:39 +00:00
|
|
|
|
gdk_window_invalidate_in_parent (window);
|
2008-12-18 13:29:28 +00:00
|
|
|
|
}
|
2000-05-15 16:09:53 +00:00
|
|
|
|
}
|
|
|
|
|
|
2014-10-30 11:07:39 +00:00
|
|
|
|
if (window->gl_paint_context)
|
|
|
|
|
{
|
|
|
|
|
/* Make sure to destroy if current */
|
|
|
|
|
g_object_run_dispose (G_OBJECT (window->gl_paint_context));
|
|
|
|
|
g_object_unref (window->gl_paint_context);
|
|
|
|
|
window->gl_paint_context = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
2013-01-30 20:09:44 +00:00
|
|
|
|
if (window->frame_clock)
|
|
|
|
|
{
|
|
|
|
|
g_object_run_dispose (G_OBJECT (window->frame_clock));
|
|
|
|
|
gdk_window_set_frame_clock (window, NULL);
|
|
|
|
|
}
|
|
|
|
|
|
2014-06-21 00:20:14 +00:00
|
|
|
|
gdk_window_free_current_paint (window);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->window_type == GDK_WINDOW_FOREIGN)
|
|
|
|
|
g_assert (window->children == NULL);
|
2001-10-24 14:15:50 +00:00
|
|
|
|
else
|
2000-05-15 16:09:53 +00:00
|
|
|
|
{
|
2015-09-10 10:57:16 +00:00
|
|
|
|
tmp = window->children;
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->children = NULL;
|
2015-09-10 10:57:16 +00:00
|
|
|
|
/* No need to free children list, its all made up of in-struct nodes */
|
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
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (temp_window)
|
2002-01-13 20:13:34 +00:00
|
|
|
|
_gdk_window_destroy_hierarchy (temp_window,
|
2009-06-01 10:04:36 +00:00
|
|
|
|
TRUE,
|
2010-11-22 23:55:39 +00:00
|
|
|
|
recursing_native || gdk_window_has_impl (window),
|
2009-02-05 08:55:39 +00:00
|
|
|
|
foreign_destroy);
|
2000-05-15 16:09:53 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2009-06-01 10:04:36 +00:00
|
|
|
|
_gdk_window_clear_update_area (window);
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
2009-08-31 08:44:11 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (gdk_window_has_impl (window))
|
2015-08-28 17:48:22 +00:00
|
|
|
|
impl_class->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);
|
|
|
|
|
}
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->state |= GDK_WINDOW_STATE_WITHDRAWN;
|
|
|
|
|
window->parent = NULL;
|
|
|
|
|
window->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
|
|
|
|
|
2010-05-25 22:38:44 +00:00
|
|
|
|
window_remove_from_pointer_info (window, display);
|
2009-08-13 14:48:07 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->clip_region)
|
2009-08-13 14:48:07 +00:00
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
cairo_region_destroy (window->clip_region);
|
|
|
|
|
window->clip_region = NULL;
|
2009-08-13 14:48:07 +00:00
|
|
|
|
}
|
2000-05-15 16:09:53 +00:00
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* _gdk_window_destroy:
|
|
|
|
|
* @window: a #GdkWindow
|
2014-05-17 03:12:51 +00:00
|
|
|
|
* @foreign_destroy: If %TRUE, the window or a parent was destroyed by some
|
2002-01-13 20:13:34 +00:00
|
|
|
|
* 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
|
2014-02-07 18:01:26 +00:00
|
|
|
|
* destroyed, but the children’s reference counts are not decremented.
|
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
|
|
|
|
*
|
|
|
|
|
* 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
|
2011-08-14 12:05:28 +00:00
|
|
|
|
* @user_data: (allow-none) (type GObject.Object): user data
|
2001-10-03 18:19:48 +00:00
|
|
|
|
*
|
|
|
|
|
* 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));
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
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
|
2011-01-18 09:10:30 +00:00
|
|
|
|
* @data: (out): return location for user data
|
2001-10-03 18:19:48 +00:00
|
|
|
|
*
|
|
|
|
|
* 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
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
*data = window->user_data;
|
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
|
|
|
|
}
|
|
|
|
|
|
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
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: type of window
|
2001-10-03 18:19:48 +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
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
|
2010-08-29 00:03:19 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_display:
|
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Gets the #GdkDisplay associated with a #GdkWindow.
|
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: (transfer none): the #GdkDisplay associated with @window
|
2010-09-28 00:59:08 +00:00
|
|
|
|
*
|
|
|
|
|
* Since: 2.24
|
2010-08-29 00:03:19 +00:00
|
|
|
|
**/
|
|
|
|
|
GdkDisplay *
|
|
|
|
|
gdk_window_get_display (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
|
2016-10-27 13:38:41 +00:00
|
|
|
|
return window->display;
|
2010-08-29 00:03:19 +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..
|
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: %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-06-28 22:31:39 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_has_native:
|
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
*
|
2017-01-07 23:46:08 +00:00
|
|
|
|
* Checks whether the window has a native window or not.
|
2010-06-28 22:31:39 +00:00
|
|
|
|
*
|
2014-01-20 22:05:52 +00:00
|
|
|
|
* Returns: %TRUE if the @window has a native window, %FALSE otherwise.
|
2010-06-28 22:31:39 +00:00
|
|
|
|
*
|
|
|
|
|
* Since: 2.22
|
|
|
|
|
*/
|
|
|
|
|
gboolean
|
|
|
|
|
gdk_window_has_native (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return window->parent == NULL || window->parent->impl != window->impl;
|
2010-06-28 22:31:39 +00:00
|
|
|
|
}
|
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_position:
|
|
|
|
|
* @window: a #GdkWindow
|
2010-12-04 13:55:11 +00:00
|
|
|
|
* @x: (out) (allow-none): X coordinate of window
|
|
|
|
|
* @y: (out) (allow-none): Y coordinate of window
|
2001-10-03 18:19:48 +00:00
|
|
|
|
*
|
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
|
|
|
|
*
|
2014-02-07 18:01:26 +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
|
|
|
|
{
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
1999-11-08 20:14:59 +00:00
|
|
|
|
if (x)
|
2010-11-22 23:55:39 +00:00
|
|
|
|
*x = window->x;
|
1999-11-08 20:14:59 +00:00
|
|
|
|
if (y)
|
2010-11-22 23:55:39 +00:00
|
|
|
|
*y = window->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(),
|
2014-02-07 18:37:09 +00:00
|
|
|
|
* not the actual parent. This should never matter unless you’re using
|
2001-10-03 18:19:48 +00:00
|
|
|
|
* 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
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: (transfer none): parent of @window
|
2001-10-03 18:19:48 +00:00
|
|
|
|
**/
|
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
|
|
|
|
|
2017-02-01 14:09:52 +00:00
|
|
|
|
if (gdk_window_is_subsurface (window))
|
|
|
|
|
return window->transient_for;
|
|
|
|
|
else
|
|
|
|
|
return window->parent;
|
1998-11-06 22:05:02 +00:00
|
|
|
|
}
|
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_toplevel:
|
|
|
|
|
* @window: a #GdkWindow
|
2009-06-01 10:04:36 +00:00
|
|
|
|
*
|
2014-02-07 18:01:26 +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.
|
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: (transfer none): the toplevel window containing @window
|
2001-10-03 18:19:48 +00:00
|
|
|
|
**/
|
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
|
|
|
|
{
|
1999-11-08 20:14:59 +00:00
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
|
2016-11-29 13:21:57 +00:00
|
|
|
|
while (window->window_type == GDK_WINDOW_CHILD ||
|
|
|
|
|
window->window_type == GDK_WINDOW_SUBSURFACE)
|
2009-01-28 15:37:56 +00:00
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (gdk_window_is_toplevel (window))
|
2009-01-28 15:37:56 +00:00
|
|
|
|
break;
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window = window->parent;
|
2009-01-28 15:37:56 +00:00
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return 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
|
|
|
|
}
|
|
|
|
|
|
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,
|
2014-02-07 18:01:26 +00:00
|
|
|
|
* so for example it’s useless when used with the root window;
|
2001-10-03 18:19:48 +00:00
|
|
|
|
* 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
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: (transfer container) (element-type GdkWindow):
|
2010-09-17 04:18:20 +00:00
|
|
|
|
* list of child windows inside @window
|
2001-10-03 18:19:48 +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
|
|
|
|
GList*
|
|
|
|
|
gdk_window_get_children (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
|
return NULL;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return g_list_copy (window->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
|
|
|
|
}
|
|
|
|
|
|
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
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: (transfer none) (element-type GdkWindow):
|
2010-09-17 04:18:20 +00:00
|
|
|
|
* a reference to the list of child windows in @window
|
2001-10-03 18:19:48 +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
|
|
|
|
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;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return window->children;
|
1997-11-24 22:37:52 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-05-03 08:39:24 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_children_with_user_data:
|
|
|
|
|
* @window: a #GdkWindow
|
2013-09-17 05:13:03 +00:00
|
|
|
|
* @user_data: user data to look for
|
2013-05-03 08:39:24 +00:00
|
|
|
|
*
|
2013-09-17 05:13:03 +00:00
|
|
|
|
* Gets the list of children of @window known to GDK with a
|
|
|
|
|
* particular @user_data set on it.
|
2013-05-03 08:39:24 +00:00
|
|
|
|
*
|
|
|
|
|
* The returned list must be freed, but the elements in the
|
|
|
|
|
* list need not be.
|
|
|
|
|
*
|
|
|
|
|
* The list is returned in (relative) stacking order, i.e. the
|
|
|
|
|
* lowest window is first.
|
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: (transfer container) (element-type GdkWindow):
|
2013-05-03 08:39:24 +00:00
|
|
|
|
* list of child windows inside @window
|
2013-05-27 18:36:53 +00:00
|
|
|
|
*
|
|
|
|
|
* Since: 3.10
|
2013-05-03 08:39:24 +00:00
|
|
|
|
**/
|
|
|
|
|
GList *
|
2013-05-27 18:36:53 +00:00
|
|
|
|
gdk_window_get_children_with_user_data (GdkWindow *window,
|
|
|
|
|
gpointer user_data)
|
2013-05-03 08:39:24 +00:00
|
|
|
|
{
|
|
|
|
|
GdkWindow *child;
|
|
|
|
|
GList *res, *l;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
|
|
res = NULL;
|
|
|
|
|
for (l = window->children; l != NULL; l = l->next)
|
|
|
|
|
{
|
|
|
|
|
child = l->data;
|
|
|
|
|
|
|
|
|
|
if (child->user_data == user_data)
|
|
|
|
|
res = g_list_prepend (res, child);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
|
/**
|
2011-01-18 05:37:11 +00:00
|
|
|
|
* gdk_window_add_filter: (skip)
|
2011-05-03 07:30:49 +00:00
|
|
|
|
* @window: (allow-none): a #GdkWindow
|
2001-10-03 18:19:48 +00:00
|
|
|
|
* @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
|
|
|
|
*
|
2011-05-18 19:50:26 +00:00
|
|
|
|
* If you are interested in X GenericEvents, bear in mind that
|
|
|
|
|
* XGetEventData() has been already called on the event, and
|
|
|
|
|
* XFreeEventData() must not be called within @function.
|
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
|
|
|
|
{
|
|
|
|
|
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
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window && 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. */
|
2016-12-15 16:53:08 +00:00
|
|
|
|
if (window && !gdk_window_has_impl (window))
|
|
|
|
|
{
|
|
|
|
|
g_warning ("Filters only work on toplevel windows");
|
|
|
|
|
return;
|
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window)
|
|
|
|
|
tmp_list = window->filters;
|
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
|
|
|
|
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))
|
2010-11-20 22:58:50 +00:00
|
|
|
|
{
|
|
|
|
|
filter->ref_count++;
|
|
|
|
|
return;
|
|
|
|
|
}
|
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
|
|
|
|
filter = g_new (GdkEventFilter, 1);
|
|
|
|
|
filter->function = function;
|
|
|
|
|
filter->data = data;
|
2010-11-20 22:58:50 +00:00
|
|
|
|
filter->ref_count = 1;
|
|
|
|
|
filter->flags = 0;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window)
|
|
|
|
|
window->filters = g_list_append (window->filters, filter);
|
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_append (_gdk_default_filters, filter);
|
1997-12-18 02:17:14 +00:00
|
|
|
|
}
|
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
|
/**
|
2011-01-18 05:37:11 +00:00
|
|
|
|
* gdk_window_remove_filter: (skip)
|
2001-10-03 18:19:48 +00:00
|
|
|
|
* @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().
|
2011-01-23 23:50:09 +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,
|
2011-01-23 23:50:09 +00:00
|
|
|
|
GdkFilterFunc function,
|
|
|
|
|
gpointer data)
|
1997-12-18 02:17:14 +00:00
|
|
|
|
{
|
2011-01-23 23:50:09 +00:00
|
|
|
|
GList *tmp_list;
|
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
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window)
|
|
|
|
|
tmp_list = window->filters;
|
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
|
|
|
|
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;
|
|
|
|
|
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))
|
2011-01-23 23:50:09 +00:00
|
|
|
|
{
|
2010-11-20 22:58:50 +00:00
|
|
|
|
filter->flags |= GDK_EVENT_FILTER_REMOVED;
|
|
|
|
|
|
2011-01-23 23:50:09 +00:00
|
|
|
|
_gdk_event_filter_unref (window, filter);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2011-01-23 23:50:09 +00:00
|
|
|
|
return;
|
|
|
|
|
}
|
1997-12-18 02:17: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
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: %TRUE if the window is mapped
|
2001-10-03 18:19:48 +00:00
|
|
|
|
**/
|
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.)
|
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: %TRUE if the window is viewable
|
2001-10-03 18:19:48 +00:00
|
|
|
|
**/
|
2009-06-01 10:04:36 +00:00
|
|
|
|
gboolean
|
1999-01-15 16:00:39 +00:00
|
|
|
|
gdk_window_is_viewable (GdkWindow *window)
|
|
|
|
|
{
|
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
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->destroyed)
|
2009-07-18 18:29:50 +00:00
|
|
|
|
return FALSE;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return window->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
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: window state bitfield
|
2001-02-27 20:40:15 +00:00
|
|
|
|
**/
|
|
|
|
|
GdkWindowState
|
|
|
|
|
gdk_window_get_state (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return window->state;
|
2001-02-27 20:40:15 +00:00
|
|
|
|
}
|
|
|
|
|
|
2010-08-28 20:26:48 +00:00
|
|
|
|
static cairo_content_t
|
|
|
|
|
gdk_window_get_content (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
cairo_surface_t *surface;
|
|
|
|
|
cairo_content_t content;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
|
|
|
|
|
|
2012-08-22 15:01:15 +00:00
|
|
|
|
surface = gdk_window_ref_impl_surface (window);
|
2010-08-28 20:26:48 +00:00
|
|
|
|
content = cairo_surface_get_content (surface);
|
|
|
|
|
cairo_surface_destroy (surface);
|
|
|
|
|
|
|
|
|
|
return content;
|
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2010-11-23 00:32:19 +00:00
|
|
|
|
static cairo_surface_t *
|
|
|
|
|
gdk_window_ref_impl_surface (GdkWindow *window)
|
|
|
|
|
{
|
2011-01-23 20:39:00 +00:00
|
|
|
|
return GDK_WINDOW_IMPL_GET_CLASS (window->impl)->ref_cairo_surface (gdk_window_get_impl_window (window));
|
2010-11-23 00:32:19 +00:00
|
|
|
|
}
|
|
|
|
|
|
2014-10-09 08:45:44 +00:00
|
|
|
|
GdkGLContext *
|
GL: Split GL context creation in two phases
One of the major requests by OpenGL users has been the ability to
specify settings when creating a GL context, like the version to use
or whether the debug support should be enabled.
We have a couple of requirements in terms of API:
• avoid, if at all possible, the "C arrays of integers with
attribute, value pairs", which are hard to write and hard
to bind in non-C languages.
• allow failing in a recoverable way.
• do not make the GL context creation API a mess of arguments.
Looking at prior art, it seems that a common pattern is to split the
construction phase in two:
• a first phase that creates a GL context wrapper object and
does preliminary checks on the environment.
• a second phase that creates the backend-specific GL object.
We adopted a similar pattern:
• gdk_window_create_gl_context() creates a GdkGLContext
• gdk_gl_context_realize() creates the underlying resources
Calling gdk_gl_context_make_current() also realizes the context, so
simple GL users do not need to care. Advanced users will want to
call gdk_window_create_gl_context(), set up the optional requirements,
and then call gdk_gl_context_realize(). If either of these two steps
fails, it's possible to recover by changing the requirements, or simply
creating a new GdkGLContext instance.
https://bugzilla.gnome.org/show_bug.cgi?id=741946
2015-01-27 21:23:23 +00:00
|
|
|
|
gdk_window_get_paint_gl_context (GdkWindow *window,
|
|
|
|
|
GError **error)
|
2014-10-09 08:45:44 +00:00
|
|
|
|
{
|
GL: Split GL context creation in two phases
One of the major requests by OpenGL users has been the ability to
specify settings when creating a GL context, like the version to use
or whether the debug support should be enabled.
We have a couple of requirements in terms of API:
• avoid, if at all possible, the "C arrays of integers with
attribute, value pairs", which are hard to write and hard
to bind in non-C languages.
• allow failing in a recoverable way.
• do not make the GL context creation API a mess of arguments.
Looking at prior art, it seems that a common pattern is to split the
construction phase in two:
• a first phase that creates a GL context wrapper object and
does preliminary checks on the environment.
• a second phase that creates the backend-specific GL object.
We adopted a similar pattern:
• gdk_window_create_gl_context() creates a GdkGLContext
• gdk_gl_context_realize() creates the underlying resources
Calling gdk_gl_context_make_current() also realizes the context, so
simple GL users do not need to care. Advanced users will want to
call gdk_window_create_gl_context(), set up the optional requirements,
and then call gdk_gl_context_realize(). If either of these two steps
fails, it's possible to recover by changing the requirements, or simply
creating a new GdkGLContext instance.
https://bugzilla.gnome.org/show_bug.cgi?id=741946
2015-01-27 21:23:23 +00:00
|
|
|
|
GError *internal_error = NULL;
|
|
|
|
|
|
2014-11-07 04:29:16 +00:00
|
|
|
|
if (_gdk_gl_flags & GDK_GL_DISABLE)
|
2014-10-16 01:13:45 +00:00
|
|
|
|
{
|
|
|
|
|
g_set_error_literal (error, GDK_GL_ERROR,
|
|
|
|
|
GDK_GL_ERROR_NOT_AVAILABLE,
|
|
|
|
|
_("GL support disabled via GDK_DEBUG"));
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
2014-10-09 08:45:44 +00:00
|
|
|
|
if (window->impl_window->gl_paint_context == NULL)
|
2014-11-06 08:15:03 +00:00
|
|
|
|
{
|
2016-05-23 07:34:39 +00:00
|
|
|
|
GdkWindowImplClass *impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
|
|
|
|
|
|
|
|
|
if (impl_class->create_gl_context == NULL)
|
|
|
|
|
{
|
|
|
|
|
g_set_error_literal (error, GDK_GL_ERROR, GDK_GL_ERROR_NOT_AVAILABLE,
|
|
|
|
|
_("The current backend does not support OpenGL"));
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
2014-11-06 08:15:03 +00:00
|
|
|
|
window->impl_window->gl_paint_context =
|
2016-05-23 07:34:39 +00:00
|
|
|
|
impl_class->create_gl_context (window->impl_window,
|
|
|
|
|
TRUE,
|
|
|
|
|
NULL,
|
|
|
|
|
&internal_error);
|
2014-11-06 08:15:03 +00:00
|
|
|
|
}
|
2014-10-09 08:45:44 +00:00
|
|
|
|
|
GL: Split GL context creation in two phases
One of the major requests by OpenGL users has been the ability to
specify settings when creating a GL context, like the version to use
or whether the debug support should be enabled.
We have a couple of requirements in terms of API:
• avoid, if at all possible, the "C arrays of integers with
attribute, value pairs", which are hard to write and hard
to bind in non-C languages.
• allow failing in a recoverable way.
• do not make the GL context creation API a mess of arguments.
Looking at prior art, it seems that a common pattern is to split the
construction phase in two:
• a first phase that creates a GL context wrapper object and
does preliminary checks on the environment.
• a second phase that creates the backend-specific GL object.
We adopted a similar pattern:
• gdk_window_create_gl_context() creates a GdkGLContext
• gdk_gl_context_realize() creates the underlying resources
Calling gdk_gl_context_make_current() also realizes the context, so
simple GL users do not need to care. Advanced users will want to
call gdk_window_create_gl_context(), set up the optional requirements,
and then call gdk_gl_context_realize(). If either of these two steps
fails, it's possible to recover by changing the requirements, or simply
creating a new GdkGLContext instance.
https://bugzilla.gnome.org/show_bug.cgi?id=741946
2015-01-27 21:23:23 +00:00
|
|
|
|
if (internal_error != NULL)
|
|
|
|
|
{
|
|
|
|
|
g_propagate_error (error, internal_error);
|
|
|
|
|
g_clear_object (&(window->impl_window->gl_paint_context));
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gdk_gl_context_realize (window->impl_window->gl_paint_context, &internal_error);
|
|
|
|
|
if (internal_error != NULL)
|
|
|
|
|
{
|
|
|
|
|
g_propagate_error (error, internal_error);
|
|
|
|
|
g_clear_object (&(window->impl_window->gl_paint_context));
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
2014-10-09 08:45:44 +00:00
|
|
|
|
return window->impl_window->gl_paint_context;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_create_gl_context:
|
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
* @error: return location for an error
|
|
|
|
|
*
|
2014-10-09 14:09:05 +00:00
|
|
|
|
* Creates a new #GdkGLContext matching the
|
|
|
|
|
* framebuffer format to the visual of the #GdkWindow. The context
|
|
|
|
|
* is disconnected from any particular window or surface.
|
2014-10-09 08:45:44 +00:00
|
|
|
|
*
|
|
|
|
|
* If the creation of the #GdkGLContext failed, @error will be set.
|
|
|
|
|
*
|
GL: Split GL context creation in two phases
One of the major requests by OpenGL users has been the ability to
specify settings when creating a GL context, like the version to use
or whether the debug support should be enabled.
We have a couple of requirements in terms of API:
• avoid, if at all possible, the "C arrays of integers with
attribute, value pairs", which are hard to write and hard
to bind in non-C languages.
• allow failing in a recoverable way.
• do not make the GL context creation API a mess of arguments.
Looking at prior art, it seems that a common pattern is to split the
construction phase in two:
• a first phase that creates a GL context wrapper object and
does preliminary checks on the environment.
• a second phase that creates the backend-specific GL object.
We adopted a similar pattern:
• gdk_window_create_gl_context() creates a GdkGLContext
• gdk_gl_context_realize() creates the underlying resources
Calling gdk_gl_context_make_current() also realizes the context, so
simple GL users do not need to care. Advanced users will want to
call gdk_window_create_gl_context(), set up the optional requirements,
and then call gdk_gl_context_realize(). If either of these two steps
fails, it's possible to recover by changing the requirements, or simply
creating a new GdkGLContext instance.
https://bugzilla.gnome.org/show_bug.cgi?id=741946
2015-01-27 21:23:23 +00:00
|
|
|
|
* Before using the returned #GdkGLContext, you will need to
|
2015-02-12 12:34:28 +00:00
|
|
|
|
* call gdk_gl_context_make_current() or gdk_gl_context_realize().
|
GL: Split GL context creation in two phases
One of the major requests by OpenGL users has been the ability to
specify settings when creating a GL context, like the version to use
or whether the debug support should be enabled.
We have a couple of requirements in terms of API:
• avoid, if at all possible, the "C arrays of integers with
attribute, value pairs", which are hard to write and hard
to bind in non-C languages.
• allow failing in a recoverable way.
• do not make the GL context creation API a mess of arguments.
Looking at prior art, it seems that a common pattern is to split the
construction phase in two:
• a first phase that creates a GL context wrapper object and
does preliminary checks on the environment.
• a second phase that creates the backend-specific GL object.
We adopted a similar pattern:
• gdk_window_create_gl_context() creates a GdkGLContext
• gdk_gl_context_realize() creates the underlying resources
Calling gdk_gl_context_make_current() also realizes the context, so
simple GL users do not need to care. Advanced users will want to
call gdk_window_create_gl_context(), set up the optional requirements,
and then call gdk_gl_context_realize(). If either of these two steps
fails, it's possible to recover by changing the requirements, or simply
creating a new GdkGLContext instance.
https://bugzilla.gnome.org/show_bug.cgi?id=741946
2015-01-27 21:23:23 +00:00
|
|
|
|
*
|
2014-10-09 08:45:44 +00:00
|
|
|
|
* Returns: (transfer full): the newly created #GdkGLContext, or
|
|
|
|
|
* %NULL on error
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.16
|
|
|
|
|
**/
|
|
|
|
|
GdkGLContext *
|
|
|
|
|
gdk_window_create_gl_context (GdkWindow *window,
|
|
|
|
|
GError **error)
|
|
|
|
|
{
|
|
|
|
|
GdkGLContext *paint_context;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
|
|
|
|
|
|
|
|
|
|
paint_context = gdk_window_get_paint_gl_context (window, error);
|
|
|
|
|
if (paint_context == NULL)
|
|
|
|
|
return NULL;
|
|
|
|
|
|
2015-01-18 07:21:35 +00:00
|
|
|
|
return GDK_WINDOW_IMPL_GET_CLASS (window->impl)->create_gl_context (window->impl_window,
|
2014-10-09 14:09:05 +00:00
|
|
|
|
FALSE,
|
2014-10-09 08:45:44 +00:00
|
|
|
|
paint_context,
|
|
|
|
|
error);
|
|
|
|
|
}
|
|
|
|
|
|
2016-11-28 15:34:01 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_create_vulkan_context:
|
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
* @error: return location for an error
|
|
|
|
|
*
|
|
|
|
|
* Creates a new #GdkVulkanContext for rendering on @window.
|
|
|
|
|
*
|
|
|
|
|
* If the creation of the #GdkVulkanContext failed, @error will be set.
|
|
|
|
|
*
|
|
|
|
|
* Returns: (transfer full): the newly created #GdkVulkanContext, or
|
|
|
|
|
* %NULL on error
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.90
|
|
|
|
|
**/
|
|
|
|
|
GdkVulkanContext *
|
|
|
|
|
gdk_window_create_vulkan_context (GdkWindow *window,
|
|
|
|
|
GError **error)
|
|
|
|
|
{
|
|
|
|
|
GdkDisplay *display;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
|
|
|
|
|
|
2016-11-29 14:35:04 +00:00
|
|
|
|
if (_gdk_vulkan_flags & GDK_VULKAN_DISABLE)
|
|
|
|
|
{
|
|
|
|
|
g_set_error_literal (error, GDK_VULKAN_ERROR, GDK_VULKAN_ERROR_NOT_AVAILABLE,
|
|
|
|
|
_("Vulkan support disabled via GDK_DEBUG"));
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
2016-11-28 15:34:01 +00:00
|
|
|
|
display = gdk_window_get_display (window);
|
|
|
|
|
|
|
|
|
|
if (GDK_DISPLAY_GET_CLASS (display)->vk_extension_name == NULL)
|
|
|
|
|
{
|
|
|
|
|
g_set_error (error, GDK_VULKAN_ERROR, GDK_VULKAN_ERROR_UNSUPPORTED,
|
|
|
|
|
"The %s backend has no Vulkan support.", G_OBJECT_TYPE_NAME (display));
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return g_initable_new (GDK_DISPLAY_GET_CLASS (display)->vk_context_type,
|
|
|
|
|
NULL,
|
|
|
|
|
error,
|
|
|
|
|
"window", window,
|
|
|
|
|
NULL);
|
|
|
|
|
}
|
|
|
|
|
|
2016-05-20 15:55:12 +00:00
|
|
|
|
static void
|
|
|
|
|
gdk_window_begin_paint_internal (GdkWindow *window,
|
|
|
|
|
const cairo_region_t *region)
|
2000-03-28 01:24:44 +00:00
|
|
|
|
{
|
|
|
|
|
GdkRectangle clip_box;
|
2013-04-29 16:40:10 +00:00
|
|
|
|
GdkWindowImplClass *impl_class;
|
2013-06-04 08:41:44 +00:00
|
|
|
|
double sx, sy;
|
2013-04-29 14:25:55 +00:00
|
|
|
|
gboolean needs_surface;
|
2014-10-09 08:45:44 +00:00
|
|
|
|
cairo_content_t surface_content;
|
2008-10-21 21:42:39 +00:00
|
|
|
|
|
2014-06-21 00:20:14 +00:00
|
|
|
|
if (window->current_paint.surface != NULL)
|
|
|
|
|
{
|
2016-05-20 15:55:12 +00:00
|
|
|
|
g_warning ("A paint operation on the window is alredy in progress. "
|
|
|
|
|
"This is not allowed.");
|
2014-06-21 00:20:14 +00:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2013-04-29 16:40:10 +00:00
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2013-04-29 16:40:10 +00:00
|
|
|
|
needs_surface = TRUE;
|
2014-11-22 16:08:34 +00:00
|
|
|
|
if (impl_class->begin_paint)
|
|
|
|
|
needs_surface = impl_class->begin_paint (window);
|
2006-04-10 19:43:08 +00:00
|
|
|
|
|
2014-06-21 00:20:14 +00:00
|
|
|
|
window->current_paint.region = cairo_region_copy (region);
|
|
|
|
|
cairo_region_intersect (window->current_paint.region, window->clip_region);
|
|
|
|
|
cairo_region_get_extents (window->current_paint.region, &clip_box);
|
2009-01-22 19:54:11 +00:00
|
|
|
|
|
2014-10-09 08:45:44 +00:00
|
|
|
|
surface_content = gdk_window_get_content (window);
|
|
|
|
|
|
2013-04-29 14:25:55 +00:00
|
|
|
|
if (needs_surface)
|
|
|
|
|
{
|
2014-06-21 00:20:14 +00:00
|
|
|
|
window->current_paint.surface = gdk_window_create_similar_surface (window,
|
2014-10-09 08:45:44 +00:00
|
|
|
|
surface_content,
|
2014-06-21 00:20:14 +00:00
|
|
|
|
MAX (clip_box.width, 1),
|
|
|
|
|
MAX (clip_box.height, 1));
|
2013-06-04 08:41:44 +00:00
|
|
|
|
sx = sy = 1;
|
2014-06-21 00:20:14 +00:00
|
|
|
|
cairo_surface_get_device_scale (window->current_paint.surface, &sx, &sy);
|
|
|
|
|
cairo_surface_set_device_offset (window->current_paint.surface, -clip_box.x*sx, -clip_box.y*sy);
|
2014-10-09 08:45:44 +00:00
|
|
|
|
gdk_cairo_surface_mark_as_direct (window->current_paint.surface, window);
|
gdkwindow: Remove the internal cairo_surface used for out-of-band painting
Traditionally, the way painting was done in GTK+ was with the
"expose-event" handler, where you'd use GDK methods to do drawing on
your surface. In GTK+ 2.24, we added cairo support with gdk_cairo_create,
so you could paint your graphics with cairo.
Since then, we've added client-side windows, double buffering, the paint
clock, and various other enhancements, and the modern way to do drawing
is to connect to the "draw" signal on GtkWidget, which hands you a
cairo_t. To do double-buffering, the cairo_t we hand you is actually on
a secret surface, not the actual backing store of the window, and when
the draw handler completes we blit it into the main backing store
atomically.
The code to do this is with the APIs gdk_window_begin_paint_region,
which creates the temporary surface, and gdk_window_end_paint which
blits it back into the backing store. GTK+'s implementation of the
"draw" signal uses these APIs.
We've always sort-of supported people calling gdk_cairo_create
"outside" of a begin_paint / end_paint like old times, but then you're
not getting the benefit of double-buffering, and it's harder for GDK to
optimize.
Additionally, newer backends like Mir and Wayland can't actually support
this model, since they're based on double-buffering and swapping buffers
at various points in time. If we hand you a random cairo_t, we have no
idea when is a good time to swap.
Remove support for this.
This is technically a GDK API break: a warning is added in cases where
gdk_cairo_create is called outside of a paint cycle, and the returned
surface is a dummy that won't ever be composited back onto the main
surface. Testing with complex applications like Ardour didn't produce
any warnings.
2014-06-20 15:55:09 +00:00
|
|
|
|
|
2014-06-21 00:20:14 +00:00
|
|
|
|
window->current_paint.surface_needs_composite = TRUE;
|
gdkwindow: Remove the internal cairo_surface used for out-of-band painting
Traditionally, the way painting was done in GTK+ was with the
"expose-event" handler, where you'd use GDK methods to do drawing on
your surface. In GTK+ 2.24, we added cairo support with gdk_cairo_create,
so you could paint your graphics with cairo.
Since then, we've added client-side windows, double buffering, the paint
clock, and various other enhancements, and the modern way to do drawing
is to connect to the "draw" signal on GtkWidget, which hands you a
cairo_t. To do double-buffering, the cairo_t we hand you is actually on
a secret surface, not the actual backing store of the window, and when
the draw handler completes we blit it into the main backing store
atomically.
The code to do this is with the APIs gdk_window_begin_paint_region,
which creates the temporary surface, and gdk_window_end_paint which
blits it back into the backing store. GTK+'s implementation of the
"draw" signal uses these APIs.
We've always sort-of supported people calling gdk_cairo_create
"outside" of a begin_paint / end_paint like old times, but then you're
not getting the benefit of double-buffering, and it's harder for GDK to
optimize.
Additionally, newer backends like Mir and Wayland can't actually support
this model, since they're based on double-buffering and swapping buffers
at various points in time. If we hand you a random cairo_t, we have no
idea when is a good time to swap.
Remove support for this.
This is technically a GDK API break: a warning is added in cases where
gdk_cairo_create is called outside of a paint cycle, and the returned
surface is a dummy that won't ever be composited back onto the main
surface. Testing with complex applications like Ardour didn't produce
any warnings.
2014-06-20 15:55:09 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2014-06-21 00:20:14 +00:00
|
|
|
|
window->current_paint.surface = gdk_window_ref_impl_surface (window);
|
|
|
|
|
window->current_paint.surface_needs_composite = FALSE;
|
2000-03-28 01:24:44 +00:00
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2014-06-21 00:20:14 +00:00
|
|
|
|
if (!cairo_region_is_empty (window->current_paint.region))
|
2014-06-21 14:33:40 +00:00
|
|
|
|
gdk_window_clear_backing_region (window);
|
gdkwindow: Remove the internal cairo_surface used for out-of-band painting
Traditionally, the way painting was done in GTK+ was with the
"expose-event" handler, where you'd use GDK methods to do drawing on
your surface. In GTK+ 2.24, we added cairo support with gdk_cairo_create,
so you could paint your graphics with cairo.
Since then, we've added client-side windows, double buffering, the paint
clock, and various other enhancements, and the modern way to do drawing
is to connect to the "draw" signal on GtkWidget, which hands you a
cairo_t. To do double-buffering, the cairo_t we hand you is actually on
a secret surface, not the actual backing store of the window, and when
the draw handler completes we blit it into the main backing store
atomically.
The code to do this is with the APIs gdk_window_begin_paint_region,
which creates the temporary surface, and gdk_window_end_paint which
blits it back into the backing store. GTK+'s implementation of the
"draw" signal uses these APIs.
We've always sort-of supported people calling gdk_cairo_create
"outside" of a begin_paint / end_paint like old times, but then you're
not getting the benefit of double-buffering, and it's harder for GDK to
optimize.
Additionally, newer backends like Mir and Wayland can't actually support
this model, since they're based on double-buffering and swapping buffers
at various points in time. If we hand you a random cairo_t, we have no
idea when is a good time to swap.
Remove support for this.
This is technically a GDK API break: a warning is added in cases where
gdk_cairo_create is called outside of a paint cycle, and the returned
surface is a dummy that won't ever be composited back onto the main
surface. Testing with complex applications like Ardour didn't produce
any warnings.
2014-06-20 15:55:09 +00:00
|
|
|
|
}
|
|
|
|
|
|
2016-05-20 15:55:12 +00:00
|
|
|
|
static void
|
|
|
|
|
gdk_window_end_paint_internal (GdkWindow *window)
|
2000-03-28 01:24:44 +00:00
|
|
|
|
{
|
2013-04-29 16:40:10 +00:00
|
|
|
|
GdkWindowImplClass *impl_class;
|
2013-04-17 21:06:07 +00:00
|
|
|
|
cairo_t *cr;
|
2000-03-28 01:24:44 +00:00
|
|
|
|
|
2014-06-21 00:20:14 +00:00
|
|
|
|
if (window->current_paint.surface == NULL)
|
2013-04-29 14:25:55 +00:00
|
|
|
|
{
|
2016-06-07 15:40:43 +00:00
|
|
|
|
g_warning (G_STRLOC": no preceding call to gdk_window_begin_draw_frame(), see documentation");
|
2013-04-29 14:25:55 +00:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2013-04-29 16:40:10 +00:00
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
2007-01-25 14:24:53 +00:00
|
|
|
|
|
2013-04-29 16:40:10 +00:00
|
|
|
|
if (impl_class->end_paint)
|
|
|
|
|
impl_class->end_paint (window);
|
2000-03-28 01:24:44 +00:00
|
|
|
|
|
2014-06-21 00:20:14 +00:00
|
|
|
|
if (window->current_paint.surface_needs_composite)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
gdkwindow: Remove the internal cairo_surface used for out-of-band painting
Traditionally, the way painting was done in GTK+ was with the
"expose-event" handler, where you'd use GDK methods to do drawing on
your surface. In GTK+ 2.24, we added cairo support with gdk_cairo_create,
so you could paint your graphics with cairo.
Since then, we've added client-side windows, double buffering, the paint
clock, and various other enhancements, and the modern way to do drawing
is to connect to the "draw" signal on GtkWidget, which hands you a
cairo_t. To do double-buffering, the cairo_t we hand you is actually on
a secret surface, not the actual backing store of the window, and when
the draw handler completes we blit it into the main backing store
atomically.
The code to do this is with the APIs gdk_window_begin_paint_region,
which creates the temporary surface, and gdk_window_end_paint which
blits it back into the backing store. GTK+'s implementation of the
"draw" signal uses these APIs.
We've always sort-of supported people calling gdk_cairo_create
"outside" of a begin_paint / end_paint like old times, but then you're
not getting the benefit of double-buffering, and it's harder for GDK to
optimize.
Additionally, newer backends like Mir and Wayland can't actually support
this model, since they're based on double-buffering and swapping buffers
at various points in time. If we hand you a random cairo_t, we have no
idea when is a good time to swap.
Remove support for this.
This is technically a GDK API break: a warning is added in cases where
gdk_cairo_create is called outside of a paint cycle, and the returned
surface is a dummy that won't ever be composited back onto the main
surface. Testing with complex applications like Ardour didn't produce
any warnings.
2014-06-20 15:55:09 +00:00
|
|
|
|
cairo_surface_t *surface;
|
|
|
|
|
|
2016-11-22 19:03:14 +00:00
|
|
|
|
surface = gdk_window_ref_impl_surface (window);
|
|
|
|
|
cr = cairo_create (surface);
|
2014-10-09 08:45:44 +00:00
|
|
|
|
|
2016-11-22 19:03:14 +00:00
|
|
|
|
cairo_set_source_surface (cr, window->current_paint.surface, 0, 0);
|
|
|
|
|
gdk_cairo_region (cr, window->current_paint.region);
|
|
|
|
|
cairo_clip (cr);
|
2014-10-09 08:45:44 +00:00
|
|
|
|
|
2016-11-22 19:03:14 +00:00
|
|
|
|
cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
|
|
|
|
|
cairo_paint (cr);
|
2013-04-29 14:25:55 +00:00
|
|
|
|
|
2016-11-22 19:03:14 +00:00
|
|
|
|
cairo_destroy (cr);
|
2014-11-10 14:24:14 +00:00
|
|
|
|
|
2016-11-22 19:03:14 +00:00
|
|
|
|
cairo_surface_flush (surface);
|
|
|
|
|
cairo_surface_destroy (surface);
|
2013-04-29 14:25:55 +00:00
|
|
|
|
}
|
2013-04-17 21:06:07 +00:00
|
|
|
|
|
2014-06-21 00:20:14 +00:00
|
|
|
|
gdk_window_free_current_paint (window);
|
2000-03-28 01:24:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
2016-05-20 15:55:12 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_begin_draw_frame:
|
|
|
|
|
* @window: a #GdkWindow
|
2016-11-22 03:12:51 +00:00
|
|
|
|
* @context: (allow-none): the context used to draw the frame
|
2016-05-20 15:55:12 +00:00
|
|
|
|
* @region: a Cairo region
|
|
|
|
|
*
|
|
|
|
|
* Indicates that you are beginning the process of redrawing @region
|
2016-05-30 08:44:30 +00:00
|
|
|
|
* on @window, and provides you with a #GdkDrawingContext.
|
2016-05-20 15:55:12 +00:00
|
|
|
|
*
|
|
|
|
|
* If @window is a top level #GdkWindow, backed by a native window
|
|
|
|
|
* implementation, 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 surface for @window. Then, all
|
|
|
|
|
* drawing operations performed on @window will be diverted to the
|
|
|
|
|
* backing store. When you call gdk_window_end_frame(), the contents of
|
|
|
|
|
* the backing store will be copied to @window, making it visible
|
|
|
|
|
* on screen. Only the part of @window contained in @region will be
|
|
|
|
|
* modified; that is, 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_draw_frame(). If you draw to @window directly without
|
|
|
|
|
* calling gdk_window_begin_draw_frame(), the user may see flicker
|
|
|
|
|
* as individual drawing operations are performed in sequence.
|
|
|
|
|
*
|
|
|
|
|
* When using GTK+, the widget system automatically places calls to
|
|
|
|
|
* gdk_window_begin_draw_frame() and gdk_window_end_draw_frame() around
|
|
|
|
|
* emissions of the `GtkWidget::draw` signal. That is, if you’re
|
|
|
|
|
* drawing the contents of the widget yourself, you can assume that the
|
|
|
|
|
* widget has a cleared background, is already set as the clip region,
|
|
|
|
|
* and already has a backing store. Therefore in most cases, application
|
|
|
|
|
* code in GTK does not need to call gdk_window_begin_draw_frame()
|
|
|
|
|
* explicitly.
|
|
|
|
|
*
|
2016-05-30 08:44:30 +00:00
|
|
|
|
* Returns: (transfer none): a #GdkDrawingContext context that should be
|
|
|
|
|
* used to draw the contents of the window; the returned context is owned
|
|
|
|
|
* by GDK.
|
2016-05-20 15:55:12 +00:00
|
|
|
|
*
|
|
|
|
|
* Since: 3.22
|
|
|
|
|
*/
|
2016-05-30 08:44:30 +00:00
|
|
|
|
GdkDrawingContext *
|
2016-05-20 15:55:12 +00:00
|
|
|
|
gdk_window_begin_draw_frame (GdkWindow *window,
|
2016-12-01 00:38:20 +00:00
|
|
|
|
GdkDrawContext *draw_context,
|
2016-05-20 15:55:12 +00:00
|
|
|
|
const cairo_region_t *region)
|
|
|
|
|
{
|
2016-05-30 08:44:30 +00:00
|
|
|
|
GdkDrawingContext *context;
|
2016-11-23 04:54:50 +00:00
|
|
|
|
cairo_region_t *real_region;
|
2016-05-20 15:55:12 +00:00
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
2016-11-24 03:32:26 +00:00
|
|
|
|
g_return_val_if_fail (gdk_window_has_native (window), NULL);
|
|
|
|
|
g_return_val_if_fail (gdk_window_is_toplevel (window), NULL);
|
2016-11-23 04:54:50 +00:00
|
|
|
|
g_return_val_if_fail (region != NULL, NULL);
|
2016-12-01 00:38:20 +00:00
|
|
|
|
if (draw_context != NULL)
|
2016-11-22 03:12:51 +00:00
|
|
|
|
{
|
2016-12-01 00:38:20 +00:00
|
|
|
|
g_return_val_if_fail (GDK_IS_DRAW_CONTEXT (draw_context), NULL);
|
|
|
|
|
g_return_val_if_fail (gdk_draw_context_get_window (draw_context) == window, NULL);
|
2016-11-22 03:12:51 +00:00
|
|
|
|
}
|
2016-05-20 15:55:12 +00:00
|
|
|
|
|
2016-11-23 04:54:50 +00:00
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
|
return NULL;
|
|
|
|
|
|
2016-05-30 08:44:30 +00:00
|
|
|
|
if (window->drawing_context != NULL)
|
|
|
|
|
{
|
|
|
|
|
g_critical ("The window %p already has a drawing context. You cannot "
|
|
|
|
|
"call gdk_window_begin_draw_frame() without calling "
|
|
|
|
|
"gdk_window_end_draw_frame() first.", window);
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
2016-11-23 04:54:50 +00:00
|
|
|
|
real_region = cairo_region_copy (region);
|
|
|
|
|
|
2016-12-01 00:38:20 +00:00
|
|
|
|
if (draw_context)
|
|
|
|
|
gdk_draw_context_begin_frame (draw_context, real_region);
|
2016-11-23 04:54:50 +00:00
|
|
|
|
else
|
|
|
|
|
gdk_window_begin_paint_internal (window, real_region);
|
|
|
|
|
|
2016-11-30 14:52:22 +00:00
|
|
|
|
context = g_object_new (GDK_TYPE_DRAWING_CONTEXT,
|
|
|
|
|
"window", window,
|
2016-12-01 00:38:20 +00:00
|
|
|
|
"paint-context", draw_context,
|
2016-11-23 04:54:50 +00:00
|
|
|
|
"clip", real_region,
|
2016-11-30 14:52:22 +00:00
|
|
|
|
NULL);
|
2016-05-20 15:55:12 +00:00
|
|
|
|
|
2016-05-30 08:44:30 +00:00
|
|
|
|
/* Do not take a reference, to avoid creating cycles */
|
|
|
|
|
window->drawing_context = context;
|
2016-05-20 15:55:12 +00:00
|
|
|
|
|
2016-11-23 04:54:50 +00:00
|
|
|
|
cairo_region_destroy (real_region);
|
2016-11-20 19:42:37 +00:00
|
|
|
|
|
2016-05-30 08:44:30 +00:00
|
|
|
|
return context;
|
2016-05-20 15:55:12 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_end_draw_frame:
|
|
|
|
|
* @window: a #GdkWindow
|
2016-05-30 08:44:30 +00:00
|
|
|
|
* @context: the #GdkDrawingContext created by gdk_window_begin_draw_frame()
|
2016-05-20 15:55:12 +00:00
|
|
|
|
*
|
|
|
|
|
* Indicates that the drawing of the contents of @window started with
|
|
|
|
|
* gdk_window_begin_frame() has been completed.
|
|
|
|
|
*
|
2016-05-30 08:44:30 +00:00
|
|
|
|
* This function will take care of destroying the #GdkDrawingContext.
|
2016-05-20 15:55:12 +00:00
|
|
|
|
*
|
|
|
|
|
* It is an error to call this function without a matching
|
|
|
|
|
* gdk_window_begin_frame() first.
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.22
|
|
|
|
|
*/
|
|
|
|
|
void
|
2016-05-30 08:44:30 +00:00
|
|
|
|
gdk_window_end_draw_frame (GdkWindow *window,
|
|
|
|
|
GdkDrawingContext *context)
|
2016-05-20 15:55:12 +00:00
|
|
|
|
{
|
2016-12-01 00:38:20 +00:00
|
|
|
|
GdkDrawContext *paint_context;
|
2016-11-23 04:54:50 +00:00
|
|
|
|
|
2016-05-30 08:44:30 +00:00
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
g_return_if_fail (GDK_IS_DRAWING_CONTEXT (context));
|
2016-11-23 04:54:50 +00:00
|
|
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (window->drawing_context == NULL)
|
|
|
|
|
{
|
|
|
|
|
g_critical ("The window %p has no drawing context. You must call "
|
|
|
|
|
"gdk_window_begin_draw_frame() before calling "
|
|
|
|
|
"gdk_window_end_draw_frame().", window);
|
|
|
|
|
return;
|
|
|
|
|
}
|
2016-11-20 06:27:00 +00:00
|
|
|
|
g_return_if_fail (window->drawing_context == context);
|
2016-05-30 08:44:30 +00:00
|
|
|
|
|
2016-11-23 04:54:50 +00:00
|
|
|
|
paint_context = gdk_drawing_context_get_paint_context (context);
|
|
|
|
|
if (paint_context)
|
|
|
|
|
{
|
2017-02-27 14:33:45 +00:00
|
|
|
|
cairo_region_t *clip = gdk_drawing_context_get_clip (context);
|
|
|
|
|
|
2016-12-01 00:38:20 +00:00
|
|
|
|
gdk_draw_context_end_frame (paint_context,
|
2017-02-27 14:33:45 +00:00
|
|
|
|
clip,
|
2016-12-01 00:38:20 +00:00
|
|
|
|
window->active_update_area);
|
2017-02-27 14:33:45 +00:00
|
|
|
|
|
|
|
|
|
cairo_region_destroy (clip);
|
2016-11-23 04:54:50 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gdk_window_end_paint_internal (window);
|
|
|
|
|
}
|
2016-05-20 15:55:12 +00:00
|
|
|
|
|
2016-05-30 08:44:30 +00:00
|
|
|
|
window->drawing_context = NULL;
|
2016-11-20 06:27:00 +00:00
|
|
|
|
|
|
|
|
|
g_object_unref (context);
|
2016-05-30 08:44:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
2016-06-07 15:52:50 +00:00
|
|
|
|
/*< private >
|
|
|
|
|
* gdk_window_get_current_paint_region:
|
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Retrieves a copy of the current paint region.
|
|
|
|
|
*
|
|
|
|
|
* Returns: (transfer full): a Cairo region
|
|
|
|
|
*/
|
|
|
|
|
cairo_region_t *
|
|
|
|
|
gdk_window_get_current_paint_region (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
cairo_region_t *region;
|
|
|
|
|
|
|
|
|
|
if (window->impl_window->current_paint.region != NULL)
|
|
|
|
|
{
|
|
|
|
|
region = cairo_region_copy (window->impl_window->current_paint.region);
|
|
|
|
|
cairo_region_translate (region, -window->abs_x, -window->abs_y);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
region = cairo_region_copy (window->clip_region);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return region;
|
|
|
|
|
}
|
|
|
|
|
|
2016-05-30 08:44:30 +00:00
|
|
|
|
/*< private >
|
|
|
|
|
* gdk_window_get_drawing_context:
|
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Retrieves the #GdkDrawingContext associated to @window by
|
|
|
|
|
* gdk_window_begin_draw_frame().
|
|
|
|
|
*
|
|
|
|
|
* Returns: (transfer none) (nullable): a #GdkDrawingContext, if any is set
|
|
|
|
|
*/
|
|
|
|
|
GdkDrawingContext *
|
|
|
|
|
gdk_window_get_drawing_context (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
|
|
return window->drawing_context;
|
2016-05-20 15:55:12 +00:00
|
|
|
|
}
|
|
|
|
|
|
2010-10-06 17:31:03 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_clip_region:
|
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Computes the region of a window that potentially can be written
|
|
|
|
|
* to by drawing primitives. This region may not take into account
|
|
|
|
|
* other factors such as if the window is obscured by other windows,
|
|
|
|
|
* but no area outside of this region will be affected by drawing
|
|
|
|
|
* primitives.
|
|
|
|
|
*
|
|
|
|
|
* Returns: a #cairo_region_t. This must be freed with cairo_region_destroy()
|
|
|
|
|
* when you are done.
|
|
|
|
|
**/
|
|
|
|
|
cairo_region_t*
|
|
|
|
|
gdk_window_get_clip_region (GdkWindow *window)
|
2000-12-15 01:46:41 +00:00
|
|
|
|
{
|
2010-06-28 12:54:37 +00:00
|
|
|
|
cairo_region_t *result;
|
2000-12-15 01:46:41 +00:00
|
|
|
|
|
2010-10-06 17:31:03 +00:00
|
|
|
|
g_return_val_if_fail (GDK_WINDOW (window), NULL);
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
result = cairo_region_copy (window->clip_region);
|
2000-12-15 01:46:41 +00:00
|
|
|
|
|
2014-06-21 00:20:14 +00:00
|
|
|
|
if (window->current_paint.region != NULL)
|
|
|
|
|
cairo_region_intersect (result, window->current_paint.region);
|
2000-12-15 01:46:41 +00:00
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
2010-10-06 21:42:45 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_visible_region:
|
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Computes the region of the @window that is potentially visible.
|
|
|
|
|
* This does not necessarily take into account if the window is
|
|
|
|
|
* obscured by other windows, but no area outside of this region
|
|
|
|
|
* is visible.
|
|
|
|
|
*
|
|
|
|
|
* Returns: a #cairo_region_t. This must be freed with cairo_region_destroy()
|
|
|
|
|
* when you are done.
|
|
|
|
|
**/
|
|
|
|
|
cairo_region_t *
|
|
|
|
|
gdk_window_get_visible_region (GdkWindow *window)
|
2009-07-20 21:18:41 +00:00
|
|
|
|
{
|
2010-10-06 21:42:45 +00:00
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return cairo_region_copy (window->clip_region);
|
2009-07-20 21:18:41 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-04-29 14:25:55 +00:00
|
|
|
|
static void
|
2014-06-21 14:33:40 +00:00
|
|
|
|
gdk_window_clear_backing_region (GdkWindow *window)
|
2004-02-18 17:03:46 +00:00
|
|
|
|
{
|
2010-07-25 16:13:19 +00:00
|
|
|
|
cairo_t *cr;
|
2004-02-18 17:03:46 +00:00
|
|
|
|
|
gdkwindow: Remove the internal cairo_surface used for out-of-band painting
Traditionally, the way painting was done in GTK+ was with the
"expose-event" handler, where you'd use GDK methods to do drawing on
your surface. In GTK+ 2.24, we added cairo support with gdk_cairo_create,
so you could paint your graphics with cairo.
Since then, we've added client-side windows, double buffering, the paint
clock, and various other enhancements, and the modern way to do drawing
is to connect to the "draw" signal on GtkWidget, which hands you a
cairo_t. To do double-buffering, the cairo_t we hand you is actually on
a secret surface, not the actual backing store of the window, and when
the draw handler completes we blit it into the main backing store
atomically.
The code to do this is with the APIs gdk_window_begin_paint_region,
which creates the temporary surface, and gdk_window_end_paint which
blits it back into the backing store. GTK+'s implementation of the
"draw" signal uses these APIs.
We've always sort-of supported people calling gdk_cairo_create
"outside" of a begin_paint / end_paint like old times, but then you're
not getting the benefit of double-buffering, and it's harder for GDK to
optimize.
Additionally, newer backends like Mir and Wayland can't actually support
this model, since they're based on double-buffering and swapping buffers
at various points in time. If we hand you a random cairo_t, we have no
idea when is a good time to swap.
Remove support for this.
This is technically a GDK API break: a warning is added in cases where
gdk_cairo_create is called outside of a paint cycle, and the returned
surface is a dummy that won't ever be composited back onto the main
surface. Testing with complex applications like Ardour didn't produce
any warnings.
2014-06-20 15:55:09 +00:00
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
2013-04-29 14:25:55 +00:00
|
|
|
|
return;
|
|
|
|
|
|
2014-06-21 00:20:14 +00:00
|
|
|
|
cr = cairo_create (window->current_paint.surface);
|
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
|
|
|
|
|
2016-10-06 21:55:53 +00:00
|
|
|
|
cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
|
2014-06-21 14:33:40 +00:00
|
|
|
|
gdk_cairo_region (cr, window->current_paint.region);
|
2010-07-25 16:13:19 +00:00
|
|
|
|
cairo_fill (cr);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-07-25 16:13:19 +00:00
|
|
|
|
cairo_destroy (cr);
|
2000-03-28 01:24:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
2014-06-21 00:20:14 +00:00
|
|
|
|
/* This returns either the current working surface on the paint stack
|
|
|
|
|
* or the actual impl surface of the window. This should not be used
|
|
|
|
|
* from very many places: be careful! */
|
|
|
|
|
static cairo_surface_t *
|
2014-06-21 00:47:59 +00:00
|
|
|
|
ref_window_surface (GdkWindow *window)
|
2014-06-21 00:20:14 +00:00
|
|
|
|
{
|
|
|
|
|
if (window->impl_window->current_paint.surface)
|
|
|
|
|
return cairo_surface_reference (window->impl_window->current_paint.surface);
|
|
|
|
|
else
|
|
|
|
|
return gdk_window_ref_impl_surface (window);
|
|
|
|
|
}
|
|
|
|
|
|
gdkwindow: Remove the internal cairo_surface used for out-of-band painting
Traditionally, the way painting was done in GTK+ was with the
"expose-event" handler, where you'd use GDK methods to do drawing on
your surface. In GTK+ 2.24, we added cairo support with gdk_cairo_create,
so you could paint your graphics with cairo.
Since then, we've added client-side windows, double buffering, the paint
clock, and various other enhancements, and the modern way to do drawing
is to connect to the "draw" signal on GtkWidget, which hands you a
cairo_t. To do double-buffering, the cairo_t we hand you is actually on
a secret surface, not the actual backing store of the window, and when
the draw handler completes we blit it into the main backing store
atomically.
The code to do this is with the APIs gdk_window_begin_paint_region,
which creates the temporary surface, and gdk_window_end_paint which
blits it back into the backing store. GTK+'s implementation of the
"draw" signal uses these APIs.
We've always sort-of supported people calling gdk_cairo_create
"outside" of a begin_paint / end_paint like old times, but then you're
not getting the benefit of double-buffering, and it's harder for GDK to
optimize.
Additionally, newer backends like Mir and Wayland can't actually support
this model, since they're based on double-buffering and swapping buffers
at various points in time. If we hand you a random cairo_t, we have no
idea when is a good time to swap.
Remove support for this.
This is technically a GDK API break: a warning is added in cases where
gdk_cairo_create is called outside of a paint cycle, and the returned
surface is a dummy that won't ever be composited back onto the main
surface. Testing with complex applications like Ardour didn't produce
any warnings.
2014-06-20 15:55:09 +00:00
|
|
|
|
/* This is used in places like gdk_cairo_set_source_window and
|
|
|
|
|
* other places to take "screenshots" of windows. Thus, we allow
|
|
|
|
|
* it to be used outside of a begin_paint / end_paint. */
|
2010-11-22 16:23:31 +00:00
|
|
|
|
cairo_surface_t *
|
|
|
|
|
_gdk_window_ref_cairo_surface (GdkWindow *window)
|
2005-02-03 23:29:02 +00:00
|
|
|
|
{
|
2005-03-17 01:54:40 +00:00
|
|
|
|
cairo_surface_t *surface;
|
2005-02-03 23:29:02 +00:00
|
|
|
|
|
2010-11-22 16:23:31 +00:00
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
|
2014-06-21 00:47:59 +00:00
|
|
|
|
surface = ref_window_surface (window);
|
2005-03-17 01:54:40 +00:00
|
|
|
|
|
2014-06-21 00:46:49 +00:00
|
|
|
|
if (gdk_window_has_impl (window))
|
|
|
|
|
{
|
|
|
|
|
return surface;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2014-06-21 00:47:59 +00:00
|
|
|
|
cairo_surface_t *subsurface;
|
|
|
|
|
subsurface = cairo_surface_create_for_rectangle (surface,
|
|
|
|
|
window->abs_x,
|
|
|
|
|
window->abs_y,
|
|
|
|
|
window->width,
|
|
|
|
|
window->height);
|
|
|
|
|
cairo_surface_destroy (surface);
|
|
|
|
|
return subsurface;
|
2014-06-21 00:46:49 +00:00
|
|
|
|
}
|
2005-02-03 23:29:02 +00:00
|
|
|
|
}
|
|
|
|
|
|
2000-03-28 01:24:44 +00:00
|
|
|
|
/* Code for dirty-region queueing
|
|
|
|
|
*/
|
|
|
|
|
static GSList *update_windows = NULL;
|
|
|
|
|
|
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)
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
GdkWindow *parent = window->parent;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
2013-12-18 11:23:28 +00:00
|
|
|
|
/* Check whether "window" is already in "update_windows" list.
|
|
|
|
|
* It could be added during execution of gtk_widget_destroy() when
|
|
|
|
|
* setting focus widget to NULL and redrawing old focus widget.
|
|
|
|
|
* See bug 711552.
|
|
|
|
|
*/
|
|
|
|
|
tmp = g_slist_find (update_windows, window);
|
|
|
|
|
if (tmp != NULL)
|
|
|
|
|
return;
|
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
for (tmp = update_windows; tmp; tmp = tmp->next)
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
GdkWindow *parent = window->parent;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
|
|
/* 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
|
|
|
|
|
*/
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (parent == GDK_WINDOW (tmp->data)->parent)
|
2009-06-01 10:04:36 +00:00
|
|
|
|
{
|
2017-11-06 00:28:37 +00:00
|
|
|
|
if (parent != NULL)
|
|
|
|
|
{
|
|
|
|
|
gint index = g_list_index (parent->children, window);
|
|
|
|
|
for (; tmp && parent == GDK_WINDOW (tmp->data)->parent; tmp = tmp->next)
|
|
|
|
|
{
|
|
|
|
|
gint sibling_index = g_list_index (parent->children, tmp->data);
|
|
|
|
|
if (index > sibling_index)
|
|
|
|
|
break;
|
|
|
|
|
prev = tmp;
|
|
|
|
|
}
|
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
/* here, tmp got advanced past all lower stacked siblings */
|
2013-12-12 14:02:19 +00:00
|
|
|
|
tmp = g_slist_prepend (tmp, g_object_ref (window));
|
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 "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
|
|
|
|
{
|
2013-12-12 14:02:19 +00:00
|
|
|
|
tmp = g_slist_prepend (tmp, g_object_ref (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
|
|
|
|
{
|
2013-12-12 14:02:19 +00:00
|
|
|
|
tmp = g_slist_append (tmp, g_object_ref (window));
|
2009-06-01 10:04:36 +00:00
|
|
|
|
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
|
|
|
|
|
*/
|
2013-12-12 14:02:19 +00:00
|
|
|
|
update_windows = g_slist_prepend (update_windows, g_object_ref (window));
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
gdk_window_remove_update_window (GdkWindow *window)
|
|
|
|
|
{
|
2013-12-12 14:02:19 +00:00
|
|
|
|
GSList *link;
|
|
|
|
|
|
|
|
|
|
link = g_slist_find (update_windows, window);
|
|
|
|
|
if (link != NULL)
|
|
|
|
|
{
|
|
|
|
|
update_windows = g_slist_delete_link (update_windows, link);
|
|
|
|
|
g_object_unref (window);
|
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
2007-09-12 17:13:24 +00:00
|
|
|
|
static gboolean
|
|
|
|
|
gdk_window_is_toplevel_frozen (GdkWindow *window)
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
GdkWindow *toplevel;
|
2007-09-12 17:13:24 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
toplevel = gdk_window_get_toplevel (window);
|
2007-09-12 17:13:24 +00:00
|
|
|
|
|
|
|
|
|
return toplevel->update_and_descendants_freeze_count > 0;
|
|
|
|
|
}
|
|
|
|
|
|
2004-08-26 14:09:08 +00:00
|
|
|
|
static void
|
|
|
|
|
gdk_window_schedule_update (GdkWindow *window)
|
|
|
|
|
{
|
2013-01-30 20:09:44 +00:00
|
|
|
|
GdkFrameClock *frame_clock;
|
|
|
|
|
|
2007-09-12 17:13:24 +00:00
|
|
|
|
if (window &&
|
2010-11-22 23:55:39 +00:00
|
|
|
|
(window->update_freeze_count ||
|
2007-09-12 17:13:24 +00:00
|
|
|
|
gdk_window_is_toplevel_frozen (window)))
|
2004-08-26 14:09:08 +00:00
|
|
|
|
return;
|
|
|
|
|
|
2013-01-30 20:09:44 +00:00
|
|
|
|
/* If there's no frame clock (a foreign window), then the invalid
|
|
|
|
|
* region will just stick around unless gdk_window_process_updates()
|
|
|
|
|
* is called. */
|
|
|
|
|
frame_clock = gdk_window_get_frame_clock (window);
|
|
|
|
|
if (frame_clock)
|
|
|
|
|
gdk_frame_clock_request_phase (gdk_window_get_frame_clock (window),
|
|
|
|
|
GDK_FRAME_CLOCK_PHASE_PAINT);
|
2004-08-26 14:09:08 +00:00
|
|
|
|
}
|
|
|
|
|
|
2016-11-22 20:23:21 +00:00
|
|
|
|
void
|
|
|
|
|
_gdk_window_process_updates_recurse (GdkWindow *window,
|
|
|
|
|
cairo_region_t *expose_region)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
2011-12-01 12:42:09 +00:00
|
|
|
|
cairo_region_t *clipped_expose_region;
|
2016-11-22 20:23:21 +00:00
|
|
|
|
GdkEvent event;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2014-06-23 20:12:45 +00:00
|
|
|
|
if (window->destroyed)
|
|
|
|
|
return;
|
|
|
|
|
|
2013-06-25 08:07:49 +00:00
|
|
|
|
clipped_expose_region = cairo_region_copy (expose_region);
|
2014-06-23 20:15:48 +00:00
|
|
|
|
|
2013-06-25 08:07:49 +00:00
|
|
|
|
cairo_region_intersect (clipped_expose_region, window->clip_region);
|
|
|
|
|
|
2014-06-23 20:12:45 +00:00
|
|
|
|
if (cairo_region_is_empty (clipped_expose_region))
|
2013-06-25 08:07:49 +00:00
|
|
|
|
goto out;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2013-04-17 14:36:52 +00:00
|
|
|
|
/* Paint the window before the children, clipped to the window region */
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2016-11-22 20:23:21 +00:00
|
|
|
|
event.expose.type = GDK_EXPOSE;
|
|
|
|
|
event.expose.window = window; /* we already hold a ref */
|
|
|
|
|
event.expose.send_event = FALSE;
|
|
|
|
|
event.expose.count = 0;
|
|
|
|
|
event.expose.region = clipped_expose_region;
|
|
|
|
|
cairo_region_get_extents (clipped_expose_region, &event.expose.area);
|
2011-12-01 12:42:09 +00:00
|
|
|
|
|
2016-11-22 20:23:21 +00:00
|
|
|
|
_gdk_event_emit (&event);
|
2013-06-25 08:07:49 +00:00
|
|
|
|
|
|
|
|
|
out:
|
|
|
|
|
cairo_region_destroy (clipped_expose_region);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-06-25 08:07:49 +00:00
|
|
|
|
|
2013-05-15 08:55:59 +00:00
|
|
|
|
static void
|
|
|
|
|
gdk_window_update_native_shapes (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
if (should_apply_clip_as_shape (window))
|
|
|
|
|
apply_clip_as_shape (window);
|
|
|
|
|
}
|
|
|
|
|
|
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.
|
|
|
|
|
*/
|
2000-03-28 01:24:44 +00:00
|
|
|
|
static void
|
|
|
|
|
gdk_window_process_updates_internal (GdkWindow *window)
|
|
|
|
|
{
|
2010-11-22 19:42:00 +00:00
|
|
|
|
GdkWindowImplClass *impl_class;
|
2013-05-15 08:55:59 +00:00
|
|
|
|
GdkWindow *toplevel;
|
|
|
|
|
|
|
|
|
|
toplevel = gdk_window_get_toplevel (window);
|
|
|
|
|
if (toplevel->geometry_dirty)
|
|
|
|
|
{
|
|
|
|
|
gdk_window_update_native_shapes (toplevel);
|
|
|
|
|
toplevel->geometry_dirty = FALSE;
|
|
|
|
|
}
|
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);
|
|
|
|
|
|
2013-04-17 21:06:07 +00:00
|
|
|
|
window->in_update = TRUE;
|
|
|
|
|
|
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.
|
|
|
|
|
*/
|
2013-04-17 12:02:32 +00:00
|
|
|
|
if (window->update_area)
|
2000-05-05 15:57:48 +00:00
|
|
|
|
{
|
2014-10-09 08:09:51 +00:00
|
|
|
|
g_assert (window->active_update_area == NULL); /* No reentrancy */
|
|
|
|
|
|
|
|
|
|
window->active_update_area = window->update_area;
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->update_area = NULL;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-12-02 09:59:37 +00:00
|
|
|
|
if (gdk_window_is_viewable (window))
|
2000-05-05 15:57:48 +00:00
|
|
|
|
{
|
2010-06-28 12:54:37 +00:00
|
|
|
|
cairo_region_t *expose_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
|
|
|
|
|
2014-10-09 08:09:51 +00:00
|
|
|
|
expose_region = cairo_region_copy (window->active_update_area);
|
|
|
|
|
|
2016-05-01 03:15:20 +00:00
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
|
|
|
|
|
2013-04-17 21:06:07 +00:00
|
|
|
|
/* Clip to part visible in impl window */
|
2014-10-09 08:09:51 +00:00
|
|
|
|
cairo_region_intersect (expose_region, window->clip_region);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2014-06-21 22:43:28 +00:00
|
|
|
|
if (impl_class->queue_antiexpose)
|
2014-10-09 08:09:51 +00:00
|
|
|
|
impl_class->queue_antiexpose (window, expose_region);
|
2014-06-21 22:43:28 +00:00
|
|
|
|
|
2010-12-13 18:30:05 +00:00
|
|
|
|
impl_class->process_updates_recurse (window, expose_region);
|
2014-06-21 22:03:56 +00:00
|
|
|
|
|
2014-10-09 08:09:51 +00:00
|
|
|
|
gdk_window_append_old_updated_area (window, window->active_update_area);
|
2014-10-15 02:46:26 +00:00
|
|
|
|
|
|
|
|
|
cairo_region_destroy (expose_region);
|
2014-10-09 08:09:51 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cairo_region_destroy (window->active_update_area);
|
|
|
|
|
window->active_update_area = NULL;
|
2000-03-28 01:24:44 +00:00
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2013-04-17 21:06:07 +00:00
|
|
|
|
window->in_update = FALSE;
|
|
|
|
|
|
2009-08-20 15:09:08 +00:00
|
|
|
|
g_object_unref (window);
|
2000-03-28 01:24:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
2016-04-30 16:46:22 +00:00
|
|
|
|
static void
|
2016-11-23 18:32:27 +00:00
|
|
|
|
gdk_window_paint_on_clock (GdkFrameClock *clock,
|
|
|
|
|
void *data)
|
2013-06-26 08:03:51 +00:00
|
|
|
|
{
|
2016-11-23 18:32:27 +00:00
|
|
|
|
GdkWindow *window;
|
2013-06-26 08:03:51 +00:00
|
|
|
|
|
2016-11-23 18:32:27 +00:00
|
|
|
|
window = GDK_WINDOW (data);
|
2000-03-28 01:24:44 +00:00
|
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
2016-11-23 18:32:27 +00:00
|
|
|
|
g_return_if_fail (window->impl_window == window);
|
2008-10-21 21:42:39 +00:00
|
|
|
|
|
2009-08-20 15:09:08 +00:00
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
|
return;
|
|
|
|
|
|
2016-11-23 18:32:27 +00:00
|
|
|
|
g_object_ref (window);
|
2009-09-14 11:24:55 +00:00
|
|
|
|
|
2016-11-23 18:32:27 +00:00
|
|
|
|
if (window->update_area &&
|
|
|
|
|
!window->update_freeze_count &&
|
|
|
|
|
!gdk_window_is_toplevel_frozen (window) &&
|
2000-03-28 01:24:44 +00:00
|
|
|
|
|
2016-11-23 18:32:27 +00:00
|
|
|
|
/* Don't recurse into process_updates_internal, we'll
|
|
|
|
|
* do the update later when idle instead. */
|
|
|
|
|
!window->in_update)
|
2000-03-28 01:24:44 +00:00
|
|
|
|
{
|
2016-11-23 18:32:27 +00:00
|
|
|
|
gdk_window_process_updates_internal (window);
|
|
|
|
|
gdk_window_remove_update_window (window);
|
2000-03-28 01:24:44 +00:00
|
|
|
|
}
|
2009-08-20 15:09:08 +00:00
|
|
|
|
|
2016-11-23 18:32:27 +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,
|
2013-04-19 15:40:58 +00:00
|
|
|
|
gboolean invalidate_children)
|
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;
|
2010-06-28 12:54:37 +00:00
|
|
|
|
cairo_region_t *region;
|
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
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->input_only || !window->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;
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window_rect.width = window->width;
|
|
|
|
|
window_rect.height = window->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
|
|
|
|
|
2010-06-28 12:44:12 +00:00
|
|
|
|
region = cairo_region_create_rectangle (rect);
|
2013-04-19 15:40:58 +00:00
|
|
|
|
gdk_window_invalidate_region_full (window, region, invalidate_children);
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_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)
|
|
|
|
|
{
|
2013-04-19 15:40:58 +00:00
|
|
|
|
gdk_window_invalidate_rect_full (window, rect, invalidate_children);
|
2009-11-04 13:03:04 +00:00
|
|
|
|
}
|
|
|
|
|
|
2009-09-14 11:28:38 +00:00
|
|
|
|
static void
|
2010-11-22 23:55:39 +00:00
|
|
|
|
impl_window_add_update_area (GdkWindow *impl_window,
|
2010-06-28 12:54:37 +00:00
|
|
|
|
cairo_region_t *region)
|
2009-09-14 11:28:38 +00:00
|
|
|
|
{
|
|
|
|
|
if (impl_window->update_area)
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_region_union (impl_window->update_area, region);
|
2009-09-14 11:28:38 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
gdk_window_add_update_window (impl_window);
|
2010-06-28 12:44:12 +00:00
|
|
|
|
impl_window->update_area = cairo_region_copy (region);
|
2010-11-22 23:55:39 +00:00
|
|
|
|
gdk_window_schedule_update (impl_window);
|
2009-09-14 11:28:38 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-04-19 15:40:58 +00:00
|
|
|
|
static void
|
|
|
|
|
gdk_window_invalidate_maybe_recurse_full (GdkWindow *window,
|
|
|
|
|
const cairo_region_t *region,
|
2010-10-01 13:10:52 +00:00
|
|
|
|
GdkWindowChildFunc child_func,
|
|
|
|
|
gpointer user_data)
|
2000-03-28 01:24:44 +00:00
|
|
|
|
{
|
2010-06-28 12:54:37 +00:00
|
|
|
|
cairo_region_t *visible_region;
|
2013-04-20 23:27:07 +00:00
|
|
|
|
cairo_rectangle_int_t r;
|
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
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->input_only ||
|
|
|
|
|
!window->viewable ||
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_region_is_empty (region) ||
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->window_type == GDK_WINDOW_ROOT)
|
2000-03-28 01:24:44 +00:00
|
|
|
|
return;
|
|
|
|
|
|
2013-04-20 23:27:07 +00:00
|
|
|
|
r.x = 0;
|
|
|
|
|
r.y = 0;
|
|
|
|
|
|
|
|
|
|
visible_region = cairo_region_copy (region);
|
2000-03-28 01:24:44 +00:00
|
|
|
|
|
2013-04-20 23:27:07 +00:00
|
|
|
|
while (window != NULL &&
|
|
|
|
|
!cairo_region_is_empty (visible_region))
|
2000-03-28 01:24:44 +00:00
|
|
|
|
{
|
2013-04-20 23:27:07 +00:00
|
|
|
|
r.width = window->width;
|
|
|
|
|
r.height = window->height;
|
|
|
|
|
cairo_region_intersect_rectangle (visible_region, &r);
|
2009-11-04 13:03:04 +00:00
|
|
|
|
|
2013-04-20 23:27:07 +00:00
|
|
|
|
if (gdk_window_has_impl (window))
|
|
|
|
|
{
|
|
|
|
|
impl_window_add_update_area (window, visible_region);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
cairo_region_translate (visible_region,
|
|
|
|
|
window->x, window->y);
|
|
|
|
|
window = window->parent;
|
|
|
|
|
}
|
2000-03-28 01:24:44 +00:00
|
|
|
|
}
|
2009-05-27 15:08:09 +00:00
|
|
|
|
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_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
|
2010-06-28 12:54:37 +00:00
|
|
|
|
* @region: a #cairo_region_t
|
2011-05-03 07:30:49 +00:00
|
|
|
|
* @child_func: (scope call) (allow-none): function to use to decide if to
|
|
|
|
|
* recurse to a child, %NULL means never recurse.
|
2009-11-04 13:03:04 +00:00
|
|
|
|
* @user_data: data passed to @child_func
|
|
|
|
|
*
|
|
|
|
|
* Adds @region to the update area for @window. The update area is the
|
2016-11-24 17:31:11 +00:00
|
|
|
|
* region that needs to be redrawn, or “dirty region.”
|
2009-11-04 13:03:04 +00:00
|
|
|
|
*
|
2016-11-24 14:26:15 +00:00
|
|
|
|
* GDK will process all updates whenever the frame clock schedules a redraw,
|
|
|
|
|
* so there’s no need to do forces redraws manually, you just need to
|
2009-11-04 13:03:04 +00:00
|
|
|
|
* 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.
|
2014-05-17 03:12:51 +00:00
|
|
|
|
* Only children for which @child_func returns #TRUE will have the area
|
2009-11-04 13:03:04 +00:00
|
|
|
|
* invalidated.
|
|
|
|
|
**/
|
|
|
|
|
void
|
2010-10-01 13:10:52 +00:00
|
|
|
|
gdk_window_invalidate_maybe_recurse (GdkWindow *window,
|
2010-06-28 12:54:37 +00:00
|
|
|
|
const cairo_region_t *region,
|
2010-10-01 13:10:52 +00:00
|
|
|
|
GdkWindowChildFunc child_func,
|
|
|
|
|
gpointer user_data)
|
2009-11-04 13:03:04 +00:00
|
|
|
|
{
|
2013-04-19 15:40:58 +00:00
|
|
|
|
gdk_window_invalidate_maybe_recurse_full (window, region,
|
2009-11-04 13:03:04 +00:00
|
|
|
|
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,
|
2010-06-28 12:54:37 +00:00
|
|
|
|
const cairo_region_t *region,
|
2013-04-19 15:40:58 +00:00
|
|
|
|
gboolean invalidate_children)
|
2009-11-04 13:03:04 +00:00
|
|
|
|
{
|
2013-04-19 15:40:58 +00:00
|
|
|
|
gdk_window_invalidate_maybe_recurse_full (window, region,
|
2009-11-04 13:03:04 +00:00
|
|
|
|
invalidate_children ?
|
|
|
|
|
true_predicate : (gboolean (*) (GdkWindow *, gpointer))NULL,
|
|
|
|
|
NULL);
|
|
|
|
|
}
|
|
|
|
|
|
2001-11-04 22:57:03 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_invalidate_region:
|
|
|
|
|
* @window: a #GdkWindow
|
2010-06-28 12:54:37 +00:00
|
|
|
|
* @region: a #cairo_region_t
|
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
|
2016-11-24 17:31:11 +00:00
|
|
|
|
* region that needs to be redrawn, or “dirty region.”
|
2001-11-04 22:57:03 +00:00
|
|
|
|
*
|
2016-11-24 14:26:15 +00:00
|
|
|
|
* GDK will process all updates whenever the frame clock schedules a redraw,
|
|
|
|
|
* so there’s no need to do forces redraws manually, you just need to
|
2001-11-04 22:57:03 +00:00
|
|
|
|
* 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,
|
2010-06-28 12:54:37 +00:00
|
|
|
|
const cairo_region_t *region,
|
2008-01-14 14:02:12 +00:00
|
|
|
|
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
|
2010-06-28 12:54:37 +00:00
|
|
|
|
* @region: a #cairo_region_t
|
2008-07-18 13:03:42 +00:00
|
|
|
|
*
|
2016-11-24 17:31:11 +00:00
|
|
|
|
* Adds @region to the update area for @window.
|
2008-07-18 13:03:42 +00:00
|
|
|
|
*
|
2016-11-24 14:26:15 +00:00
|
|
|
|
* GDK will process all updates whenever the frame clock schedules a redraw,
|
|
|
|
|
* so there’s no need to do forces redraws manually, you just need to
|
2008-07-18 13:03:42 +00:00
|
|
|
|
* 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
|
2016-12-15 16:53:08 +00:00
|
|
|
|
* any non-native child windows.
|
2008-07-18 13:03:42 +00:00
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
_gdk_window_invalidate_for_expose (GdkWindow *window,
|
2010-06-28 12:54:37 +00:00
|
|
|
|
cairo_region_t *region)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
2013-04-19 15:40:58 +00:00
|
|
|
|
gdk_window_invalidate_maybe_recurse_full (window, region,
|
2009-11-04 13:03:04 +00:00
|
|
|
|
(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
|
2014-02-07 18:01:26 +00:00
|
|
|
|
* calling cairo_region_destroy() on the returned region if it’s non-%NULL.
|
2009-06-01 10:04:36 +00:00
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: the update area for @window
|
2001-02-20 05:21:44 +00:00
|
|
|
|
**/
|
2010-06-28 12:54:37 +00:00
|
|
|
|
cairo_region_t *
|
2000-03-28 01:24:44 +00:00
|
|
|
|
gdk_window_get_update_area (GdkWindow *window)
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
GdkWindow *impl_window;
|
2011-12-05 11:18:22 +00:00
|
|
|
|
cairo_region_t *tmp_region, *to_remove;
|
2000-03-28 01:24:44 +00:00
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
impl_window = gdk_window_get_impl_window (window);
|
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
|
|
|
|
{
|
2013-04-17 14:36:52 +00:00
|
|
|
|
tmp_region = cairo_region_copy (window->clip_region);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
/* Convert to impl coords */
|
2010-11-22 23:55:39 +00:00
|
|
|
|
cairo_region_translate (tmp_region, window->abs_x, window->abs_y);
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_region_intersect (tmp_region, impl_window->update_area);
|
2000-03-28 01:24:44 +00:00
|
|
|
|
|
2010-06-28 12:44:12 +00:00
|
|
|
|
if (cairo_region_is_empty (tmp_region))
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_region_destroy (tmp_region);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2011-12-05 11:18:22 +00:00
|
|
|
|
/* Convert from impl coords */
|
|
|
|
|
cairo_region_translate (tmp_region, -window->abs_x, -window->abs_y);
|
|
|
|
|
|
2013-04-17 14:36:52 +00:00
|
|
|
|
/* Don't remove any update area that is overlapped by sibling windows
|
|
|
|
|
or child windows as these really need to be repainted independently of this window. */
|
2011-12-05 11:18:22 +00:00
|
|
|
|
to_remove = cairo_region_copy (tmp_region);
|
2013-04-17 14:36:52 +00:00
|
|
|
|
|
|
|
|
|
remove_child_area (window, FALSE, to_remove);
|
|
|
|
|
remove_sibling_overlapped_area (window, to_remove);
|
2011-12-05 11:18:22 +00:00
|
|
|
|
|
|
|
|
|
/* Remove from update_area */
|
|
|
|
|
cairo_region_translate (to_remove, window->abs_x, window->abs_y);
|
|
|
|
|
cairo_region_subtract (impl_window->update_area, to_remove);
|
|
|
|
|
|
|
|
|
|
cairo_region_destroy (to_remove);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2013-04-17 12:02:32 +00:00
|
|
|
|
if (cairo_region_is_empty (impl_window->update_area))
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_region_destroy (impl_window->update_area);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
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
|
|
|
|
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)
|
|
|
|
|
{
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->update_area)
|
2000-05-15 16:09:53 +00:00
|
|
|
|
{
|
2008-07-18 13:03:42 +00:00
|
|
|
|
gdk_window_remove_update_window (window);
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
cairo_region_destroy (window->update_area);
|
|
|
|
|
window->update_area = NULL;
|
2000-05-15 16:09:53 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2001-10-03 18:19:48 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_freeze_updates:
|
|
|
|
|
* @window: a #GdkWindow
|
2009-06-01 10:04:36 +00:00
|
|
|
|
*
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* Temporarily freezes a window such that it won’t receive expose
|
2001-10-03 18:19:48 +00:00
|
|
|
|
* 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)
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
GdkWindow *impl_window;
|
2000-03-28 01:24:44 +00:00
|
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
impl_window = gdk_window_get_impl_window (window);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
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)
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
GdkWindow *impl_window;
|
2000-03-28 01:24:44 +00:00
|
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
impl_window = gdk_window_get_impl_window (window);
|
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
|
|
|
|
}
|
|
|
|
|
|
2014-11-07 14:33:53 +00:00
|
|
|
|
void
|
|
|
|
|
gdk_window_freeze_toplevel_updates (GdkWindow *window)
|
2007-09-12 17:13:24 +00:00
|
|
|
|
{
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
2010-11-22 23:55:39 +00:00
|
|
|
|
g_return_if_fail (window->window_type != GDK_WINDOW_CHILD);
|
2007-09-12 17:13:24 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->update_and_descendants_freeze_count++;
|
2013-02-12 20:03:21 +00:00
|
|
|
|
_gdk_frame_clock_freeze (gdk_window_get_frame_clock (window));
|
2007-09-12 17:13:24 +00:00
|
|
|
|
}
|
|
|
|
|
|
2014-11-07 14:33:53 +00:00
|
|
|
|
void
|
|
|
|
|
gdk_window_thaw_toplevel_updates (GdkWindow *window)
|
2007-09-12 17:13:24 +00:00
|
|
|
|
{
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
2010-11-22 23:55:39 +00:00
|
|
|
|
g_return_if_fail (window->window_type != GDK_WINDOW_CHILD);
|
|
|
|
|
g_return_if_fail (window->update_and_descendants_freeze_count > 0);
|
2007-09-12 17:13:24 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->update_and_descendants_freeze_count--;
|
2013-02-12 20:03:21 +00:00
|
|
|
|
_gdk_frame_clock_thaw (gdk_window_get_frame_clock (window));
|
2007-09-12 17:13:24 +00:00
|
|
|
|
|
|
|
|
|
gdk_window_schedule_update (window);
|
|
|
|
|
}
|
|
|
|
|
|
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
|
2011-01-18 09:10:30 +00:00
|
|
|
|
* @new_width: (out): location to store resulting width
|
|
|
|
|
* @new_height: (out): 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
|
2013-12-12 18:29:03 +00:00
|
|
|
|
gdk_window_constrain_size (GdkGeometry *geometry,
|
|
|
|
|
GdkWindowHints flags,
|
|
|
|
|
gint width,
|
|
|
|
|
gint height,
|
|
|
|
|
gint *new_width,
|
|
|
|
|
gint *new_height)
|
2001-03-29 21:17:45 +00:00
|
|
|
|
{
|
|
|
|
|
/* 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
|
|
|
|
|
2010-05-25 22:38:44 +00:00
|
|
|
|
/**
|
2013-07-03 09:52:58 +00:00
|
|
|
|
* gdk_window_get_device_position_double:
|
2010-05-25 22:38:44 +00:00
|
|
|
|
* @window: a #GdkWindow.
|
2010-12-20 22:04:44 +00:00
|
|
|
|
* @device: pointer #GdkDevice to query to.
|
2010-09-07 17:58:36 +00:00
|
|
|
|
* @x: (out) (allow-none): return location for the X coordinate of @device, or %NULL.
|
|
|
|
|
* @y: (out) (allow-none): return location for the Y coordinate of @device, or %NULL.
|
|
|
|
|
* @mask: (out) (allow-none): return location for the modifier mask, or %NULL.
|
2010-05-25 22:38:44 +00:00
|
|
|
|
*
|
2013-07-03 09:52:58 +00:00
|
|
|
|
* Obtains the current device position in doubles and modifier state.
|
2010-05-25 22:38:44 +00:00
|
|
|
|
* The position is given in coordinates relative to the upper left
|
|
|
|
|
* corner of @window.
|
|
|
|
|
*
|
2014-05-08 19:55:50 +00:00
|
|
|
|
* Returns: (nullable) (transfer none): The window underneath @device
|
|
|
|
|
* (as with gdk_device_get_window_at_position()), or %NULL if the
|
|
|
|
|
* window is not known to GDK.
|
2010-05-25 22:38:44 +00:00
|
|
|
|
*
|
2013-07-03 09:52:58 +00:00
|
|
|
|
* Since: 3.10
|
2010-05-25 22:38:44 +00:00
|
|
|
|
**/
|
|
|
|
|
GdkWindow *
|
2013-07-03 09:52:58 +00:00
|
|
|
|
gdk_window_get_device_position_double (GdkWindow *window,
|
|
|
|
|
GdkDevice *device,
|
|
|
|
|
double *x,
|
|
|
|
|
double *y,
|
|
|
|
|
GdkModifierType *mask)
|
2010-05-25 22:38:44 +00:00
|
|
|
|
{
|
2013-07-03 09:52:58 +00:00
|
|
|
|
gdouble tmp_x, tmp_y;
|
2010-05-25 22:38:44 +00:00
|
|
|
|
GdkModifierType tmp_mask;
|
2011-01-03 16:01:36 +00:00
|
|
|
|
gboolean normal_child;
|
2002-10-07 19:42:49 +00:00
|
|
|
|
|
2010-05-25 22:38:44 +00:00
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
g_return_val_if_fail (GDK_IS_DEVICE (device), NULL);
|
2010-12-20 22:04:44 +00:00
|
|
|
|
g_return_val_if_fail (gdk_device_get_source (device) != GDK_SOURCE_KEYBOARD, NULL);
|
2010-05-25 22:38:44 +00:00
|
|
|
|
|
2015-01-24 21:45:04 +00:00
|
|
|
|
tmp_x = tmp_y = 0;
|
|
|
|
|
tmp_mask = 0;
|
2011-01-03 16:01:36 +00:00
|
|
|
|
normal_child = GDK_WINDOW_IMPL_GET_CLASS (window->impl)->get_device_state (window,
|
|
|
|
|
device,
|
|
|
|
|
&tmp_x, &tmp_y,
|
|
|
|
|
&tmp_mask);
|
|
|
|
|
/* We got the coords on the impl, convert to the window */
|
|
|
|
|
tmp_x -= window->abs_x;
|
|
|
|
|
tmp_y -= window->abs_y;
|
2002-10-07 19:42:49 +00:00
|
|
|
|
|
|
|
|
|
if (x)
|
|
|
|
|
*x = tmp_x;
|
|
|
|
|
if (y)
|
|
|
|
|
*y = tmp_y;
|
|
|
|
|
if (mask)
|
|
|
|
|
*mask = tmp_mask;
|
|
|
|
|
|
2011-01-03 16:01:36 +00:00
|
|
|
|
if (normal_child)
|
|
|
|
|
return _gdk_window_find_child_at (window, tmp_x, tmp_y);
|
|
|
|
|
return NULL;
|
2001-07-05 13:41:34 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-07-03 09:52:58 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_device_position:
|
|
|
|
|
* @window: a #GdkWindow.
|
|
|
|
|
* @device: pointer #GdkDevice to query to.
|
|
|
|
|
* @x: (out) (allow-none): return location for the X coordinate of @device, or %NULL.
|
|
|
|
|
* @y: (out) (allow-none): return location for the Y coordinate of @device, or %NULL.
|
|
|
|
|
* @mask: (out) (allow-none): return location for the modifier mask, or %NULL.
|
|
|
|
|
*
|
|
|
|
|
* Obtains the current device position and modifier state.
|
|
|
|
|
* The position is given in coordinates relative to the upper left
|
|
|
|
|
* corner of @window.
|
|
|
|
|
*
|
|
|
|
|
* Use gdk_window_get_device_position_double() if you need subpixel precision.
|
|
|
|
|
*
|
2014-05-08 19:55:50 +00:00
|
|
|
|
* Returns: (nullable) (transfer none): The window underneath @device
|
|
|
|
|
* (as with gdk_device_get_window_at_position()), or %NULL if the
|
|
|
|
|
* window is not known to GDK.
|
2013-07-03 09:52:58 +00:00
|
|
|
|
*
|
|
|
|
|
* Since: 3.0
|
|
|
|
|
**/
|
|
|
|
|
GdkWindow *
|
|
|
|
|
gdk_window_get_device_position (GdkWindow *window,
|
|
|
|
|
GdkDevice *device,
|
|
|
|
|
gint *x,
|
|
|
|
|
gint *y,
|
|
|
|
|
GdkModifierType *mask)
|
|
|
|
|
{
|
|
|
|
|
gdouble tmp_x, tmp_y;
|
|
|
|
|
|
|
|
|
|
window = gdk_window_get_device_position_double (window, device,
|
|
|
|
|
&tmp_x, &tmp_y, mask);
|
|
|
|
|
if (x)
|
|
|
|
|
*x = round (tmp_x);
|
|
|
|
|
if (y)
|
|
|
|
|
*y = round (tmp_y);
|
|
|
|
|
|
|
|
|
|
return window;
|
|
|
|
|
}
|
|
|
|
|
|
2014-07-03 15:48:28 +00:00
|
|
|
|
static gboolean
|
2008-07-18 13:03:42 +00:00
|
|
|
|
gdk_window_raise_internal (GdkWindow *window)
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
GdkWindow *parent = window->parent;
|
2010-11-22 19:42:00 +00:00
|
|
|
|
GdkWindowImplClass *impl_class;
|
2014-07-03 15:48:28 +00:00
|
|
|
|
gboolean did_raise = FALSE;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2014-07-03 15:48:28 +00:00
|
|
|
|
if (parent && parent->children->data != window)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
2015-09-10 10:57:16 +00:00
|
|
|
|
parent->children = g_list_remove_link (parent->children, &window->children_list_node);
|
|
|
|
|
parent->children = g_list_concat (&window->children_list_node, parent->children);
|
2014-07-03 15:48:28 +00:00
|
|
|
|
did_raise = TRUE;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
2009-01-19 09:40:13 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
2016-12-15 16:53:08 +00:00
|
|
|
|
|
2009-01-19 12:07:02 +00:00
|
|
|
|
/* Just do native raise for toplevels */
|
2016-12-15 16:53:08 +00:00
|
|
|
|
if (gdk_window_has_impl (window))
|
2010-11-22 19:42:00 +00:00
|
|
|
|
impl_class->raise (window);
|
2014-07-03 15:48:28 +00:00
|
|
|
|
|
|
|
|
|
return did_raise;
|
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
|
2010-11-22 23:55:39 +00:00
|
|
|
|
set_viewable (GdkWindow *w,
|
2009-07-18 18:29:50 +00:00
|
|
|
|
gboolean val)
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
GdkWindow *child;
|
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)
|
2013-04-17 15:05:49 +00:00
|
|
|
|
recompute_visible_regions (w, FALSE);
|
2009-07-20 20:19:35 +00:00
|
|
|
|
|
2009-07-18 18:29:50 +00:00
|
|
|
|
for (l = w->children; l != NULL; l = l->next)
|
|
|
|
|
{
|
|
|
|
|
child = l->data;
|
|
|
|
|
|
2016-12-15 16:53:08 +00:00
|
|
|
|
if (GDK_WINDOW_IS_MAPPED (child))
|
2009-07-18 18:29:50 +00:00
|
|
|
|
set_viewable (child, val);
|
|
|
|
|
}
|
2009-08-11 09:30:55 +00:00
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
{
|
|
|
|
|
gboolean viewable;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->window_type == GDK_WINDOW_FOREIGN ||
|
|
|
|
|
window->window_type == GDK_WINDOW_ROOT)
|
2009-07-18 18:29:50 +00:00
|
|
|
|
viewable = TRUE;
|
2010-11-22 23:55:39 +00:00
|
|
|
|
else if (gdk_window_is_toplevel (window) ||
|
|
|
|
|
window->parent->viewable)
|
|
|
|
|
viewable = GDK_WINDOW_IS_MAPPED (window);
|
2009-07-18 18:29:50 +00:00
|
|
|
|
else
|
|
|
|
|
viewable = FALSE;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return set_viewable (window, 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)
|
|
|
|
|
{
|
2010-11-22 19:42:00 +00:00
|
|
|
|
GdkWindowImplClass *impl_class;
|
2009-08-11 09:30:55 +00:00
|
|
|
|
gboolean was_mapped, was_viewable;
|
2014-07-03 15:48:28 +00:00
|
|
|
|
gboolean did_show, did_raise = FALSE;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->destroyed)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
was_mapped = GDK_WINDOW_IS_MAPPED (window);
|
2010-11-22 23:55:39 +00:00
|
|
|
|
was_viewable = window->viewable;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
if (raise)
|
2014-07-03 15:48:28 +00:00
|
|
|
|
{
|
|
|
|
|
/* Keep children in (reverse) stacking order */
|
|
|
|
|
did_raise = gdk_window_raise_internal (window);
|
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (gdk_window_has_impl (window))
|
2008-12-18 10:30:10 +00:00
|
|
|
|
{
|
2008-12-18 13:29:28 +00:00
|
|
|
|
if (!was_mapped)
|
2017-07-18 10:36:35 +00:00
|
|
|
|
gdk_synthesize_window_state (window,
|
|
|
|
|
GDK_WINDOW_STATE_WITHDRAWN,
|
|
|
|
|
0);
|
2008-12-18 10:30:10 +00:00
|
|
|
|
}
|
2008-07-18 13:03:42 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->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. */
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (gdk_window_has_impl (window) && (was_viewable || !did_show))
|
2009-08-31 08:44:11 +00:00
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
|
|
|
|
impl_class->show (window, !did_show ? was_mapped : TRUE);
|
2009-08-31 08:44:11 +00:00
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (!was_mapped && !gdk_window_has_impl (window))
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->event_mask & GDK_STRUCTURE_MASK)
|
|
|
|
|
_gdk_make_event (window, GDK_MAP, NULL, FALSE);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->parent && window->parent->event_mask & GDK_SUBSTRUCTURE_MASK)
|
|
|
|
|
_gdk_make_event (window, GDK_MAP, NULL, FALSE);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
2009-05-26 18:53:48 +00:00
|
|
|
|
|
2014-07-03 15:48:28 +00:00
|
|
|
|
if (!was_mapped || did_raise)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
2013-04-17 15:05:49 +00:00
|
|
|
|
recompute_visible_regions (window, FALSE);
|
2009-05-26 18:53:48 +00:00
|
|
|
|
|
2008-12-18 13:29:28 +00:00
|
|
|
|
if (gdk_window_is_viewable (window))
|
2017-05-14 19:34:15 +00:00
|
|
|
|
gdk_window_invalidate_rect_full (window, NULL, TRUE);
|
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
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* that you can’t really use XMapWindow() directly on a GDK window).
|
2008-06-27 14:27:44 +00:00
|
|
|
|
*/
|
|
|
|
|
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)
|
|
|
|
|
{
|
2014-07-03 15:48:28 +00:00
|
|
|
|
gboolean did_raise;
|
|
|
|
|
|
2008-06-27 14:27:44 +00:00
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->destroyed)
|
2008-06-27 14:27:44 +00:00
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
/* Keep children in (reverse) stacking order */
|
2014-07-03 15:48:28 +00:00
|
|
|
|
did_raise = gdk_window_raise_internal (window);
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
2014-07-03 15:48:28 +00:00
|
|
|
|
if (did_raise &&
|
|
|
|
|
!gdk_window_is_toplevel (window) &&
|
2013-07-17 19:23:15 +00:00
|
|
|
|
gdk_window_is_viewable (window) &&
|
2011-12-01 15:44:51 +00:00
|
|
|
|
!window->input_only)
|
2013-04-19 15:40:58 +00:00
|
|
|
|
gdk_window_invalidate_region_full (window, window->clip_region, TRUE);
|
2008-06-27 14:27:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
gdk_window_lower_internal (GdkWindow *window)
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
GdkWindow *parent = window->parent;
|
2010-11-22 19:42:00 +00:00
|
|
|
|
GdkWindowImplClass *impl_class;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
|
|
if (parent)
|
|
|
|
|
{
|
2015-09-10 10:57:16 +00:00
|
|
|
|
parent->children = g_list_remove_link (parent->children, &window->children_list_node);
|
|
|
|
|
parent->children = g_list_concat (parent->children, &window->children_list_node);
|
2008-06-27 14:27:44 +00:00
|
|
|
|
}
|
2009-01-19 09:40:13 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2016-12-15 16:53:08 +00:00
|
|
|
|
/* Just do native lower for toplevels */
|
|
|
|
|
if (gdk_window_has_impl (window))
|
|
|
|
|
impl_class->lower (window);
|
2008-06-27 14:27:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
static void
|
2010-11-22 23:55:39 +00:00
|
|
|
|
gdk_window_invalidate_in_parent (GdkWindow *private)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
|
|
|
|
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);
|
|
|
|
|
|
2013-04-19 15:40:58 +00:00
|
|
|
|
gdk_window_invalidate_rect_full (private->parent, &r, TRUE);
|
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.
|
|
|
|
|
*
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* Note that gdk_window_show() raises the window again, so don’t call this
|
2008-06-27 14:27:44 +00:00
|
|
|
|
* function before gdk_window_show(). (Try gdk_window_show_unraised().)
|
|
|
|
|
*/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_lower (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->destroyed)
|
2008-06-27 14:27:44 +00:00
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
/* Keep children in (reverse) stacking order */
|
|
|
|
|
gdk_window_lower_internal (window);
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
gdk_window_invalidate_in_parent (window);
|
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)
|
|
|
|
|
{
|
2010-11-22 19:42:00 +00:00
|
|
|
|
GdkWindowImplClass *impl_class;
|
2010-11-22 23:55:39 +00:00
|
|
|
|
GdkWindow *parent;
|
2009-09-02 21:38:55 +00:00
|
|
|
|
GList *sibling_link;
|
|
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
g_return_if_fail (sibling == NULL || GDK_IS_WINDOW (sibling));
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->destroyed)
|
2009-09-02 21:38:55 +00:00
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (sibling == NULL)
|
|
|
|
|
{
|
|
|
|
|
if (above)
|
|
|
|
|
gdk_window_raise (window);
|
|
|
|
|
else
|
|
|
|
|
gdk_window_lower (window);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (gdk_window_is_toplevel (window))
|
2009-09-02 21:38:55 +00:00
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
g_return_if_fail (gdk_window_is_toplevel (sibling));
|
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
2010-11-22 19:42:00 +00:00
|
|
|
|
impl_class->restack_toplevel (window, sibling, above);
|
2009-09-02 21:38:55 +00:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
parent = window->parent;
|
2009-09-02 21:38:55 +00:00
|
|
|
|
if (parent)
|
|
|
|
|
{
|
|
|
|
|
sibling_link = g_list_find (parent->children, sibling);
|
|
|
|
|
g_return_if_fail (sibling_link != NULL);
|
|
|
|
|
if (sibling_link == NULL)
|
|
|
|
|
return;
|
|
|
|
|
|
2015-09-10 10:57:16 +00:00
|
|
|
|
parent->children = g_list_remove_link (parent->children, &window->children_list_node);
|
2009-09-02 21:38:55 +00:00
|
|
|
|
if (above)
|
2015-09-10 10:57:16 +00:00
|
|
|
|
parent->children = list_insert_link_before (parent->children,
|
|
|
|
|
sibling_link,
|
|
|
|
|
&window->children_list_node);
|
2009-09-02 21:38:55 +00:00
|
|
|
|
else
|
2015-09-10 10:57:16 +00:00
|
|
|
|
parent->children = list_insert_link_before (parent->children,
|
|
|
|
|
sibling_link->next,
|
|
|
|
|
&window->children_list_node);
|
2009-09-02 21:38:55 +00:00
|
|
|
|
}
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
gdk_window_invalidate_in_parent (window);
|
2009-09-02 21:38:55 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
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).
|
|
|
|
|
*
|
2014-02-07 18:01:26 +00:00
|
|
|
|
* This function maps a window so it’s visible onscreen. Its opposite
|
2008-06-27 14:27:44 +00:00
|
|
|
|
* is gdk_window_hide().
|
|
|
|
|
*
|
|
|
|
|
* When implementing a #GtkWidget, you should call this function on the widget's
|
2014-02-05 19:50:22 +00:00
|
|
|
|
* #GdkWindow as part of the “map” method.
|
2008-06-27 14:27:44 +00:00
|
|
|
|
*/
|
|
|
|
|
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
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* they won’t be displayed. Normally done automatically as
|
2008-06-27 14:27:44 +00:00
|
|
|
|
* part of gtk_widget_hide().
|
|
|
|
|
*/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_hide (GdkWindow *window)
|
|
|
|
|
{
|
2010-11-22 19:42:00 +00:00
|
|
|
|
GdkWindowImplClass *impl_class;
|
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));
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->destroyed)
|
2008-06-27 14:27:44 +00:00
|
|
|
|
return;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
was_mapped = GDK_WINDOW_IS_MAPPED (window);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (gdk_window_has_impl (window))
|
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)
|
2017-05-14 19:30:16 +00:00
|
|
|
|
window->state = GDK_WINDOW_STATE_WITHDRAWN;
|
|
|
|
|
|
|
|
|
|
if (was_mapped)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
|
|
|
|
GdkDisplay *display;
|
2016-10-26 10:21:39 +00:00
|
|
|
|
GdkSeat *seat;
|
2010-05-25 22:38:44 +00:00
|
|
|
|
GList *devices, *d;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
|
|
/* May need to break grabs on children */
|
2010-08-29 00:08:47 +00:00
|
|
|
|
display = gdk_window_get_display (window);
|
2016-10-26 10:21:39 +00:00
|
|
|
|
seat = gdk_display_get_default_seat (display);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2016-10-26 14:45:04 +00:00
|
|
|
|
devices = gdk_seat_get_slaves (seat, GDK_SEAT_CAPABILITY_ALL);
|
2016-10-26 10:21:39 +00:00
|
|
|
|
devices = g_list_prepend (devices, gdk_seat_get_keyboard (seat));
|
|
|
|
|
devices = g_list_prepend (devices, gdk_seat_get_pointer (seat));
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2010-05-25 22:38:44 +00:00
|
|
|
|
for (d = devices; d; d = d->next)
|
|
|
|
|
{
|
|
|
|
|
GdkDevice *device = d->data;
|
|
|
|
|
|
2010-12-13 19:05:59 +00:00
|
|
|
|
if (_gdk_display_end_device_grab (display,
|
|
|
|
|
device,
|
|
|
|
|
_gdk_display_get_next_serial (display),
|
2010-05-25 22:38:44 +00:00
|
|
|
|
window,
|
|
|
|
|
TRUE))
|
2016-10-26 22:06:36 +00:00
|
|
|
|
{
|
|
|
|
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
|
|
|
gdk_device_ungrab (device, GDK_CURRENT_TIME);
|
|
|
|
|
G_GNUC_END_IGNORE_DEPRECATIONS
|
|
|
|
|
}
|
2010-05-25 22:38:44 +00:00
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-05-25 22:38:44 +00:00
|
|
|
|
g_list_free (devices);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
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. */
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (gdk_window_has_impl (window) && (!did_hide))
|
2009-08-31 08:44:11 +00:00
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
2010-11-22 19:42:00 +00:00
|
|
|
|
impl_class->hide (window);
|
2009-08-31 08:44:11 +00:00
|
|
|
|
}
|
2009-05-26 18:53:48 +00:00
|
|
|
|
|
2014-10-09 08:09:51 +00:00
|
|
|
|
gdk_window_clear_old_updated_area (window);
|
2013-04-17 15:05:49 +00:00
|
|
|
|
recompute_visible_regions (window, FALSE);
|
2009-05-26 18:53:48 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (was_mapped && !gdk_window_has_impl (window))
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->event_mask & GDK_STRUCTURE_MASK)
|
|
|
|
|
_gdk_make_event (window, GDK_UNMAP, NULL, FALSE);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->parent && window->parent->event_mask & GDK_SUBSTRUCTURE_MASK)
|
|
|
|
|
_gdk_make_event (window, GDK_UNMAP, NULL, FALSE);
|
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)
|
2010-11-22 23:55:39 +00:00
|
|
|
|
gdk_window_invalidate_in_parent (window);
|
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)
|
|
|
|
|
{
|
2010-11-22 19:42:00 +00:00
|
|
|
|
GdkWindowImplClass *impl_class;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
gboolean was_mapped;
|
2017-10-25 13:37:36 +00:00
|
|
|
|
GdkGLContext *current_context;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->destroyed)
|
2008-06-27 14:27:44 +00:00
|
|
|
|
return;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
was_mapped = GDK_WINDOW_IS_MAPPED (window);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (gdk_window_has_impl (window))
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
2010-11-22 19:42:00 +00:00
|
|
|
|
impl_class->withdraw (window);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
if (was_mapped)
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->event_mask & GDK_STRUCTURE_MASK)
|
|
|
|
|
_gdk_make_event (window, GDK_UNMAP, NULL, FALSE);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->parent && window->parent->event_mask & GDK_SUBSTRUCTURE_MASK)
|
|
|
|
|
_gdk_make_event (window, GDK_UNMAP, NULL, FALSE);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2017-10-25 13:37:36 +00:00
|
|
|
|
current_context = gdk_gl_context_get_current ();
|
|
|
|
|
if (current_context != NULL && gdk_gl_context_get_window (current_context) == window)
|
|
|
|
|
gdk_gl_context_clear_current ();
|
|
|
|
|
|
2013-04-17 15:05:49 +00:00
|
|
|
|
recompute_visible_regions (window, FALSE);
|
2014-10-09 08:09:51 +00:00
|
|
|
|
gdk_window_clear_old_updated_area (window);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
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
|
2010-05-25 22:38:44 +00:00
|
|
|
|
* for that window from all master input devices. 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.
|
2015-02-18 11:13:28 +00:00
|
|
|
|
*
|
|
|
|
|
* See the [input handling overview][event-masks] for details.
|
2008-06-27 14:27:44 +00:00
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_events (GdkWindow *window,
|
|
|
|
|
GdkEventMask event_mask)
|
|
|
|
|
{
|
2010-11-22 19:42:00 +00:00
|
|
|
|
GdkWindowImplClass *impl_class;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2008-06-27 14:27:44 +00:00
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->destroyed)
|
2008-06-27 14:27:44 +00:00
|
|
|
|
return;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->event_mask = event_mask;
|
2009-02-04 10:22:54 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (gdk_window_has_impl (window))
|
2009-08-31 08:44:11 +00:00
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
2010-11-22 19:42:00 +00:00
|
|
|
|
impl_class->set_events (window,
|
2010-11-22 23:55:39 +00:00
|
|
|
|
get_native_event_mask (window));
|
2009-08-31 08:44:11 +00:00
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2008-06-27 14:27:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_events:
|
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
*
|
2010-05-25 22:38:44 +00:00
|
|
|
|
* Gets the event mask for @window for all master input devices. See
|
|
|
|
|
* gdk_window_set_events().
|
2008-06-27 14:27:44 +00:00
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: event mask for @window
|
2008-06-27 14:27:44 +00:00
|
|
|
|
**/
|
|
|
|
|
GdkEventMask
|
|
|
|
|
gdk_window_get_events (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->destroyed)
|
2008-06-27 14:27:44 +00:00
|
|
|
|
return 0;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return window->event_mask;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
2010-05-25 22:38:44 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_device_events:
|
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
* @device: #GdkDevice to enable events for.
|
|
|
|
|
* @event_mask: event mask for @window
|
|
|
|
|
*
|
|
|
|
|
* Sets the event mask for a given device (Normally a floating device, not
|
|
|
|
|
* attached to any visible pointer) to @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.
|
|
|
|
|
*
|
2015-02-18 11:13:28 +00:00
|
|
|
|
* See the [input handling overview][event-masks] for details.
|
|
|
|
|
*
|
2010-05-25 22:38:44 +00:00
|
|
|
|
* Since: 3.0
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_device_events (GdkWindow *window,
|
|
|
|
|
GdkDevice *device,
|
|
|
|
|
GdkEventMask event_mask)
|
|
|
|
|
{
|
|
|
|
|
GdkEventMask device_mask;
|
|
|
|
|
GdkWindow *native;
|
|
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
g_return_if_fail (GDK_IS_DEVICE (device));
|
|
|
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
|
return;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (G_UNLIKELY (!window->device_events))
|
|
|
|
|
window->device_events = g_hash_table_new (NULL, NULL);
|
2010-05-25 22:38:44 +00:00
|
|
|
|
|
|
|
|
|
if (event_mask == 0)
|
|
|
|
|
{
|
|
|
|
|
/* FIXME: unsetting events on a master device
|
2010-11-22 23:55:39 +00:00
|
|
|
|
* would restore window->event_mask
|
2010-05-25 22:38:44 +00:00
|
|
|
|
*/
|
2010-11-22 23:55:39 +00:00
|
|
|
|
g_hash_table_remove (window->device_events, device);
|
2010-05-25 22:38:44 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
2010-11-22 23:55:39 +00:00
|
|
|
|
g_hash_table_insert (window->device_events, device,
|
2010-05-25 22:38:44 +00:00
|
|
|
|
GINT_TO_POINTER (event_mask));
|
|
|
|
|
|
2011-03-07 15:01:46 +00:00
|
|
|
|
native = gdk_window_get_toplevel (window);
|
2010-05-25 22:38:44 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
device_mask = get_native_device_event_mask (window, device);
|
2010-05-25 22:38:44 +00:00
|
|
|
|
GDK_DEVICE_GET_CLASS (device)->select_window_events (device, native, device_mask);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_device_events:
|
|
|
|
|
* @window: a #GdkWindow.
|
|
|
|
|
* @device: a #GdkDevice.
|
|
|
|
|
*
|
|
|
|
|
* Returns the event mask for @window corresponding to an specific device.
|
|
|
|
|
*
|
|
|
|
|
* Returns: device event mask for @window
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.0
|
|
|
|
|
**/
|
|
|
|
|
GdkEventMask
|
|
|
|
|
gdk_window_get_device_events (GdkWindow *window,
|
|
|
|
|
GdkDevice *device)
|
|
|
|
|
{
|
|
|
|
|
GdkEventMask mask;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
|
|
|
|
|
g_return_val_if_fail (GDK_IS_DEVICE (device), 0);
|
|
|
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
|
return 0;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (!window->device_events)
|
2010-05-25 22:38:44 +00:00
|
|
|
|
return 0;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
mask = GPOINTER_TO_INT (g_hash_table_lookup (window->device_events, device));
|
2010-05-25 22:38:44 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
/* FIXME: device could be controlled by window->event_mask */
|
2010-05-25 22:38:44 +00:00
|
|
|
|
|
|
|
|
|
return mask;
|
|
|
|
|
}
|
|
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
|
static void
|
|
|
|
|
gdk_window_move_resize_toplevel (GdkWindow *window,
|
2011-01-23 23:50:09 +00:00
|
|
|
|
gboolean with_move,
|
|
|
|
|
gint x,
|
|
|
|
|
gint y,
|
|
|
|
|
gint width,
|
|
|
|
|
gint height)
|
2009-01-20 22:03:16 +00:00
|
|
|
|
{
|
2010-06-28 12:54:37 +00:00
|
|
|
|
cairo_region_t *old_region, *new_region;
|
2010-11-22 19:42:00 +00:00
|
|
|
|
GdkWindowImplClass *impl_class;
|
2009-01-20 22:03:16 +00:00
|
|
|
|
gboolean expose;
|
|
|
|
|
gboolean is_resize;
|
|
|
|
|
|
|
|
|
|
expose = FALSE;
|
|
|
|
|
old_region = NULL;
|
|
|
|
|
|
|
|
|
|
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) &&
|
2010-11-22 23:55:39 +00:00
|
|
|
|
!window->input_only)
|
2009-01-20 22:03:16 +00:00
|
|
|
|
{
|
|
|
|
|
expose = TRUE;
|
2010-11-22 23:55:39 +00:00
|
|
|
|
old_region = cairo_region_copy (window->clip_region);
|
2009-01-20 22:03:16 +00:00
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
2010-11-22 19:42:00 +00:00
|
|
|
|
impl_class->move_resize (window, with_move, x, y, width, height);
|
2009-01-20 22:03:16 +00:00
|
|
|
|
|
|
|
|
|
/* Avoid recomputing for pure toplevel moves, for performance reasons */
|
|
|
|
|
if (is_resize)
|
2013-04-17 15:05:49 +00:00
|
|
|
|
recompute_visible_regions (window, FALSE);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2009-01-20 22:03:16 +00:00
|
|
|
|
if (expose)
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
new_region = cairo_region_copy (window->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),
|
2011-01-23 23:50:09 +00:00
|
|
|
|
* X will expose it, but lets do that without the roundtrip
|
2009-01-20 22:03:16 +00:00
|
|
|
|
*/
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_region_subtract (new_region, old_region);
|
2013-04-19 15:40:58 +00:00
|
|
|
|
gdk_window_invalidate_region_full (window, new_region, TRUE);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_region_destroy (old_region);
|
|
|
|
|
cairo_region_destroy (new_region);
|
2009-01-20 22:03:16 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
{
|
2013-04-17 11:13:46 +00:00
|
|
|
|
cairo_region_t *old_region, *new_region;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
gboolean expose;
|
|
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->destroyed)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
return;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (gdk_window_is_toplevel (window))
|
2009-01-20 22:03:16 +00:00
|
|
|
|
{
|
|
|
|
|
gdk_window_move_resize_toplevel (window, with_move, x, y, width, height);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2014-07-03 15:48:24 +00:00
|
|
|
|
if (width == 0)
|
|
|
|
|
width = 1;
|
|
|
|
|
if (height == 0)
|
|
|
|
|
height = 1;
|
|
|
|
|
|
2009-09-14 11:09:07 +00:00
|
|
|
|
/* Bail early if no change */
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->width == width &&
|
|
|
|
|
window->height == height &&
|
2009-09-14 11:09:07 +00:00
|
|
|
|
(!with_move ||
|
2010-11-22 23:55:39 +00:00
|
|
|
|
(window->x == x &&
|
|
|
|
|
window->y == y)))
|
2009-09-14 11:09:07 +00:00
|
|
|
|
return;
|
|
|
|
|
|
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;
|
2009-01-19 14:44:09 +00:00
|
|
|
|
|
2009-07-10 22:28:18 +00:00
|
|
|
|
if (gdk_window_is_viewable (window) &&
|
2010-11-22 23:55:39 +00:00
|
|
|
|
!window->input_only)
|
2009-01-19 14:44:09 +00:00
|
|
|
|
{
|
2015-11-09 14:14:57 +00:00
|
|
|
|
GdkRectangle r;
|
|
|
|
|
|
2009-01-19 14:44:09 +00:00
|
|
|
|
expose = TRUE;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2015-11-09 14:14:57 +00:00
|
|
|
|
r.x = window->x;
|
|
|
|
|
r.y = window->y;
|
|
|
|
|
r.width = window->width;
|
|
|
|
|
r.height = window->height;
|
|
|
|
|
|
|
|
|
|
old_region = cairo_region_create_rectangle (&r);
|
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
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->x = x;
|
|
|
|
|
window->y = y;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
2009-01-20 22:03:16 +00:00
|
|
|
|
if (!(width < 0 && height < 0))
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->width = width;
|
|
|
|
|
window->height = height;
|
2009-01-20 22:03:16 +00:00
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2013-04-17 15:05:49 +00:00
|
|
|
|
recompute_visible_regions (window, FALSE);
|
2009-01-20 22:03:16 +00:00
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
if (expose)
|
|
|
|
|
{
|
2015-11-09 14:14:57 +00:00
|
|
|
|
GdkRectangle r;
|
|
|
|
|
|
|
|
|
|
r.x = window->x;
|
|
|
|
|
r.y = window->y;
|
|
|
|
|
r.width = window->width;
|
|
|
|
|
r.height = window->height;
|
|
|
|
|
|
|
|
|
|
new_region = cairo_region_create_rectangle (&r);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_region_union (new_region, old_region);
|
2009-01-20 22:03:16 +00:00
|
|
|
|
|
2013-04-19 15:40:58 +00:00
|
|
|
|
gdk_window_invalidate_region_full (window->parent, new_region, TRUE);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_region_destroy (old_region);
|
|
|
|
|
cairo_region_destroy (new_region);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
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
|
2014-02-07 18:01:26 +00:00
|
|
|
|
* @x: X coordinate relative to window’s parent
|
|
|
|
|
* @y: Y coordinate relative to window’s parent
|
2008-06-27 14:27:44 +00:00
|
|
|
|
*
|
|
|
|
|
* 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.
|
|
|
|
|
*
|
2014-02-07 18:37:09 +00:00
|
|
|
|
* If you’re also planning to resize the window, use gdk_window_move_resize()
|
2008-06-27 14:27:44 +00:00
|
|
|
|
* 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.
|
|
|
|
|
*
|
2014-02-07 18:37:09 +00:00
|
|
|
|
* If you’re also planning to move the window, use gdk_window_move_resize()
|
2008-06-27 14:27:44 +00:00
|
|
|
|
* 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
|
2014-02-07 18:01:26 +00:00
|
|
|
|
* @x: new X position relative to window’s parent
|
|
|
|
|
* @y: new Y position relative to window’s parent
|
2008-06-27 14:27:44 +00:00
|
|
|
|
* @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
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* move, then resize, if you don’t use gdk_window_move_resize().)
|
2008-06-27 14:27:44 +00:00
|
|
|
|
**/
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
|
2016-06-15 15:00:38 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_move_to_rect:
|
|
|
|
|
* @window: the #GdkWindow to move
|
|
|
|
|
* @rect: (not nullable): the destination #GdkRectangle to align @window with
|
|
|
|
|
* @rect_anchor: the point on @rect to align with @window's anchor point
|
|
|
|
|
* @window_anchor: the point on @window to align with @rect's anchor point
|
|
|
|
|
* @anchor_hints: positioning hints to use when limited on space
|
|
|
|
|
* @rect_anchor_dx: horizontal offset to shift @window, i.e. @rect's anchor
|
|
|
|
|
* point
|
|
|
|
|
* @rect_anchor_dy: vertical offset to shift @window, i.e. @rect's anchor point
|
|
|
|
|
*
|
|
|
|
|
* Moves @window to @rect, aligning their anchor points.
|
|
|
|
|
*
|
|
|
|
|
* @rect is relative to the top-left corner of the window that @window is
|
|
|
|
|
* transient for. @rect_anchor and @window_anchor determine anchor points on
|
|
|
|
|
* @rect and @window to pin together. @rect's anchor point can optionally be
|
|
|
|
|
* offset by @rect_anchor_dx and @rect_anchor_dy, which is equivalent to
|
|
|
|
|
* offsetting the position of @window.
|
|
|
|
|
*
|
|
|
|
|
* @anchor_hints determines how @window will be moved if the anchor points cause
|
|
|
|
|
* it to move off-screen. For example, %GDK_ANCHOR_FLIP_X will replace
|
|
|
|
|
* %GDK_GRAVITY_NORTH_WEST with %GDK_GRAVITY_NORTH_EAST and vice versa if
|
|
|
|
|
* @window extends beyond the left or right edges of the monitor.
|
|
|
|
|
*
|
|
|
|
|
* Connect to the #GdkWindow::moved-to-rect signal to find out how it was
|
|
|
|
|
* actually positioned.
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.22
|
|
|
|
|
* Stability: Private
|
|
|
|
|
*/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_move_to_rect (GdkWindow *window,
|
|
|
|
|
const GdkRectangle *rect,
|
|
|
|
|
GdkGravity rect_anchor,
|
|
|
|
|
GdkGravity window_anchor,
|
|
|
|
|
GdkAnchorHints anchor_hints,
|
|
|
|
|
gint rect_anchor_dx,
|
|
|
|
|
gint rect_anchor_dy)
|
|
|
|
|
{
|
|
|
|
|
GdkWindowImplClass *impl_class;
|
|
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
g_return_if_fail (window->transient_for);
|
|
|
|
|
g_return_if_fail (rect);
|
|
|
|
|
|
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
|
|
|
|
impl_class->move_to_rect (window,
|
|
|
|
|
rect,
|
|
|
|
|
rect_anchor,
|
|
|
|
|
window_anchor,
|
|
|
|
|
anchor_hints,
|
|
|
|
|
rect_anchor_dx,
|
|
|
|
|
rect_anchor_dy);
|
|
|
|
|
}
|
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
|
2014-02-07 18:01:26 +00:00
|
|
|
|
* subwindows, or if the edges of the window’s parent do not extend
|
2008-06-27 14:27:44 +00:00
|
|
|
|
* 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)
|
|
|
|
|
{
|
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;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->destroyed)
|
2008-06-27 14:27:44 +00:00
|
|
|
|
return;
|
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
/* First move all child windows, without causing invalidation */
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
tmp_list = window->children;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
while (tmp_list)
|
|
|
|
|
{
|
|
|
|
|
GdkWindow *child = GDK_WINDOW (tmp_list->data);
|
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 */
|
2010-11-22 23:55:39 +00:00
|
|
|
|
child->x += dx;
|
|
|
|
|
child->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
|
|
|
|
|
2013-04-17 15:05:49 +00:00
|
|
|
|
recompute_visible_regions (window, TRUE);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2015-11-09 14:14:57 +00:00
|
|
|
|
gdk_window_invalidate_rect_full (window, NULL, TRUE);
|
2008-06-27 14:27:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_move_region:
|
|
|
|
|
* @window: a #GdkWindow
|
2010-06-28 12:54:37 +00:00
|
|
|
|
* @region: The #cairo_region_t to move
|
2008-06-27 14:27:44 +00:00
|
|
|
|
* @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
|
2015-01-18 17:40:32 +00:00
|
|
|
|
gdk_window_move_region (GdkWindow *window,
|
|
|
|
|
const cairo_region_t *region,
|
|
|
|
|
gint dx,
|
|
|
|
|
gint dy)
|
2008-06-27 14:27:44 +00:00
|
|
|
|
{
|
2013-04-17 11:13:46 +00:00
|
|
|
|
cairo_region_t *expose_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;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->destroyed)
|
2008-06-27 14:27:44 +00:00
|
|
|
|
return;
|
|
|
|
|
|
2013-04-17 11:13:46 +00:00
|
|
|
|
expose_area = cairo_region_copy (region);
|
|
|
|
|
cairo_region_translate (expose_area, dx, dy);
|
|
|
|
|
cairo_region_union (expose_area, region);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2013-04-19 15:40:58 +00:00
|
|
|
|
gdk_window_invalidate_region_full (window, expose_area, FALSE);
|
2013-04-17 11:13:46 +00:00
|
|
|
|
cairo_region_destroy (expose_area);
|
2008-06-27 14:27:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
2010-05-25 22:38:44 +00:00
|
|
|
|
static void
|
2011-05-03 22:01:10 +00:00
|
|
|
|
gdk_window_set_cursor_internal (GdkWindow *window,
|
|
|
|
|
GdkDevice *device,
|
|
|
|
|
GdkCursor *cursor)
|
2010-05-25 22:38:44 +00:00
|
|
|
|
{
|
2011-05-03 22:01:10 +00:00
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
|
return;
|
2010-05-25 22:38:44 +00:00
|
|
|
|
|
2014-10-28 04:18:15 +00:00
|
|
|
|
g_assert (gdk_window_get_display (window) == gdk_device_get_display (device));
|
|
|
|
|
|
2011-03-07 15:01:46 +00:00
|
|
|
|
if (window->window_type == GDK_WINDOW_ROOT ||
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->window_type == GDK_WINDOW_FOREIGN)
|
2017-11-02 01:02:37 +00:00
|
|
|
|
GDK_DEVICE_GET_CLASS (device)->set_window_cursor (device, window, cursor);
|
2011-05-03 22:01:10 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
GdkPointerWindowInfo *pointer_info;
|
|
|
|
|
GdkDisplay *display;
|
|
|
|
|
|
|
|
|
|
display = gdk_window_get_display (window);
|
|
|
|
|
pointer_info = _gdk_display_get_pointer_info (display, device);
|
|
|
|
|
|
|
|
|
|
if (_gdk_window_event_parent_of (window, pointer_info->window_under_pointer))
|
|
|
|
|
update_cursor (display, device);
|
|
|
|
|
}
|
2010-05-25 22:38: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.
|
|
|
|
|
*
|
2014-05-08 19:55:50 +00:00
|
|
|
|
* Returns: (nullable) (transfer none): 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-30 10:10:45 +00:00
|
|
|
|
*
|
2009-07-16 06:16:01 +00:00
|
|
|
|
* Since: 2.18
|
|
|
|
|
*/
|
|
|
|
|
GdkCursor *
|
|
|
|
|
gdk_window_get_cursor (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return window->cursor;
|
2009-07-16 06:16:01 +00:00
|
|
|
|
}
|
|
|
|
|
|
2008-06-27 14:27:44 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_cursor:
|
|
|
|
|
* @window: a #GdkWindow
|
2010-06-27 14:39:02 +00:00
|
|
|
|
* @cursor: (allow-none): a cursor
|
2008-06-27 14:27:44 +00:00
|
|
|
|
*
|
2014-10-28 04:44:33 +00:00
|
|
|
|
* Sets the default mouse pointer for a #GdkWindow.
|
|
|
|
|
*
|
|
|
|
|
* Note that @cursor must be for the same display as @window.
|
|
|
|
|
*
|
|
|
|
|
* Use gdk_cursor_new_for_display() or gdk_cursor_new_from_pixbuf() 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 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)
|
|
|
|
|
{
|
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));
|
|
|
|
|
|
2010-08-29 00:08:47 +00:00
|
|
|
|
display = gdk_window_get_display (window);
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->cursor)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
2010-12-20 02:23:44 +00:00
|
|
|
|
g_object_unref (window->cursor);
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->cursor = NULL;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!GDK_WINDOW_DESTROYED (window))
|
|
|
|
|
{
|
2015-12-15 22:20:40 +00:00
|
|
|
|
GdkDevice *device;
|
|
|
|
|
GList *seats, *s;
|
2011-05-03 22:01:10 +00:00
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
if (cursor)
|
2010-12-20 02:23:44 +00:00
|
|
|
|
window->cursor = g_object_ref (cursor);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2015-12-15 22:20:40 +00:00
|
|
|
|
seats = gdk_display_list_seats (display);
|
2011-05-03 22:01:10 +00:00
|
|
|
|
|
2015-12-15 22:20:40 +00:00
|
|
|
|
for (s = seats; s; s = s->next)
|
2011-05-03 22:01:10 +00:00
|
|
|
|
{
|
2017-07-25 13:37:10 +00:00
|
|
|
|
GList *devices, *d;
|
|
|
|
|
|
2015-12-15 22:20:40 +00:00
|
|
|
|
device = gdk_seat_get_pointer (s->data);
|
2011-05-03 22:01:10 +00:00
|
|
|
|
gdk_window_set_cursor_internal (window, device, window->cursor);
|
2017-07-25 13:37:10 +00:00
|
|
|
|
|
|
|
|
|
devices = gdk_seat_get_slaves (s->data, GDK_SEAT_CAPABILITY_TABLET_STYLUS);
|
|
|
|
|
for (d = devices; d; d = d->next)
|
|
|
|
|
{
|
|
|
|
|
device = gdk_device_get_associated_device (d->data);
|
|
|
|
|
gdk_window_set_cursor_internal (window, device, window->cursor);
|
|
|
|
|
}
|
|
|
|
|
g_list_free (devices);
|
2011-05-03 22:01:10 +00:00
|
|
|
|
}
|
|
|
|
|
|
2015-12-15 22:20:40 +00:00
|
|
|
|
g_list_free (seats);
|
2015-09-06 19:02:34 +00:00
|
|
|
|
g_object_notify_by_pspec (G_OBJECT (window), properties[PROP_CURSOR]);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
2008-06-27 14:27:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
2010-05-25 22:38:44 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_device_cursor:
|
|
|
|
|
* @window: a #GdkWindow.
|
2010-12-20 22:04:44 +00:00
|
|
|
|
* @device: a master, pointer #GdkDevice.
|
2010-05-25 22:38:44 +00:00
|
|
|
|
*
|
|
|
|
|
* Retrieves a #GdkCursor pointer for the @device 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.
|
|
|
|
|
*
|
2014-05-08 19:55:50 +00:00
|
|
|
|
* Returns: (nullable) (transfer none): 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
|
2010-05-25 22:38:44 +00:00
|
|
|
|
*
|
|
|
|
|
* Since: 3.0
|
|
|
|
|
**/
|
|
|
|
|
GdkCursor *
|
|
|
|
|
gdk_window_get_device_cursor (GdkWindow *window,
|
|
|
|
|
GdkDevice *device)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
g_return_val_if_fail (GDK_IS_DEVICE (device), NULL);
|
2010-12-20 22:04:44 +00:00
|
|
|
|
g_return_val_if_fail (gdk_device_get_source (device) != GDK_SOURCE_KEYBOARD, NULL);
|
|
|
|
|
g_return_val_if_fail (gdk_device_get_device_type (device) == GDK_DEVICE_TYPE_MASTER, NULL);
|
2010-05-25 22:38:44 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return g_hash_table_lookup (window->device_cursor, device);
|
2010-05-25 22:38:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_device_cursor:
|
2014-01-20 21:55:07 +00:00
|
|
|
|
* @window: a #GdkWindow
|
2010-12-20 22:04:44 +00:00
|
|
|
|
* @device: a master, pointer #GdkDevice
|
2010-05-25 22:38:44 +00:00
|
|
|
|
* @cursor: a #GdkCursor
|
|
|
|
|
*
|
|
|
|
|
* Sets a specific #GdkCursor for a given device when it gets inside @window.
|
2010-08-27 13:21:58 +00:00
|
|
|
|
* Use gdk_cursor_new_for_display() or gdk_cursor_new_from_pixbuf() to create
|
2010-05-25 22:38:44 +00:00
|
|
|
|
* 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 parent window. Most windows should
|
|
|
|
|
* use this default.
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.0
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_device_cursor (GdkWindow *window,
|
|
|
|
|
GdkDevice *device,
|
|
|
|
|
GdkCursor *cursor)
|
|
|
|
|
{
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
2010-05-26 11:22:25 +00:00
|
|
|
|
g_return_if_fail (GDK_IS_DEVICE (device));
|
2010-12-20 22:04:44 +00:00
|
|
|
|
g_return_if_fail (gdk_device_get_source (device) != GDK_SOURCE_KEYBOARD);
|
|
|
|
|
g_return_if_fail (gdk_device_get_device_type (device) == GDK_DEVICE_TYPE_MASTER);
|
2010-05-25 22:38:44 +00:00
|
|
|
|
|
|
|
|
|
if (!cursor)
|
2010-11-22 23:55:39 +00:00
|
|
|
|
g_hash_table_remove (window->device_cursor, device);
|
2010-05-25 22:38:44 +00:00
|
|
|
|
else
|
2010-12-20 02:23:44 +00:00
|
|
|
|
g_hash_table_replace (window->device_cursor, device, g_object_ref (cursor));
|
2010-05-25 22:38:44 +00:00
|
|
|
|
|
2011-05-03 22:01:10 +00:00
|
|
|
|
gdk_window_set_cursor_internal (window, device, cursor);
|
2010-05-25 22:38:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
2008-06-27 14:27:44 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_geometry:
|
|
|
|
|
* @window: a #GdkWindow
|
2010-12-04 13:55:11 +00:00
|
|
|
|
* @x: (out) (allow-none): return location for X coordinate of window (relative to its parent)
|
|
|
|
|
* @y: (out) (allow-none): return location for Y coordinate of window (relative to its parent)
|
|
|
|
|
* @width: (out) (allow-none): return location for width of window
|
|
|
|
|
* @height: (out) (allow-none): return location for height of window
|
2008-06-27 14:27:44 +00:00
|
|
|
|
*
|
|
|
|
|
* Any of the return location arguments to this function may be %NULL,
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* if you aren’t interested in getting the value of that field.
|
2008-06-27 14:27:44 +00:00
|
|
|
|
*
|
|
|
|
|
* 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.
|
|
|
|
|
*
|
2014-02-02 06:22:14 +00:00
|
|
|
|
* Note: If @window is not a toplevel, it is much better
|
2010-09-20 10:53:46 +00:00
|
|
|
|
* to call gdk_window_get_position(), gdk_window_get_width() and
|
|
|
|
|
* gdk_window_get_height() instead, because it avoids the roundtrip to
|
|
|
|
|
* the X server and because these functions support the full 32-bit
|
|
|
|
|
* coordinate space, whereas gdk_window_get_geometry() is restricted to
|
|
|
|
|
* the 16-bit coordinates of X11.
|
2014-02-02 06:22:14 +00:00
|
|
|
|
*/
|
2008-06-27 14:27:44 +00:00
|
|
|
|
void
|
|
|
|
|
gdk_window_get_geometry (GdkWindow *window,
|
|
|
|
|
gint *x,
|
|
|
|
|
gint *y,
|
|
|
|
|
gint *width,
|
2010-12-05 13:36:59 +00:00
|
|
|
|
gint *height)
|
2008-06-27 14:27:44 +00:00
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
GdkWindow *parent;
|
2010-11-22 19:42:00 +00:00
|
|
|
|
GdkWindowImplClass *impl_class;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
|
|
if (!GDK_WINDOW_DESTROYED (window))
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (gdk_window_has_impl (window))
|
2009-08-16 20:24:00 +00:00
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
2010-11-22 19:42:00 +00:00
|
|
|
|
impl_class->get_geometry (window, x, y,
|
2010-12-05 13:40:35 +00:00
|
|
|
|
width, height);
|
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 */
|
2010-11-22 23:55:39 +00:00
|
|
|
|
parent = window->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)
|
2010-11-22 23:55:39 +00:00
|
|
|
|
*x = window->x;
|
2010-04-15 10:59:44 +00:00
|
|
|
|
if (y)
|
2010-11-22 23:55:39 +00:00
|
|
|
|
*y = window->y;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
if (width)
|
2010-11-22 23:55:39 +00:00
|
|
|
|
*width = window->width;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
if (height)
|
2010-11-22 23:55:39 +00:00
|
|
|
|
*height = window->height;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
2008-06-27 14:27:44 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2010-09-20 09:10:37 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_width:
|
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Returns the width of the given @window.
|
|
|
|
|
*
|
|
|
|
|
* On the X11 platform the returned size is the size reported in the
|
|
|
|
|
* most-recently-processed configure event, rather than the current
|
|
|
|
|
* size on the X server.
|
2010-09-28 00:59:08 +00:00
|
|
|
|
*
|
2010-09-20 09:10:37 +00:00
|
|
|
|
* Returns: The width of @window
|
2010-09-28 00:59:08 +00:00
|
|
|
|
*
|
|
|
|
|
* Since: 2.24
|
2010-09-20 09:10:37 +00:00
|
|
|
|
*/
|
|
|
|
|
int
|
|
|
|
|
gdk_window_get_width (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return window->width;
|
2010-09-20 09:10:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_height:
|
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Returns the height of the given @window.
|
|
|
|
|
*
|
|
|
|
|
* On the X11 platform the returned size is the size reported in the
|
|
|
|
|
* most-recently-processed configure event, rather than the current
|
|
|
|
|
* size on the X server.
|
2010-09-28 00:59:08 +00:00
|
|
|
|
*
|
2010-09-20 09:10:37 +00:00
|
|
|
|
* Returns: The height of @window
|
2010-09-28 00:59:08 +00:00
|
|
|
|
*
|
|
|
|
|
* Since: 2.24
|
2010-09-20 09:10:37 +00:00
|
|
|
|
*/
|
|
|
|
|
int
|
|
|
|
|
gdk_window_get_height (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return window->height;
|
2010-09-20 09:10:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2008-06-27 14:27:44 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_origin:
|
|
|
|
|
* @window: a #GdkWindow
|
2010-12-04 13:55:11 +00:00
|
|
|
|
* @x: (out) (allow-none): return location for X coordinate
|
|
|
|
|
* @y: (out) (allow-none): return location for Y coordinate
|
2008-06-27 14:27:44 +00:00
|
|
|
|
*
|
|
|
|
|
* 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.)
|
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: not meaningful, ignore
|
2008-06-27 14:27:44 +00:00
|
|
|
|
*/
|
|
|
|
|
gint
|
|
|
|
|
gdk_window_get_origin (GdkWindow *window,
|
|
|
|
|
gint *x,
|
|
|
|
|
gint *y)
|
|
|
|
|
{
|
2014-02-28 02:07:18 +00:00
|
|
|
|
gint dummy_x, dummy_y;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
|
|
|
|
|
|
2014-02-28 02:07:18 +00:00
|
|
|
|
gdk_window_get_root_coords (window,
|
|
|
|
|
0, 0,
|
|
|
|
|
x ? x : &dummy_x,
|
|
|
|
|
y ? y : &dummy_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
|
2011-01-18 09:10:30 +00:00
|
|
|
|
* @root_x: (out): return location for X coordinate
|
|
|
|
|
* @root_y: (out): return location for Y coordinate
|
2009-06-08 15:03:47 +00:00
|
|
|
|
*
|
|
|
|
|
* Obtains the position of a window position in root
|
|
|
|
|
* window coordinates. This is similar to
|
2015-01-18 20:26:49 +00:00
|
|
|
|
* gdk_window_get_origin() but allows you to pass
|
2009-06-08 15:03:47 +00:00
|
|
|
|
* 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)
|
|
|
|
|
{
|
2010-11-22 19:42:00 +00:00
|
|
|
|
GdkWindowImplClass *impl_class;
|
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
|
|
|
|
|
2009-06-30 07:30:53 +00:00
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
|
{
|
2011-09-28 22:16:30 +00:00
|
|
|
|
*root_x = 0;
|
|
|
|
|
*root_y = 0;
|
2009-06-30 07:30:53 +00:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
2014-02-28 02:02:22 +00:00
|
|
|
|
impl_class->get_root_coords (window->impl_window,
|
2010-11-22 23:55:39 +00:00
|
|
|
|
x + window->abs_x,
|
|
|
|
|
y + window->abs_y,
|
2009-08-31 08:44:11 +00:00
|
|
|
|
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
|
2014-02-07 18:01:26 +00:00
|
|
|
|
* @x: X coordinate in child’s coordinate system
|
|
|
|
|
* @y: Y coordinate in child’s coordinate system
|
2010-05-25 15:54:16 +00:00
|
|
|
|
* @parent_x: (out) (allow-none): return location for X coordinate
|
2014-02-07 18:01:26 +00:00
|
|
|
|
* in parent’s coordinate system, or %NULL
|
2010-05-25 15:54:16 +00:00
|
|
|
|
* @parent_y: (out) (allow-none): return location for Y coordinate
|
2014-02-07 18:01:26 +00:00
|
|
|
|
* in parent’s coordinate system, or %NULL
|
2010-04-15 10:59:44 +00:00
|
|
|
|
*
|
|
|
|
|
* Transforms window coordinates from a child window to its parent
|
2016-10-25 07:54:37 +00:00
|
|
|
|
* window. Calling this function is equivalent to adding the return
|
|
|
|
|
* values of gdk_window_get_position() to the child coordinates.
|
2010-04-15 10:59:44 +00:00
|
|
|
|
*
|
|
|
|
|
* 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)
|
|
|
|
|
{
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
2016-10-25 07:54:37 +00:00
|
|
|
|
if (parent_x)
|
|
|
|
|
*parent_x = x + window->x;
|
2010-04-15 10:59:44 +00:00
|
|
|
|
|
2016-10-25 07:54:37 +00:00
|
|
|
|
if (parent_y)
|
|
|
|
|
*parent_y = y + window->y;
|
2010-04-15 10:59:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_coords_from_parent:
|
|
|
|
|
* @window: a child window
|
2014-02-07 18:01:26 +00:00
|
|
|
|
* @parent_x: X coordinate in parent’s coordinate system
|
|
|
|
|
* @parent_y: Y coordinate in parent’s coordinate system
|
|
|
|
|
* @x: (out) (allow-none): return location for X coordinate in child’s coordinate system
|
|
|
|
|
* @y: (out) (allow-none): return location for Y coordinate in child’s coordinate system
|
2010-04-15 10:59:44 +00:00
|
|
|
|
*
|
|
|
|
|
* Transforms window coordinates from a parent window to a child
|
2016-10-25 07:54:37 +00:00
|
|
|
|
* window.
|
2010-04-15 10:59:44 +00:00
|
|
|
|
*
|
2016-10-25 07:54:37 +00:00
|
|
|
|
* Calling this function is equivalent to subtracting the return
|
|
|
|
|
* values of gdk_window_get_position() from the parent coordinates.
|
2010-04-15 10:59:44 +00:00
|
|
|
|
*
|
|
|
|
|
* 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)
|
|
|
|
|
{
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
2016-10-25 07:54:37 +00:00
|
|
|
|
if (x)
|
|
|
|
|
*x = parent_x - window->x;
|
2010-04-15 10:59:44 +00:00
|
|
|
|
|
2016-10-25 07:54:37 +00:00
|
|
|
|
if (y)
|
|
|
|
|
*y = parent_y - window->y;
|
2010-04-15 10:59:44 +00:00
|
|
|
|
}
|
2008-12-06 21:43:01 +00:00
|
|
|
|
|
2008-06-27 14:27:44 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_shape_combine_region:
|
|
|
|
|
* @window: a #GdkWindow
|
2011-05-03 07:30:49 +00:00
|
|
|
|
* @shape_region: (allow-none): region of window to be non-transparent
|
2008-06-27 14:27:44 +00:00
|
|
|
|
* @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,
|
2010-08-14 04:46:25 +00:00
|
|
|
|
* so that the window may be nonrectangular.
|
2008-06-27 14:27:44 +00:00
|
|
|
|
*
|
|
|
|
|
* 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,
|
2010-06-28 12:54:37 +00:00
|
|
|
|
const cairo_region_t *shape_region,
|
2009-06-01 10:04:36 +00:00
|
|
|
|
gint offset_x,
|
|
|
|
|
gint offset_y)
|
2008-06-27 14:27:44 +00:00
|
|
|
|
{
|
2010-06-28 12:54:37 +00:00
|
|
|
|
cairo_region_t *old_region, *new_region, *diff;
|
2008-06-27 14:27:44 +00:00
|
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
2008-12-16 19:09:20 +00:00
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
|
return;
|
|
|
|
|
|
2010-12-15 03:21:39 +00:00
|
|
|
|
if (!window->shape && shape_region == NULL)
|
|
|
|
|
return;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->shaped = (shape_region != NULL);
|
2008-12-16 19:09:20 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->shape)
|
|
|
|
|
cairo_region_destroy (window->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))
|
2010-11-22 23:55:39 +00:00
|
|
|
|
old_region = cairo_region_copy (window->clip_region);
|
2008-12-16 19:09:20 +00:00
|
|
|
|
|
|
|
|
|
if (shape_region)
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->shape = cairo_region_copy (shape_region);
|
|
|
|
|
cairo_region_translate (window->shape, offset_x, offset_y);
|
2008-12-16 19:09:20 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->shape = NULL;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2013-04-17 15:05:49 +00:00
|
|
|
|
recompute_visible_regions (window, FALSE);
|
2009-01-16 14:09:39 +00:00
|
|
|
|
|
|
|
|
|
if (old_region)
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
new_region = cairo_region_copy (window->clip_region);
|
2009-01-16 14:09:39 +00:00
|
|
|
|
|
|
|
|
|
/* New area in the window, needs invalidation */
|
2010-06-28 12:44:12 +00:00
|
|
|
|
diff = cairo_region_copy (new_region);
|
|
|
|
|
cairo_region_subtract (diff, old_region);
|
2009-01-16 14:09:39 +00:00
|
|
|
|
|
2013-04-19 15:40:58 +00:00
|
|
|
|
gdk_window_invalidate_region_full (window, diff, TRUE);
|
2009-01-16 14:09:39 +00:00
|
|
|
|
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_region_destroy (diff);
|
2009-01-16 14:09:39 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (!gdk_window_is_toplevel (window))
|
2009-01-16 14:09:39 +00:00
|
|
|
|
{
|
|
|
|
|
/* New area in the non-root parent window, needs invalidation */
|
2010-06-28 12:44:12 +00:00
|
|
|
|
diff = cairo_region_copy (old_region);
|
|
|
|
|
cairo_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 */
|
2010-11-22 23:55:39 +00:00
|
|
|
|
cairo_region_translate (diff, window->x, window->y);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2013-04-19 15:40:58 +00:00
|
|
|
|
gdk_window_invalidate_region_full (window->parent, diff, TRUE);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_region_destroy (diff);
|
2009-01-16 14:09:39 +00:00
|
|
|
|
}
|
|
|
|
|
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_region_destroy (new_region);
|
|
|
|
|
cairo_region_destroy (old_region);
|
2009-01-16 14:09:39 +00:00
|
|
|
|
}
|
2008-12-16 19:09:20 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
do_child_shapes (GdkWindow *window,
|
|
|
|
|
gboolean merge)
|
|
|
|
|
{
|
|
|
|
|
GdkRectangle r;
|
2010-06-28 12:54:37 +00:00
|
|
|
|
cairo_region_t *region;
|
2008-12-16 19:09:20 +00:00
|
|
|
|
|
|
|
|
|
r.x = 0;
|
|
|
|
|
r.y = 0;
|
2010-11-22 23:55:39 +00:00
|
|
|
|
r.width = window->width;
|
|
|
|
|
r.height = window->height;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-06-28 12:44:12 +00:00
|
|
|
|
region = cairo_region_create_rectangle (&r);
|
2013-04-17 14:36:52 +00:00
|
|
|
|
remove_child_area (window, FALSE, region);
|
2008-12-16 19:09:20 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (merge && window->shape)
|
|
|
|
|
cairo_region_subtract (region, window->shape);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2014-02-04 11:03:03 +00:00
|
|
|
|
cairo_region_xor_rectangle (region, &r);
|
|
|
|
|
|
2008-12-16 19:09:20 +00:00
|
|
|
|
gdk_window_shape_combine_region (window, region, 0, 0);
|
2014-02-21 20:07:11 +00:00
|
|
|
|
|
|
|
|
|
cairo_region_destroy (region);
|
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
|
2010-08-14 04:46:25 +00:00
|
|
|
|
* for @window. See gdk_window_shape_combine_region().
|
2008-06-27 14:27:44 +00:00
|
|
|
|
*
|
|
|
|
|
* This function is distinct from gdk_window_set_child_shapes()
|
2014-02-07 18:01:26 +00:00
|
|
|
|
* because it includes @window’s shape mask in the set of shapes to
|
2008-06-27 14:27:44 +00:00
|
|
|
|
* 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_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
|
2014-02-05 19:50:22 +00:00
|
|
|
|
* “clickable”.
|
2008-12-17 10:24:46 +00:00
|
|
|
|
*
|
|
|
|
|
* 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,
|
2010-06-28 12:54:37 +00:00
|
|
|
|
const cairo_region_t *shape_region,
|
2008-12-17 10:24:46 +00:00
|
|
|
|
gint offset_x,
|
|
|
|
|
gint offset_y)
|
|
|
|
|
{
|
2010-11-22 19:42:00 +00:00
|
|
|
|
GdkWindowImplClass *impl_class;
|
2008-12-17 10:24:46 +00:00
|
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
|
return;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->input_shape)
|
|
|
|
|
cairo_region_destroy (window->input_shape);
|
2008-12-17 10:24:46 +00:00
|
|
|
|
|
|
|
|
|
if (shape_region)
|
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->input_shape = cairo_region_copy (shape_region);
|
|
|
|
|
cairo_region_translate (window->input_shape, offset_x, offset_y);
|
2008-12-17 10:24:46 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->input_shape = NULL;
|
2008-12-17 10:24:46 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (gdk_window_has_impl (window))
|
2009-08-31 08:44:11 +00:00
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
|
|
|
|
impl_class->input_shape_combine_region (window, window->input_shape, 0, 0);
|
2009-08-31 08:44:11 +00:00
|
|
|
|
}
|
2008-12-17 10:24:46 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
do_child_input_shapes (GdkWindow *window,
|
|
|
|
|
gboolean merge)
|
|
|
|
|
{
|
|
|
|
|
GdkRectangle r;
|
2010-06-28 12:54:37 +00:00
|
|
|
|
cairo_region_t *region;
|
2008-12-17 10:24:46 +00:00
|
|
|
|
|
|
|
|
|
r.x = 0;
|
|
|
|
|
r.y = 0;
|
2010-11-22 23:55:39 +00:00
|
|
|
|
r.width = window->width;
|
|
|
|
|
r.height = window->height;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-06-28 12:44:12 +00:00
|
|
|
|
region = cairo_region_create_rectangle (&r);
|
2013-04-17 14:36:52 +00:00
|
|
|
|
remove_child_area (window, TRUE, region);
|
2008-12-17 10:24:46 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (merge && window->shape)
|
|
|
|
|
cairo_region_subtract (region, window->shape);
|
|
|
|
|
if (merge && window->input_shape)
|
|
|
|
|
cairo_region_subtract (region, window->input_shape);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2014-02-04 11:03:03 +00:00
|
|
|
|
cairo_region_xor_rectangle (region, &r);
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
2015-06-08 13:36:43 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_pass_through:
|
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
* @pass_through: a boolean
|
|
|
|
|
*
|
|
|
|
|
* Sets whether input to the window is passed through to the window
|
|
|
|
|
* below.
|
|
|
|
|
*
|
|
|
|
|
* The default value of this is %FALSE, which means that pointer
|
|
|
|
|
* events that happen inside the window are send first to the window,
|
|
|
|
|
* but if the event is not selected by the event mask then the event
|
|
|
|
|
* is sent to the parent window, and so on up the hierarchy.
|
|
|
|
|
*
|
|
|
|
|
* If @pass_through is %TRUE then such pointer events happen as if the
|
|
|
|
|
* window wasn't there at all, and thus will be sent first to any
|
|
|
|
|
* windows below @window. This is useful if the window is used in a
|
|
|
|
|
* transparent fashion. In the terminology of the web this would be called
|
|
|
|
|
* "pointer-events: none".
|
|
|
|
|
*
|
|
|
|
|
* Note that a window with @pass_through %TRUE can still have a subwindow
|
|
|
|
|
* without pass through, so you can get events on a subset of a window. And in
|
|
|
|
|
* that cases you would get the in-between related events such as the pointer
|
|
|
|
|
* enter/leave events on its way to the destination window.
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.18
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_pass_through (GdkWindow *window,
|
2015-06-23 21:27:09 +00:00
|
|
|
|
gboolean pass_through)
|
2015-06-08 13:36:43 +00:00
|
|
|
|
{
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
|
|
window->pass_through = !!pass_through;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_pass_through:
|
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Returns whether input to the window is passed through to the window
|
|
|
|
|
* below.
|
|
|
|
|
*
|
|
|
|
|
* See gdk_window_set_pass_through() for details
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.18
|
|
|
|
|
**/
|
|
|
|
|
gboolean
|
|
|
|
|
gdk_window_get_pass_through (GdkWindow *window)
|
|
|
|
|
{
|
2015-06-17 10:01:48 +00:00
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
|
2015-06-08 13:36:43 +00:00
|
|
|
|
|
|
|
|
|
return window->pass_through;
|
|
|
|
|
}
|
|
|
|
|
|
2008-12-17 10:24:46 +00:00
|
|
|
|
/**
|
|
|
|
|
* 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
|
2010-08-14 04:46:25 +00:00
|
|
|
|
* for @window. See gdk_window_input_shape_combine_region().
|
2008-12-17 10:24:46 +00:00
|
|
|
|
*
|
|
|
|
|
* This function is distinct from gdk_window_set_child_input_shapes()
|
2014-02-07 18:01:26 +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
|
|
|
|
|
2010-05-25 15:54:16 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_modal_hint:
|
|
|
|
|
* @window: A toplevel #GdkWindow.
|
|
|
|
|
*
|
|
|
|
|
* Determines whether or not the window manager is hinted that @window
|
|
|
|
|
* has modal behaviour.
|
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: whether or not the window has the modal hint set.
|
2010-05-25 15:54:16 +00:00
|
|
|
|
*
|
|
|
|
|
* Since: 2.22
|
|
|
|
|
*/
|
|
|
|
|
gboolean
|
|
|
|
|
gdk_window_get_modal_hint (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return window->modal_hint;
|
2010-05-25 15:54:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_accept_focus:
|
|
|
|
|
* @window: a toplevel #GdkWindow.
|
|
|
|
|
*
|
|
|
|
|
* Determines whether or not the desktop environment shuld be hinted that
|
|
|
|
|
* the window does not want to receive input focus.
|
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: whether or not the window should receive input focus.
|
2010-05-25 15:54:16 +00:00
|
|
|
|
*
|
|
|
|
|
* Since: 2.22
|
|
|
|
|
*/
|
|
|
|
|
gboolean
|
|
|
|
|
gdk_window_get_accept_focus (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return window->accept_focus;
|
2010-05-25 15:54:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_focus_on_map:
|
|
|
|
|
* @window: a toplevel #GdkWindow.
|
|
|
|
|
*
|
|
|
|
|
* Determines whether or not the desktop environment should be hinted that the
|
|
|
|
|
* window does not want to receive input focus when it is mapped.
|
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: whether or not the window wants to receive input focus when
|
2010-05-25 15:54:16 +00:00
|
|
|
|
* it is mapped.
|
|
|
|
|
*
|
|
|
|
|
* Since: 2.22
|
|
|
|
|
*/
|
|
|
|
|
gboolean
|
|
|
|
|
gdk_window_get_focus_on_map (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return window->focus_on_map;
|
2010-05-25 15:54:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_is_input_only:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Determines whether or not the window is an input only window.
|
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: %TRUE if @window is input only
|
2010-05-25 15:54:16 +00:00
|
|
|
|
*
|
|
|
|
|
* Since: 2.22
|
|
|
|
|
*/
|
|
|
|
|
gboolean
|
|
|
|
|
gdk_window_is_input_only (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return window->input_only;
|
2010-05-25 15:54:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_is_shaped:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Determines whether or not the window is shaped.
|
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: %TRUE if @window is shaped
|
2010-05-25 15:54:16 +00:00
|
|
|
|
*
|
|
|
|
|
* Since: 2.22
|
|
|
|
|
*/
|
|
|
|
|
gboolean
|
|
|
|
|
gdk_window_is_shaped (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return window->shaped;
|
2010-05-25 15:54:16 +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 going up to the native
|
|
|
|
|
toplevel */
|
|
|
|
|
static GdkWindow *
|
2010-11-22 23:55:39 +00:00
|
|
|
|
get_event_toplevel (GdkWindow *window)
|
2009-06-08 13:57:59 +00:00
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
GdkWindow *parent;
|
2009-06-08 13:57:59 +00:00
|
|
|
|
|
2016-10-25 07:54:37 +00:00
|
|
|
|
while ((parent = window->parent) != NULL &&
|
2009-07-18 13:04:06 +00:00
|
|
|
|
(parent->window_type != GDK_WINDOW_ROOT))
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window = parent;
|
2009-06-08 13:57:59 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return window;
|
2009-06-08 13:57:59 +00:00
|
|
|
|
}
|
|
|
|
|
|
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;
|
|
|
|
|
|
2016-10-25 07:54:37 +00:00
|
|
|
|
w = w->parent;
|
2009-06-08 13:57:59 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
2010-05-25 22:38:44 +00:00
|
|
|
|
update_cursor (GdkDisplay *display,
|
|
|
|
|
GdkDevice *device)
|
2009-06-08 13:57:59 +00:00
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
GdkWindow *cursor_window, *parent, *toplevel;
|
2009-09-08 09:48:20 +00:00
|
|
|
|
GdkWindow *pointer_window;
|
2010-05-25 22:38:44 +00:00
|
|
|
|
GdkPointerWindowInfo *pointer_info;
|
|
|
|
|
GdkDeviceGrabInfo *grab;
|
2010-08-17 13:39:03 +00:00
|
|
|
|
GdkCursor *cursor;
|
2009-06-08 13:57:59 +00:00
|
|
|
|
|
2010-05-25 22:38:44 +00:00
|
|
|
|
pointer_info = _gdk_display_get_pointer_info (display, device);
|
|
|
|
|
pointer_window = 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. */
|
2010-05-25 22:38:44 +00:00
|
|
|
|
grab = _gdk_display_get_last_device_grab (display, device);
|
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))
|
2010-05-25 22:38:44 +00:00
|
|
|
|
{
|
|
|
|
|
/* use the cursor from the grab window */
|
2010-11-22 23:55:39 +00:00
|
|
|
|
cursor_window = grab->window;
|
2010-05-25 22:38:44 +00:00
|
|
|
|
}
|
2009-09-08 09:48:20 +00:00
|
|
|
|
else
|
2010-05-25 22:38:44 +00:00
|
|
|
|
{
|
|
|
|
|
/* otherwise use the cursor from the pointer window */
|
2010-11-22 23:55:39 +00:00
|
|
|
|
cursor_window = pointer_window;
|
2010-05-25 22:38:44 +00:00
|
|
|
|
}
|
2009-09-08 09:48:20 +00:00
|
|
|
|
|
|
|
|
|
/* Find the first window with the cursor actually set, as
|
|
|
|
|
the cursor is inherited from the parent */
|
|
|
|
|
while (cursor_window->cursor == NULL &&
|
2014-05-14 10:53:54 +00:00
|
|
|
|
!g_hash_table_contains (cursor_window->device_cursor, device) &&
|
2016-10-25 07:54:37 +00:00
|
|
|
|
(parent = cursor_window->parent) != NULL &&
|
2009-09-08 09:48:20 +00:00
|
|
|
|
parent->window_type != GDK_WINDOW_ROOT)
|
|
|
|
|
cursor_window = parent;
|
2009-06-08 13:57:59 +00:00
|
|
|
|
|
2010-08-17 13:39:03 +00:00
|
|
|
|
cursor = g_hash_table_lookup (cursor_window->device_cursor, device);
|
|
|
|
|
|
|
|
|
|
if (!cursor)
|
|
|
|
|
cursor = cursor_window->cursor;
|
|
|
|
|
|
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. */
|
2010-11-22 23:55:39 +00:00
|
|
|
|
toplevel = get_event_toplevel (pointer_window);
|
2017-11-02 01:02:37 +00:00
|
|
|
|
GDK_DEVICE_GET_CLASS (device)->set_window_cursor (device, toplevel, cursor);
|
2009-06-08 13:57:59 +00:00
|
|
|
|
}
|
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
static gboolean
|
2010-11-22 23:55:39 +00:00
|
|
|
|
point_in_window (GdkWindow *window,
|
|
|
|
|
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 ||
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_region_contains_point (window->shape,
|
2008-12-17 10:24:46 +00:00
|
|
|
|
x, y)) &&
|
|
|
|
|
(window->input_shape == NULL ||
|
2010-06-28 12:44:12 +00:00
|
|
|
|
cairo_region_contains_point (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
|
|
|
|
|
2015-06-08 13:36:43 +00:00
|
|
|
|
/* Same as point_in_window, except it also takes pass_through and its
|
|
|
|
|
interaction with child windows into account */
|
|
|
|
|
static gboolean
|
|
|
|
|
point_in_input_window (GdkWindow *window,
|
|
|
|
|
gdouble x,
|
|
|
|
|
gdouble y,
|
|
|
|
|
GdkWindow **input_window,
|
|
|
|
|
gdouble *input_window_x,
|
|
|
|
|
gdouble *input_window_y)
|
|
|
|
|
{
|
|
|
|
|
GdkWindow *sub;
|
|
|
|
|
double child_x, child_y;
|
|
|
|
|
GList *l;
|
|
|
|
|
|
|
|
|
|
if (!point_in_window (window, x, y))
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
|
|
if (!window->pass_through)
|
|
|
|
|
{
|
|
|
|
|
if (input_window)
|
|
|
|
|
{
|
|
|
|
|
*input_window = window;
|
|
|
|
|
*input_window_x = x;
|
|
|
|
|
*input_window_y = y;
|
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* For pass-through, must be over a child input window */
|
|
|
|
|
|
|
|
|
|
/* Children is ordered in reverse stack order, i.e. first is topmost */
|
|
|
|
|
for (l = window->children; l != NULL; l = l->next)
|
|
|
|
|
{
|
|
|
|
|
sub = l->data;
|
|
|
|
|
|
|
|
|
|
if (!GDK_WINDOW_IS_MAPPED (sub))
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
gdk_window_coords_from_parent ((GdkWindow *)sub,
|
|
|
|
|
x, y,
|
|
|
|
|
&child_x, &child_y);
|
|
|
|
|
if (point_in_input_window (sub, child_x, child_y,
|
|
|
|
|
input_window, input_window_x, input_window_y))
|
|
|
|
|
{
|
|
|
|
|
if (input_window)
|
|
|
|
|
gdk_window_coords_to_parent (sub,
|
|
|
|
|
*input_window_x,
|
|
|
|
|
*input_window_y,
|
|
|
|
|
input_window_x,
|
|
|
|
|
input_window_y);
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
2009-06-04 16:45:35 +00:00
|
|
|
|
GdkWindow *
|
|
|
|
|
_gdk_window_find_child_at (GdkWindow *window,
|
2013-07-03 09:52:58 +00:00
|
|
|
|
double x,
|
|
|
|
|
double y)
|
2009-06-04 16:45:35 +00:00
|
|
|
|
{
|
2010-11-22 23:55:39 +00:00
|
|
|
|
GdkWindow *sub;
|
2009-06-04 16:45:35 +00:00
|
|
|
|
double child_x, child_y;
|
|
|
|
|
GList *l;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (point_in_window (window, x, y))
|
2009-06-04 16:45:35 +00:00
|
|
|
|
{
|
|
|
|
|
/* Children is ordered in reverse stack order, i.e. first is topmost */
|
2010-11-22 23:55:39 +00:00
|
|
|
|
for (l = window->children; l != NULL; l = l->next)
|
2009-06-04 16:45:35 +00:00
|
|
|
|
{
|
|
|
|
|
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);
|
2015-06-08 13:36:43 +00:00
|
|
|
|
if (point_in_input_window (sub, child_x, child_y,
|
|
|
|
|
NULL, NULL, NULL))
|
2009-06-04 16:45:35 +00:00
|
|
|
|
return (GdkWindow *)sub;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
GdkWindow *
|
2010-11-22 23:55:39 +00:00
|
|
|
|
_gdk_window_find_descendant_at (GdkWindow *window,
|
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
|
|
|
|
{
|
2015-06-08 13:36:43 +00:00
|
|
|
|
GdkWindow *sub, *input_window;
|
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
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (point_in_window (window, x, y))
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
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 */
|
2010-11-22 23:55:39 +00:00
|
|
|
|
for (l = window->children; l != NULL; l = l->next)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
|
|
|
|
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);
|
2015-06-08 13:36:43 +00:00
|
|
|
|
if (point_in_input_window (sub, child_x, child_y,
|
|
|
|
|
&input_window, &child_x, &child_y))
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
|
|
|
|
x = child_x;
|
|
|
|
|
y = child_y;
|
2015-06-08 13:36:43 +00:00
|
|
|
|
window = input_window;
|
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
|
|
|
|
while (found);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
/* Not in window at all */
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window = NULL;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (found_x)
|
|
|
|
|
*found_x = x;
|
|
|
|
|
if (found_y)
|
|
|
|
|
*found_y = y;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return 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
|
|
|
|
}
|
|
|
|
|
|
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);
|
2010-08-29 00:08:47 +00:00
|
|
|
|
display = gdk_window_get_display (window);
|
2009-06-11 20:11:48 +00:00
|
|
|
|
|
2010-11-25 11:28:08 +00:00
|
|
|
|
if (toplevel)
|
|
|
|
|
{
|
2011-03-10 05:08:15 +00:00
|
|
|
|
if (GDK_WINDOW_IMPL_GET_CLASS (toplevel->impl)->beep (toplevel))
|
2010-11-25 11:28:08 +00:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* If windows fail to beep, we beep the display. */
|
|
|
|
|
gdk_display_beep (display);
|
2009-06-11 20:11:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
2010-05-25 22:38:44 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_support_multidevice:
|
|
|
|
|
* @window: a #GdkWindow.
|
|
|
|
|
* @support_multidevice: %TRUE to enable multidevice support in @window.
|
|
|
|
|
*
|
|
|
|
|
* This function will enable multidevice features in @window.
|
|
|
|
|
*
|
|
|
|
|
* Multidevice aware windows will need to handle properly multiple,
|
|
|
|
|
* per device enter/leave events, device grabs and grab ownerships.
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.0
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_support_multidevice (GdkWindow *window,
|
|
|
|
|
gboolean support_multidevice)
|
|
|
|
|
{
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
|
return;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->support_multidevice == support_multidevice)
|
2010-05-25 22:38:44 +00:00
|
|
|
|
return;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
window->support_multidevice = support_multidevice;
|
2010-05-25 22:38:44 +00:00
|
|
|
|
|
|
|
|
|
/* FIXME: What to do if called when some pointers are inside the window ? */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_support_multidevice:
|
|
|
|
|
* @window: a #GdkWindow.
|
|
|
|
|
*
|
|
|
|
|
* Returns %TRUE if the window is aware of the existence of multiple
|
|
|
|
|
* devices.
|
|
|
|
|
*
|
|
|
|
|
* Returns: %TRUE if the window handles multidevice features.
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.0
|
|
|
|
|
**/
|
|
|
|
|
gboolean
|
|
|
|
|
gdk_window_get_support_multidevice (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
|
|
|
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
return window->support_multidevice;
|
2010-05-25 22:38:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
/* send motion events if the right buttons are down */
|
2012-01-05 00:04:15 +00:00
|
|
|
|
|
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
|
|
|
|
|
2017-10-06 19:19:42 +00:00
|
|
|
|
switch ((guint) type)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
|
|
|
|
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_BUTTON_RELEASE:
|
|
|
|
|
event->button.time = the_time;
|
|
|
|
|
event->button.axes = NULL;
|
|
|
|
|
event->button.state = the_state;
|
|
|
|
|
break;
|
|
|
|
|
|
2011-02-28 19:53:42 +00:00
|
|
|
|
case GDK_TOUCH_BEGIN:
|
|
|
|
|
case GDK_TOUCH_UPDATE:
|
|
|
|
|
case GDK_TOUCH_END:
|
|
|
|
|
case GDK_TOUCH_CANCEL:
|
|
|
|
|
event->touch.time = the_time;
|
|
|
|
|
event->touch.axes = NULL;
|
|
|
|
|
event->touch.state = the_state;
|
|
|
|
|
break;
|
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
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;
|
|
|
|
|
|
2015-07-09 16:44:09 +00:00
|
|
|
|
case GDK_TOUCHPAD_SWIPE:
|
|
|
|
|
event->touchpad_swipe.time = the_time;
|
|
|
|
|
event->touchpad_swipe.state = the_state;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case GDK_TOUCHPAD_PINCH:
|
|
|
|
|
event->touchpad_pinch.time = the_time;
|
|
|
|
|
event->touchpad_pinch.state = the_state;
|
|
|
|
|
break;
|
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
case GDK_FOCUS_CHANGE:
|
|
|
|
|
case GDK_CONFIGURE:
|
|
|
|
|
case GDK_MAP:
|
|
|
|
|
case GDK_UNMAP:
|
|
|
|
|
case GDK_CLIENT_EVENT:
|
|
|
|
|
case GDK_DELETE:
|
|
|
|
|
case GDK_DESTROY:
|
|
|
|
|
case GDK_EXPOSE:
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (event_in_queue)
|
|
|
|
|
{
|
|
|
|
|
if (before_event)
|
2010-08-29 00:08:47 +00:00
|
|
|
|
_gdk_event_queue_insert_before (gdk_window_get_display (window), event_in_queue, event);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
else
|
2010-08-29 00:08:47 +00:00
|
|
|
|
_gdk_event_queue_insert_after (gdk_window_get_display (window), event_in_queue, event);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
2010-08-29 00:08:47 +00:00
|
|
|
|
_gdk_event_queue_append (gdk_window_get_display (window), event);
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
|
|
|
|
return event;
|
|
|
|
|
}
|
|
|
|
|
|
2008-12-15 13:02:52 +00:00
|
|
|
|
void
|
|
|
|
|
_gdk_display_set_window_under_pointer (GdkDisplay *display,
|
2010-05-25 22:38:44 +00:00
|
|
|
|
GdkDevice *device,
|
|
|
|
|
GdkWindow *window)
|
2008-12-15 09:24:54 +00:00
|
|
|
|
{
|
2010-05-25 22:38:44 +00:00
|
|
|
|
GdkPointerWindowInfo *device_info;
|
|
|
|
|
|
|
|
|
|
device_info = _gdk_display_get_pointer_info (display, device);
|
|
|
|
|
|
|
|
|
|
if (device_info->window_under_pointer)
|
|
|
|
|
g_object_unref (device_info->window_under_pointer);
|
|
|
|
|
device_info->window_under_pointer = window;
|
2008-12-15 13:02:52 +00:00
|
|
|
|
|
|
|
|
|
if (window)
|
2010-05-25 22:38:44 +00:00
|
|
|
|
{
|
|
|
|
|
g_object_ref (window);
|
|
|
|
|
update_cursor (display, device);
|
|
|
|
|
}
|
2008-12-15 09:24:54 +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-12-18 10:30:10 +00:00
|
|
|
|
#ifdef DEBUG_WINDOW_PRINTING
|
2012-08-23 09:59:00 +00:00
|
|
|
|
|
|
|
|
|
#ifdef GDK_WINDOWING_X11
|
|
|
|
|
#include "x11/gdkx.h"
|
|
|
|
|
#endif
|
|
|
|
|
|
2008-12-18 10:30:10 +00:00
|
|
|
|
static void
|
2010-11-22 23:55:39 +00:00
|
|
|
|
gdk_window_print (GdkWindow *window,
|
2008-12-18 10:30:10 +00:00
|
|
|
|
int indent)
|
|
|
|
|
{
|
2012-08-23 09:59:00 +00:00
|
|
|
|
char *s;
|
2009-08-28 10:48:13 +00:00
|
|
|
|
const char *window_types[] = {
|
|
|
|
|
"root",
|
|
|
|
|
"toplevel",
|
|
|
|
|
"child",
|
|
|
|
|
"dialog",
|
|
|
|
|
"temp",
|
|
|
|
|
"foreign",
|
2016-10-25 07:54:37 +00:00
|
|
|
|
"subsurface"
|
2009-08-28 10:48:13 +00:00
|
|
|
|
};
|
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
|
2010-10-05 22:08:25 +00:00
|
|
|
|
g_print (" impl(0x%lx)", gdk_x11_window_get_xid (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
|
|
|
|
|
2013-03-01 13:55:54 +00:00
|
|
|
|
if (window->alpha != 255)
|
|
|
|
|
g_print (" alpha[%d]",
|
|
|
|
|
window->alpha);
|
|
|
|
|
|
2012-08-23 09:59:00 +00:00
|
|
|
|
s = print_region (window->clip_region);
|
|
|
|
|
g_print (" clipbox[%s]", s);
|
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)
|
|
|
|
|
{
|
|
|
|
|
GList *l;
|
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
if (window->input_only && !include_input_only)
|
2008-12-18 10:30:10 +00:00
|
|
|
|
return;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
gdk_window_print (window, indent);
|
2008-12-18 10:30:10 +00:00
|
|
|
|
|
2010-11-22 23:55:39 +00:00
|
|
|
|
for (l = window->children; l != NULL; l = l->next)
|
2008-12-18 10:30:10 +00:00
|
|
|
|
gdk_window_print_tree (l->data, indent + 4, include_input_only);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif /* DEBUG_WINDOW_PRINTING */
|
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
void
|
|
|
|
|
_gdk_windowing_got_event (GdkDisplay *display,
|
2012-02-24 03:20:07 +00:00
|
|
|
|
GList *event_link,
|
|
|
|
|
GdkEvent *event,
|
|
|
|
|
gulong serial)
|
2008-07-18 13:03:42 +00:00
|
|
|
|
{
|
|
|
|
|
GdkWindow *event_window;
|
2012-09-26 14:28:06 +00:00
|
|
|
|
gboolean unlink_event = FALSE;
|
2010-05-25 22:38:44 +00:00
|
|
|
|
GdkDeviceGrabInfo *button_release_grab;
|
2012-02-24 00:59:52 +00:00
|
|
|
|
GdkPointerWindowInfo *pointer_info = NULL;
|
2010-12-13 01:12:43 +00:00
|
|
|
|
GdkDevice *device, *source_device;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2016-02-28 15:22:31 +00:00
|
|
|
|
_gdk_display_update_last_event (display, event);
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2010-05-25 22:38:44 +00:00
|
|
|
|
device = gdk_event_get_device (event);
|
2010-12-13 01:12:43 +00:00
|
|
|
|
source_device = gdk_event_get_source_device (event);
|
2010-05-25 22:38:44 +00:00
|
|
|
|
|
|
|
|
|
if (device)
|
|
|
|
|
{
|
2016-08-04 17:10:21 +00:00
|
|
|
|
if (gdk_device_get_source (device) != GDK_SOURCE_KEYBOARD &&
|
|
|
|
|
gdk_device_get_source (device) != GDK_SOURCE_TABLET_PAD)
|
2011-12-03 14:04:19 +00:00
|
|
|
|
{
|
2011-12-06 19:29:22 +00:00
|
|
|
|
pointer_info = _gdk_display_get_pointer_info (display, device);
|
|
|
|
|
|
2011-12-03 14:04:19 +00:00
|
|
|
|
if (source_device != pointer_info->last_slave &&
|
|
|
|
|
gdk_device_get_device_type (source_device) == GDK_DEVICE_TYPE_SLAVE)
|
|
|
|
|
pointer_info->last_slave = source_device;
|
2013-01-23 16:55:59 +00:00
|
|
|
|
else if (pointer_info->last_slave)
|
2011-12-03 14:04:19 +00:00
|
|
|
|
source_device = pointer_info->last_slave;
|
|
|
|
|
}
|
|
|
|
|
|
2010-12-13 01:12:43 +00:00
|
|
|
|
_gdk_display_device_grab_update (display, device, source_device, serial);
|
2010-05-25 22:38:44 +00:00
|
|
|
|
|
2016-05-01 00:59:16 +00:00
|
|
|
|
if (gdk_device_get_input_mode (device) == GDK_MODE_DISABLED ||
|
2010-05-25 22:38:44 +00:00
|
|
|
|
!_gdk_display_check_grab_ownership (display, device, serial))
|
|
|
|
|
{
|
|
|
|
|
/* Device events are blocked by another
|
|
|
|
|
* device grab, or the device is disabled
|
|
|
|
|
*/
|
|
|
|
|
unlink_event = TRUE;
|
|
|
|
|
goto out;
|
|
|
|
|
}
|
|
|
|
|
}
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2008-07-18 13:03:42 +00:00
|
|
|
|
event_window = event->any.window;
|
|
|
|
|
if (!event_window)
|
2012-09-26 14:28:06 +00:00
|
|
|
|
goto out;
|
2009-06-01 10:04:36 +00:00
|
|
|
|
|
2009-08-27 13:55:01 +00:00
|
|
|
|
#ifdef DEBUG_WINDOW_PRINTING
|
|
|
|
|
if (event->type == GDK_KEY_PRESS &&
|
|
|
|
|
(event->key.keyval == 0xa7 ||
|
|
|
|
|
event->key.keyval == 0xbd))
|
|
|
|
|
{
|
2012-02-24 03:20:07 +00:00
|
|
|
|
gdk_window_print_tree (event_window, 0, event->key.keyval == 0xbd);
|
2009-08-27 13:55:01 +00:00
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
2017-03-31 15:46:35 +00:00
|
|
|
|
if (event_window->window_type == GDK_WINDOW_ROOT)
|
2012-09-26 14:28:06 +00:00
|
|
|
|
goto out;
|
2008-07-18 13:03:42 +00:00
|
|
|
|
|
2017-03-31 15:46:35 +00:00
|
|
|
|
if (event->type == GDK_ENTER_NOTIFY)
|
|
|
|
|
_gdk_display_set_window_under_pointer (display, device, event_window);
|
|
|
|
|
else if (event->type == GDK_LEAVE_NOTIFY)
|
|
|
|
|
_gdk_display_set_window_under_pointer (display, device, NULL);
|
2009-01-31 18:42:44 +00:00
|
|
|
|
|
2011-12-28 23:06:45 +00:00
|
|
|
|
if ((event->type == GDK_BUTTON_RELEASE ||
|
2015-12-09 11:39:43 +00:00
|
|
|
|
event->type == GDK_TOUCH_CANCEL ||
|
2011-12-28 23:06:45 +00:00
|
|
|
|
event->type == GDK_TOUCH_END) &&
|
|
|
|
|
!event->any.send_event)
|
2009-01-31 18:42:44 +00:00
|
|
|
|
{
|
2011-12-28 23:06:45 +00:00
|
|
|
|
if (event->type == GDK_BUTTON_RELEASE ||
|
2016-05-10 19:16:45 +00:00
|
|
|
|
gdk_event_get_pointer_emulated (event))
|
2012-02-24 03:20:07 +00:00
|
|
|
|
{
|
2011-12-28 23:06:45 +00:00
|
|
|
|
button_release_grab =
|
|
|
|
|
_gdk_display_has_device_grab (display, device, 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;
|
|
|
|
|
button_release_grab->implicit_ungrab = FALSE;
|
|
|
|
|
_gdk_display_device_grab_update (display, device, source_device, serial);
|
|
|
|
|
}
|
2012-02-24 03:20:07 +00:00
|
|
|
|
}
|
2009-01-31 18:42:44 +00:00
|
|
|
|
}
|
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);
|
|
|
|
|
}
|
2012-09-26 14:28:06 +00:00
|
|
|
|
|
|
|
|
|
/* This does two things - first it sees if there are motions at the
|
|
|
|
|
* end of the queue that can be compressed. Second, if there is just
|
|
|
|
|
* a single motion that won't be dispatched because it is a compression
|
|
|
|
|
* candidate it queues up flushing the event queue.
|
|
|
|
|
*/
|
|
|
|
|
_gdk_event_queue_handle_motion_compression (display);
|
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
|
|
|
|
}
|
|
|
|
|
|
2010-08-12 21:43:11 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_create_similar_surface:
|
|
|
|
|
* @window: window to make new surface similar to
|
|
|
|
|
* @content: the content for the new surface
|
|
|
|
|
* @width: width of the new surface
|
|
|
|
|
* @height: height of the new surface
|
|
|
|
|
*
|
|
|
|
|
* Create a new surface that is as compatible as possible with the
|
|
|
|
|
* given @window. For example the new surface will have the same
|
|
|
|
|
* fallback resolution and font options as @window. Generally, the new
|
|
|
|
|
* surface will also use the same backend as @window, unless that is
|
|
|
|
|
* not possible for some reason. The type of the returned surface may
|
|
|
|
|
* be examined with cairo_surface_get_type().
|
|
|
|
|
*
|
|
|
|
|
* Initially the surface contents are all 0 (transparent if contents
|
|
|
|
|
* have transparency, black otherwise.)
|
|
|
|
|
*
|
|
|
|
|
* Returns: a pointer to the newly allocated surface. The caller
|
|
|
|
|
* owns the surface and should call cairo_surface_destroy() when done
|
|
|
|
|
* with it.
|
|
|
|
|
*
|
|
|
|
|
* This function always returns a valid pointer, but it will return a
|
2014-02-05 19:50:22 +00:00
|
|
|
|
* pointer to a “nil” surface if @other is already in an error state
|
2010-08-12 21:43:11 +00:00
|
|
|
|
* or any other error occurs.
|
|
|
|
|
*
|
|
|
|
|
* Since: 2.22
|
|
|
|
|
**/
|
|
|
|
|
cairo_surface_t *
|
|
|
|
|
gdk_window_create_similar_surface (GdkWindow * window,
|
|
|
|
|
cairo_content_t content,
|
|
|
|
|
int width,
|
|
|
|
|
int height)
|
|
|
|
|
{
|
2014-11-10 19:28:43 +00:00
|
|
|
|
GdkDisplay *display;
|
2016-02-28 15:22:31 +00:00
|
|
|
|
GdkRenderingMode rendering_mode;
|
2010-08-12 21:43:11 +00:00
|
|
|
|
cairo_surface_t *window_surface, *surface;
|
2013-06-04 08:41:44 +00:00
|
|
|
|
double sx, sy;
|
2010-08-12 21:43:11 +00:00
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
2013-06-04 08:41:44 +00:00
|
|
|
|
|
2012-08-22 15:01:15 +00:00
|
|
|
|
window_surface = gdk_window_ref_impl_surface (window);
|
2013-06-04 08:41:44 +00:00
|
|
|
|
sx = sy = 1;
|
|
|
|
|
cairo_surface_get_device_scale (window_surface, &sx, &sy);
|
|
|
|
|
|
2014-11-10 19:28:43 +00:00
|
|
|
|
display = gdk_window_get_display (window);
|
2016-02-28 15:22:31 +00:00
|
|
|
|
rendering_mode = gdk_display_get_rendering_mode (display);
|
|
|
|
|
|
|
|
|
|
switch (rendering_mode)
|
2011-03-11 00:10:37 +00:00
|
|
|
|
{
|
|
|
|
|
case GDK_RENDERING_MODE_RECORDING:
|
|
|
|
|
{
|
2013-09-05 17:30:23 +00:00
|
|
|
|
cairo_rectangle_t rect = { 0, 0, width * sx, height *sy };
|
2011-03-11 00:10:37 +00:00
|
|
|
|
surface = cairo_recording_surface_create (content, &rect);
|
2013-09-05 17:30:23 +00:00
|
|
|
|
cairo_surface_set_device_scale (surface, sx, sy);
|
2011-03-11 00:10:37 +00:00
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case GDK_RENDERING_MODE_IMAGE:
|
|
|
|
|
surface = cairo_image_surface_create (content == CAIRO_CONTENT_COLOR ? CAIRO_FORMAT_RGB24 :
|
|
|
|
|
content == CAIRO_CONTENT_ALPHA ? CAIRO_FORMAT_A8 : CAIRO_FORMAT_ARGB32,
|
2013-09-05 17:30:23 +00:00
|
|
|
|
width * sx, height * sy);
|
|
|
|
|
cairo_surface_set_device_scale (surface, sx, sy);
|
2011-03-11 00:10:37 +00:00
|
|
|
|
break;
|
|
|
|
|
case GDK_RENDERING_MODE_SIMILAR:
|
|
|
|
|
default:
|
|
|
|
|
surface = cairo_surface_create_similar (window_surface,
|
|
|
|
|
content,
|
|
|
|
|
width, height);
|
|
|
|
|
break;
|
|
|
|
|
}
|
2010-08-12 21:43:11 +00:00
|
|
|
|
|
|
|
|
|
cairo_surface_destroy (window_surface);
|
|
|
|
|
|
|
|
|
|
return surface;
|
|
|
|
|
}
|
|
|
|
|
|
2013-06-24 10:10:02 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_create_similar_image_surface:
|
2014-05-17 03:12:51 +00:00
|
|
|
|
* @window: (nullable): window to make new surface similar to, or
|
|
|
|
|
* %NULL if none
|
2013-06-24 10:10:02 +00:00
|
|
|
|
* @format: (type int): the format for the new surface
|
|
|
|
|
* @width: width of the new surface
|
|
|
|
|
* @height: height of the new surface
|
|
|
|
|
* @scale: the scale of the new surface, or 0 to use same as @window
|
|
|
|
|
*
|
|
|
|
|
* Create a new image surface that is efficient to draw on the
|
|
|
|
|
* given @window.
|
|
|
|
|
*
|
|
|
|
|
* Initially the surface contents are all 0 (transparent if contents
|
|
|
|
|
* have transparency, black otherwise.)
|
|
|
|
|
*
|
2016-07-11 15:55:10 +00:00
|
|
|
|
* The @width and @height of the new surface are not affected by
|
|
|
|
|
* the scaling factor of the @window, or by the @scale argument; they
|
|
|
|
|
* are the size of the surface in device pixels. If you wish to create
|
|
|
|
|
* an image surface capable of holding the contents of @window you can
|
|
|
|
|
* use:
|
|
|
|
|
*
|
|
|
|
|
* |[<!-- language="C" -->
|
|
|
|
|
* int scale = gdk_window_get_scale_factor (window);
|
|
|
|
|
* int width = gdk_window_get_width (window) * scale;
|
|
|
|
|
* int height = gdk_window_get_height (window) * scale;
|
|
|
|
|
*
|
|
|
|
|
* // format is set elsewhere
|
|
|
|
|
* cairo_surface_t *surface =
|
|
|
|
|
* gdk_window_create_similar_image_surface (window,
|
|
|
|
|
* format,
|
|
|
|
|
* width, height,
|
|
|
|
|
* scale);
|
|
|
|
|
* ]|
|
|
|
|
|
*
|
2016-12-15 12:17:57 +00:00
|
|
|
|
* Note that unlike cairo_surface_create_similar_image(), the new
|
|
|
|
|
* surface's device scale is set to @scale, or to the scale factor of
|
|
|
|
|
* @window if @scale is 0.
|
|
|
|
|
*
|
2013-06-24 10:10:02 +00:00
|
|
|
|
* Returns: a pointer to the newly allocated surface. The caller
|
|
|
|
|
* owns the surface and should call cairo_surface_destroy() when done
|
|
|
|
|
* with it.
|
|
|
|
|
*
|
|
|
|
|
* This function always returns a valid pointer, but it will return a
|
2014-02-05 19:50:22 +00:00
|
|
|
|
* pointer to a “nil” surface if @other is already in an error state
|
2013-06-24 10:10:02 +00:00
|
|
|
|
* or any other error occurs.
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.10
|
|
|
|
|
**/
|
|
|
|
|
cairo_surface_t *
|
|
|
|
|
gdk_window_create_similar_image_surface (GdkWindow * window,
|
|
|
|
|
cairo_format_t format,
|
|
|
|
|
int width,
|
|
|
|
|
int height,
|
|
|
|
|
int scale)
|
|
|
|
|
{
|
2017-11-06 00:30:54 +00:00
|
|
|
|
cairo_surface_t *surface;
|
2013-06-24 10:10:02 +00:00
|
|
|
|
|
2017-11-06 00:30:54 +00:00
|
|
|
|
g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
|
2013-06-24 10:10:02 +00:00
|
|
|
|
|
|
|
|
|
if (window == NULL)
|
2017-11-06 00:30:54 +00:00
|
|
|
|
{
|
|
|
|
|
surface = cairo_image_surface_create (format, width, height);
|
|
|
|
|
}
|
|
|
|
|
else if (GDK_WINDOW_IMPL_GET_CLASS (window->impl)->create_similar_image_surface)
|
|
|
|
|
{
|
|
|
|
|
surface =
|
2017-11-06 00:43:39 +00:00
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->create_similar_image_surface (window, format, width, height);
|
2017-11-06 00:30:54 +00:00
|
|
|
|
}
|
2013-07-03 14:03:25 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
2017-11-06 00:30:54 +00:00
|
|
|
|
cairo_surface_t *window_surface;
|
|
|
|
|
|
2013-07-03 14:03:25 +00:00
|
|
|
|
window_surface = gdk_window_ref_impl_surface (window);
|
|
|
|
|
surface =
|
|
|
|
|
cairo_surface_create_similar_image (window_surface,
|
|
|
|
|
format,
|
|
|
|
|
width,
|
|
|
|
|
height);
|
|
|
|
|
cairo_surface_destroy (window_surface);
|
|
|
|
|
}
|
2013-06-24 10:10:02 +00:00
|
|
|
|
|
2013-12-02 10:41:38 +00:00
|
|
|
|
if (scale == 0)
|
|
|
|
|
scale = gdk_window_get_scale_factor (window);
|
|
|
|
|
|
2013-06-24 10:10:02 +00:00
|
|
|
|
cairo_surface_set_device_scale (surface, scale, scale);
|
|
|
|
|
|
|
|
|
|
return surface;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2010-12-05 20:58:23 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_focus:
|
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
* @timestamp: timestamp of the event triggering the window focus
|
|
|
|
|
*
|
|
|
|
|
* Sets keyboard focus to @window. In most cases, gtk_window_present()
|
|
|
|
|
* should be used on a #GtkWindow, rather than calling this function.
|
|
|
|
|
*
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_focus (GdkWindow *window,
|
|
|
|
|
guint32 timestamp)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->focus (window, timestamp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_type_hint:
|
|
|
|
|
* @window: A toplevel #GdkWindow
|
|
|
|
|
* @hint: A hint of the function this window will have
|
|
|
|
|
*
|
|
|
|
|
* The application can use this call to provide a hint to the window
|
|
|
|
|
* manager about the functionality of a window. The window manager
|
|
|
|
|
* can use this information when determining the decoration and behaviour
|
|
|
|
|
* of the window.
|
|
|
|
|
*
|
|
|
|
|
* The hint must be set before the window is mapped.
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_type_hint (GdkWindow *window,
|
|
|
|
|
GdkWindowTypeHint hint)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_type_hint (window, hint);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_type_hint:
|
|
|
|
|
* @window: A toplevel #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* This function returns the type hint set for a window.
|
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: The type hint set for @window
|
2010-12-05 20:58:23 +00:00
|
|
|
|
*
|
|
|
|
|
* Since: 2.10
|
|
|
|
|
**/
|
|
|
|
|
GdkWindowTypeHint
|
|
|
|
|
gdk_window_get_type_hint (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
return GDK_WINDOW_IMPL_GET_CLASS (window->impl)->get_type_hint (window);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_modal_hint:
|
|
|
|
|
* @window: A toplevel #GdkWindow
|
|
|
|
|
* @modal: %TRUE if the window is modal, %FALSE otherwise.
|
|
|
|
|
*
|
|
|
|
|
* The application can use this hint to tell the window manager
|
|
|
|
|
* that a certain window has modal behaviour. The window manager
|
|
|
|
|
* can use this information to handle modal windows in a special
|
|
|
|
|
* way.
|
|
|
|
|
*
|
|
|
|
|
* You should only use this on windows for which you have
|
|
|
|
|
* previously called gdk_window_set_transient_for()
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_modal_hint (GdkWindow *window,
|
|
|
|
|
gboolean modal)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_modal_hint (window, modal);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_skip_taskbar_hint:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
* @skips_taskbar: %TRUE to skip the taskbar
|
|
|
|
|
*
|
|
|
|
|
* Toggles whether a window should appear in a task list or window
|
2014-02-07 18:01:26 +00:00
|
|
|
|
* list. If a window’s semantic type as specified with
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* gdk_window_set_type_hint() already fully describes the window, this
|
2014-01-28 06:54:48 +00:00
|
|
|
|
* function should not be called in addition,
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* instead you should allow the window to be treated according to
|
|
|
|
|
* standard policy for its semantic type.
|
|
|
|
|
*
|
|
|
|
|
* Since: 2.2
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_skip_taskbar_hint (GdkWindow *window,
|
|
|
|
|
gboolean skips_taskbar)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_skip_taskbar_hint (window, skips_taskbar);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_skip_pager_hint:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
* @skips_pager: %TRUE to skip the pager
|
|
|
|
|
*
|
|
|
|
|
* Toggles whether a window should appear in a pager (workspace
|
|
|
|
|
* switcher, or other desktop utility program that displays a small
|
|
|
|
|
* thumbnail representation of the windows on the desktop). If a
|
2014-02-07 18:01:26 +00:00
|
|
|
|
* window’s semantic type as specified with gdk_window_set_type_hint()
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* already fully describes the window, this function should
|
2014-01-28 06:54:48 +00:00
|
|
|
|
* not be called in addition, instead you should
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* allow the window to be treated according to standard policy for
|
|
|
|
|
* its semantic type.
|
|
|
|
|
*
|
|
|
|
|
* Since: 2.2
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_skip_pager_hint (GdkWindow *window,
|
|
|
|
|
gboolean skips_pager)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_skip_pager_hint (window, skips_pager);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_urgency_hint:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
* @urgent: %TRUE if the window is urgent
|
|
|
|
|
*
|
|
|
|
|
* Toggles whether a window needs the user's
|
|
|
|
|
* urgent attention.
|
|
|
|
|
*
|
|
|
|
|
* Since: 2.8
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_urgency_hint (GdkWindow *window,
|
|
|
|
|
gboolean urgent)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_urgency_hint (window, urgent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_geometry_hints:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
* @geometry: geometry hints
|
|
|
|
|
* @geom_mask: bitmask indicating fields of @geometry to pay attention to
|
|
|
|
|
*
|
|
|
|
|
* Sets the geometry hints for @window. Hints flagged in @geom_mask
|
|
|
|
|
* are set, hints not flagged in @geom_mask are unset.
|
|
|
|
|
* To unset all hints, use a @geom_mask of 0 and a @geometry of %NULL.
|
|
|
|
|
*
|
|
|
|
|
* This function provides hints to the windowing system about
|
|
|
|
|
* acceptable sizes for a toplevel window. The purpose of
|
|
|
|
|
* this is to constrain user resizing, but the windowing system
|
|
|
|
|
* will typically (but is not required to) also constrain the
|
|
|
|
|
* current size of the window to the provided values and
|
|
|
|
|
* constrain programatic resizing via gdk_window_resize() or
|
|
|
|
|
* gdk_window_move_resize().
|
|
|
|
|
*
|
|
|
|
|
* Note that on X11, this effect has no effect on windows
|
2016-11-04 01:37:11 +00:00
|
|
|
|
* of type %GDK_WINDOW_TEMP since these windows are not resizable
|
|
|
|
|
* by the user.
|
2010-12-05 20:58:23 +00:00
|
|
|
|
*
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* Since you can’t count on the windowing system doing the
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* constraints for programmatic resizes, you should generally
|
|
|
|
|
* call gdk_window_constrain_size() yourself to determine
|
|
|
|
|
* appropriate sizes.
|
|
|
|
|
*
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_geometry_hints (GdkWindow *window,
|
|
|
|
|
const GdkGeometry *geometry,
|
|
|
|
|
GdkWindowHints geom_mask)
|
|
|
|
|
{
|
2015-07-17 22:37:20 +00:00
|
|
|
|
g_return_if_fail (geometry != NULL || geom_mask == 0);
|
|
|
|
|
|
2010-12-05 20:58:23 +00:00
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_geometry_hints (window, geometry, geom_mask);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_title:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
* @title: title of @window
|
|
|
|
|
*
|
|
|
|
|
* Sets the title of a toplevel window, to be displayed in the titlebar.
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* If you haven’t explicitly set the icon name for the window
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* (using gdk_window_set_icon_name()), the icon name will be set to
|
|
|
|
|
* @title as well. @title must be in UTF-8 encoding (as with all
|
|
|
|
|
* user-readable strings in GDK/GTK+). @title may not be %NULL.
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_title (GdkWindow *window,
|
|
|
|
|
const gchar *title)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_title (window, title);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_role:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
* @role: a string indicating its role
|
|
|
|
|
*
|
|
|
|
|
* When using GTK+, typically you should use gtk_window_set_role() instead
|
|
|
|
|
* of this low-level function.
|
|
|
|
|
*
|
2014-02-07 18:01:26 +00:00
|
|
|
|
* The window manager and session manager use a window’s role to
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* distinguish it from other kinds of window in the same application.
|
|
|
|
|
* When an application is restarted after being saved in a previous
|
|
|
|
|
* session, all windows with the same title and role are treated as
|
|
|
|
|
* interchangeable. So if you have two windows with the same title
|
|
|
|
|
* that should be distinguished for session management purposes, you
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* should set the role on those windows. It doesn’t matter what string
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* you use for the role, as long as you have a different role for each
|
|
|
|
|
* non-interchangeable kind of window.
|
|
|
|
|
*
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_role (GdkWindow *window,
|
|
|
|
|
const gchar *role)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_role (window, role);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_startup_id:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
* @startup_id: a string with startup-notification identifier
|
|
|
|
|
*
|
|
|
|
|
* When using GTK+, typically you should use gtk_window_set_startup_id()
|
|
|
|
|
* instead of this low-level function.
|
|
|
|
|
*
|
|
|
|
|
* Since: 2.12
|
|
|
|
|
*
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_startup_id (GdkWindow *window,
|
|
|
|
|
const gchar *startup_id)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_startup_id (window, startup_id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_transient_for:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
* @parent: another toplevel #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Indicates to the window manager that @window is a transient dialog
|
|
|
|
|
* associated with the application window @parent. This allows the
|
|
|
|
|
* window manager to do things like center @window on @parent and
|
|
|
|
|
* keep @window above @parent.
|
|
|
|
|
*
|
2014-02-07 18:37:09 +00:00
|
|
|
|
* See gtk_window_set_transient_for() if you’re using #GtkWindow or
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* #GtkDialog.
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_transient_for (GdkWindow *window,
|
|
|
|
|
GdkWindow *parent)
|
|
|
|
|
{
|
2016-07-16 00:52:35 +00:00
|
|
|
|
window->transient_for = parent;
|
|
|
|
|
|
2010-12-05 20:58:23 +00:00
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_transient_for (window, parent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_root_origin:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
2011-01-18 09:10:30 +00:00
|
|
|
|
* @x: (out): return location for X position of window frame
|
|
|
|
|
* @y: (out): return location for Y position of window frame
|
2010-12-05 20:58:23 +00:00
|
|
|
|
*
|
|
|
|
|
* Obtains the top-left corner of the window manager frame in root
|
|
|
|
|
* window coordinates.
|
|
|
|
|
*
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_get_root_origin (GdkWindow *window,
|
|
|
|
|
gint *x,
|
|
|
|
|
gint *y)
|
|
|
|
|
{
|
2014-03-17 19:39:39 +00:00
|
|
|
|
GdkRectangle rect;
|
|
|
|
|
|
|
|
|
|
gdk_window_get_frame_extents (window, &rect);
|
|
|
|
|
|
|
|
|
|
if (x)
|
|
|
|
|
*x = rect.x;
|
|
|
|
|
|
|
|
|
|
if (y)
|
|
|
|
|
*y = rect.y;
|
2010-12-05 20:58:23 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_frame_extents:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
2012-02-29 18:40:41 +00:00
|
|
|
|
* @rect: (out): rectangle to fill with bounding box of the window frame
|
2010-12-05 20:58:23 +00:00
|
|
|
|
*
|
|
|
|
|
* Obtains the bounding box of the window, including window manager
|
|
|
|
|
* titlebar/borders if any. The frame position is given in root window
|
|
|
|
|
* coordinates. To get the position of the window itself (rather than
|
|
|
|
|
* the frame) in root window coordinates, use gdk_window_get_origin().
|
|
|
|
|
*
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_get_frame_extents (GdkWindow *window,
|
|
|
|
|
GdkRectangle *rect)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->get_frame_extents (window, rect);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_accept_focus:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
* @accept_focus: %TRUE if the window should receive input focus
|
|
|
|
|
*
|
|
|
|
|
* Setting @accept_focus to %FALSE hints the desktop environment that the
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* window doesn’t want to receive input focus.
|
2010-12-05 20:58:23 +00:00
|
|
|
|
*
|
|
|
|
|
* On X, it is the responsibility of the window manager to interpret this
|
|
|
|
|
* hint. ICCCM-compliant window manager usually respect it.
|
|
|
|
|
*
|
|
|
|
|
* Since: 2.4
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_accept_focus (GdkWindow *window,
|
|
|
|
|
gboolean accept_focus)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_accept_focus (window, accept_focus);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_focus_on_map:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
* @focus_on_map: %TRUE if the window should receive input focus when mapped
|
|
|
|
|
*
|
|
|
|
|
* Setting @focus_on_map to %FALSE hints the desktop environment that the
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* window doesn’t want to receive input focus when it is mapped.
|
|
|
|
|
* focus_on_map should be turned off for windows that aren’t triggered
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* interactively (such as popups from network activity).
|
|
|
|
|
*
|
|
|
|
|
* On X, it is the responsibility of the window manager to interpret
|
|
|
|
|
* this hint. Window managers following the freedesktop.org window
|
|
|
|
|
* manager extension specification should respect it.
|
|
|
|
|
*
|
|
|
|
|
* Since: 2.6
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_focus_on_map (GdkWindow *window,
|
|
|
|
|
gboolean focus_on_map)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_focus_on_map (window, focus_on_map);
|
|
|
|
|
}
|
|
|
|
|
|
2013-10-29 21:43:05 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_event_compression:
|
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
* @event_compression: %TRUE if motion events should be compressed
|
|
|
|
|
*
|
|
|
|
|
* Determines whether or not extra unprocessed motion events in
|
|
|
|
|
* the event queue can be discarded. If %TRUE only the most recent
|
|
|
|
|
* event will be delivered.
|
|
|
|
|
*
|
|
|
|
|
* Some types of applications, e.g. paint programs, need to see all
|
|
|
|
|
* motion events and will benefit from turning off event compression.
|
|
|
|
|
*
|
|
|
|
|
* By default, event compression is enabled.
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.12
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_event_compression (GdkWindow *window,
|
|
|
|
|
gboolean event_compression)
|
|
|
|
|
{
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
2015-02-01 22:30:10 +00:00
|
|
|
|
window->event_compression = !!event_compression;
|
2013-10-29 21:43:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_event_compression:
|
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Get the current event compression setting for this window.
|
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: %TRUE if motion events will be compressed
|
2013-10-29 21:43:05 +00:00
|
|
|
|
*
|
|
|
|
|
* Since: 3.12
|
|
|
|
|
**/
|
|
|
|
|
gboolean
|
|
|
|
|
gdk_window_get_event_compression (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), TRUE);
|
|
|
|
|
|
|
|
|
|
return window->event_compression;
|
|
|
|
|
}
|
|
|
|
|
|
2010-12-05 20:58:23 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_icon_list:
|
|
|
|
|
* @window: The #GdkWindow toplevel window to set the icon of.
|
2017-11-04 19:23:33 +00:00
|
|
|
|
* @surfaces: (transfer none) (element-type GdkTexture):
|
2017-10-23 11:43:50 +00:00
|
|
|
|
* A list of image surfaces, of different sizes.
|
2010-12-05 20:58:23 +00:00
|
|
|
|
*
|
|
|
|
|
* Sets a list of icons for the window. One of these will be used
|
|
|
|
|
* to represent the window when it has been iconified. The icon is
|
|
|
|
|
* usually shown in an icon box or some sort of task bar. Which icon
|
|
|
|
|
* size is shown depends on the window manager. The window manager
|
|
|
|
|
* can scale the icon but setting several size icons can give better
|
|
|
|
|
* image quality since the window manager may only need to scale the
|
|
|
|
|
* icon by a small amount or not at all.
|
|
|
|
|
*
|
2016-08-24 18:43:58 +00:00
|
|
|
|
* Note that some platforms don't support window icons.
|
|
|
|
|
*/
|
2010-12-05 20:58:23 +00:00
|
|
|
|
void
|
|
|
|
|
gdk_window_set_icon_list (GdkWindow *window,
|
2017-11-04 19:23:33 +00:00
|
|
|
|
GList *textures)
|
2010-12-05 20:58:23 +00:00
|
|
|
|
{
|
2017-11-04 19:23:33 +00:00
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_icon_list (window, textures);
|
2010-12-05 20:58:23 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_icon_name:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
2011-05-03 07:30:49 +00:00
|
|
|
|
* @name: (allow-none): name of window while iconified (minimized)
|
2010-12-05 20:58:23 +00:00
|
|
|
|
*
|
|
|
|
|
* Windows may have a name used while minimized, distinct from the
|
|
|
|
|
* name they display in their titlebar. Most of the time this is a bad
|
|
|
|
|
* idea from a user interface standpoint. But you can set such a name
|
|
|
|
|
* with this function, if you like.
|
|
|
|
|
*
|
|
|
|
|
* After calling this with a non-%NULL @name, calls to gdk_window_set_title()
|
|
|
|
|
* will not update the icon title.
|
|
|
|
|
*
|
|
|
|
|
* Using %NULL for @name unsets the icon title; further calls to
|
|
|
|
|
* gdk_window_set_title() will again update the icon title as well.
|
2016-08-24 18:43:58 +00:00
|
|
|
|
*
|
|
|
|
|
* Note that some platforms don't support window icons.
|
2010-12-05 20:58:23 +00:00
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_icon_name (GdkWindow *window,
|
|
|
|
|
const gchar *name)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_icon_name (window, name);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_iconify:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Asks to iconify (minimize) @window. The window manager may choose
|
|
|
|
|
* to ignore the request, but normally will honor it. Using
|
|
|
|
|
* gtk_window_iconify() is preferred, if you have a #GtkWindow widget.
|
|
|
|
|
*
|
|
|
|
|
* This function only makes sense when @window is a toplevel window.
|
|
|
|
|
*
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_iconify (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->iconify (window);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_deiconify:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Attempt to deiconify (unminimize) @window. On X11 the window manager may
|
|
|
|
|
* choose to ignore the request to deiconify. When using GTK+,
|
|
|
|
|
* use gtk_window_deiconify() instead of the #GdkWindow variant. Or better yet,
|
|
|
|
|
* you probably want to use gtk_window_present(), which raises the window, focuses it,
|
|
|
|
|
* unminimizes it, and puts it on the current desktop.
|
|
|
|
|
*
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_deiconify (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->deiconify (window);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_stick:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
*
|
2014-02-07 18:01:26 +00:00
|
|
|
|
* “Pins” a window such that it’s on all workspaces and does not scroll
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* with viewports, for window managers that have scrollable viewports.
|
|
|
|
|
* (When using #GtkWindow, gtk_window_stick() may be more useful.)
|
|
|
|
|
*
|
|
|
|
|
* On the X11 platform, this function depends on window manager
|
|
|
|
|
* support, so may have no effect with many window managers. However,
|
|
|
|
|
* GDK will do the best it can to convince the window manager to stick
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* the window. For window managers that don’t support this operation,
|
2014-02-07 18:01:26 +00:00
|
|
|
|
* there’s nothing you can do to force it to happen.
|
2010-12-05 20:58:23 +00:00
|
|
|
|
*
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_stick (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->stick (window);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_unstick:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Reverse operation for gdk_window_stick(); see gdk_window_stick(),
|
|
|
|
|
* and gtk_window_unstick().
|
|
|
|
|
*
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_unstick (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->unstick (window);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_maximize:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Maximizes the window. If the window was already maximized, then
|
|
|
|
|
* this function does nothing.
|
|
|
|
|
*
|
|
|
|
|
* On X11, asks the window manager to maximize @window, if the window
|
|
|
|
|
* manager supports this operation. Not all window managers support
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* this, and some deliberately ignore it or don’t have a concept of
|
|
|
|
|
* “maximized”; so you can’t rely on the maximization actually
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* happening. But it will happen with most standard window managers,
|
|
|
|
|
* and GDK makes a best effort to get it to happen.
|
|
|
|
|
*
|
|
|
|
|
* On Windows, reliably maximizes the window.
|
|
|
|
|
*
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_maximize (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->maximize (window);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_unmaximize:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
*
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* Unmaximizes the window. If the window wasn’t maximized, then this
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* function does nothing.
|
|
|
|
|
*
|
|
|
|
|
* On X11, asks the window manager to unmaximize @window, if the
|
|
|
|
|
* window manager supports this operation. Not all window managers
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* support this, and some deliberately ignore it or don’t have a
|
|
|
|
|
* concept of “maximized”; so you can’t rely on the unmaximization
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* actually happening. But it will happen with most standard window
|
|
|
|
|
* managers, and GDK makes a best effort to get it to happen.
|
|
|
|
|
*
|
|
|
|
|
* On Windows, reliably unmaximizes the window.
|
|
|
|
|
*
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_unmaximize (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->unmaximize (window);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_fullscreen:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Moves the window into fullscreen mode. This means the
|
|
|
|
|
* window covers the entire screen and is above any panels
|
|
|
|
|
* or task bars.
|
|
|
|
|
*
|
|
|
|
|
* If the window was already fullscreen, then this function does nothing.
|
|
|
|
|
*
|
|
|
|
|
* On X11, asks the window manager to put @window in a fullscreen
|
|
|
|
|
* state, if the window manager supports this operation. Not all
|
|
|
|
|
* window managers support this, and some deliberately ignore it or
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* don’t have a concept of “fullscreen”; so you can’t rely on the
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* fullscreenification actually happening. But it will happen with
|
|
|
|
|
* most standard window managers, and GDK makes a best effort to get
|
|
|
|
|
* it to happen.
|
|
|
|
|
*
|
|
|
|
|
* Since: 2.2
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_fullscreen (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->fullscreen (window);
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-13 16:30:42 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_fullscreen_on_monitor:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
* @monitor: Which monitor to display fullscreen on.
|
|
|
|
|
*
|
|
|
|
|
* Moves the window into fullscreen mode on the given monitor. This means
|
|
|
|
|
* the window covers the entire screen and is above any panels or task bars.
|
|
|
|
|
*
|
|
|
|
|
* If the window was already fullscreen, then this function does nothing.
|
|
|
|
|
* Since: UNRELEASED
|
|
|
|
|
**/
|
|
|
|
|
void
|
2017-11-01 15:52:56 +00:00
|
|
|
|
gdk_window_fullscreen_on_monitor (GdkWindow *window,
|
|
|
|
|
GdkMonitor *monitor)
|
2015-07-13 16:30:42 +00:00
|
|
|
|
{
|
2017-11-01 15:52:56 +00:00
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
g_return_if_fail (GDK_IS_MONITOR (monitor));
|
|
|
|
|
g_return_if_fail (gdk_monitor_get_display (monitor) == gdk_window_get_display (window));
|
|
|
|
|
g_return_if_fail (gdk_monitor_is_valid (monitor));
|
2015-07-13 16:30:42 +00:00
|
|
|
|
|
|
|
|
|
if (GDK_WINDOW_IMPL_GET_CLASS (window->impl)->fullscreen_on_monitor != NULL)
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->fullscreen_on_monitor (window, monitor);
|
|
|
|
|
else
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->fullscreen (window);
|
|
|
|
|
}
|
|
|
|
|
|
2013-01-21 10:49:45 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_fullscreen_mode:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
* @mode: fullscreen mode
|
|
|
|
|
*
|
|
|
|
|
* Specifies whether the @window should span over all monitors (in a multi-head
|
|
|
|
|
* setup) or only the current monitor when in fullscreen mode.
|
|
|
|
|
*
|
|
|
|
|
* The @mode argument is from the #GdkFullscreenMode enumeration.
|
|
|
|
|
* If #GDK_FULLSCREEN_ON_ALL_MONITORS is specified, the fullscreen @window will
|
2017-11-01 21:08:04 +00:00
|
|
|
|
* span over all monitors of the display.
|
2013-01-21 10:49:45 +00:00
|
|
|
|
*
|
2017-11-01 21:08:04 +00:00
|
|
|
|
* On X11, searches through the list of monitors display the ones
|
|
|
|
|
* which delimit the 4 edges of the entire display and will ask the window
|
2013-01-21 10:49:45 +00:00
|
|
|
|
* manager to span the @window over these monitors.
|
|
|
|
|
*
|
|
|
|
|
* If the XINERAMA extension is not available or not usable, this function
|
|
|
|
|
* has no effect.
|
|
|
|
|
*
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* Not all window managers support this, so you can’t rely on the fullscreen
|
2013-01-21 10:49:45 +00:00
|
|
|
|
* window to span over the multiple monitors when #GDK_FULLSCREEN_ON_ALL_MONITORS
|
|
|
|
|
* is specified.
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.8
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_fullscreen_mode (GdkWindow *window,
|
|
|
|
|
GdkFullscreenMode mode)
|
|
|
|
|
{
|
|
|
|
|
GdkWindowImplClass *impl_class;
|
|
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
|
|
if (window->fullscreen_mode != mode)
|
|
|
|
|
{
|
|
|
|
|
window->fullscreen_mode = mode;
|
|
|
|
|
|
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
|
|
|
|
if (impl_class->apply_fullscreen_mode != NULL)
|
|
|
|
|
impl_class->apply_fullscreen_mode (window);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_fullscreen_mode:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Obtains the #GdkFullscreenMode of the @window.
|
|
|
|
|
*
|
|
|
|
|
* Returns: The #GdkFullscreenMode applied to the window when fullscreen.
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.8
|
|
|
|
|
**/
|
|
|
|
|
GdkFullscreenMode
|
|
|
|
|
gdk_window_get_fullscreen_mode (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), GDK_FULLSCREEN_ON_CURRENT_MONITOR);
|
|
|
|
|
|
|
|
|
|
return window->fullscreen_mode;
|
|
|
|
|
}
|
|
|
|
|
|
2010-12-05 20:58:23 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_unfullscreen:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Moves the window out of fullscreen mode. If the window was not
|
|
|
|
|
* fullscreen, does nothing.
|
|
|
|
|
*
|
|
|
|
|
* On X11, asks the window manager to move @window out of the fullscreen
|
|
|
|
|
* state, if the window manager supports this operation. Not all
|
|
|
|
|
* window managers support this, and some deliberately ignore it or
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* don’t have a concept of “fullscreen”; so you can’t rely on the
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* unfullscreenification actually happening. But it will happen with
|
|
|
|
|
* most standard window managers, and GDK makes a best effort to get
|
|
|
|
|
* it to happen.
|
|
|
|
|
*
|
|
|
|
|
* Since: 2.2
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_unfullscreen (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->unfullscreen (window);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_keep_above:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
* @setting: whether to keep @window above other windows
|
|
|
|
|
*
|
|
|
|
|
* Set if @window must be kept above other windows. If the
|
|
|
|
|
* window was already above, then this function does nothing.
|
|
|
|
|
*
|
|
|
|
|
* On X11, asks the window manager to keep @window above, if the window
|
|
|
|
|
* manager supports this operation. Not all window managers support
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* this, and some deliberately ignore it or don’t have a concept of
|
|
|
|
|
* “keep above”; so you can’t rely on the window being kept above.
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* But it will happen with most standard window managers,
|
|
|
|
|
* and GDK makes a best effort to get it to happen.
|
|
|
|
|
*
|
|
|
|
|
* Since: 2.4
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_keep_above (GdkWindow *window,
|
|
|
|
|
gboolean setting)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_keep_above (window, setting);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_keep_below:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
* @setting: whether to keep @window below other windows
|
|
|
|
|
*
|
|
|
|
|
* Set if @window must be kept below other windows. If the
|
|
|
|
|
* window was already below, then this function does nothing.
|
|
|
|
|
*
|
|
|
|
|
* On X11, asks the window manager to keep @window below, if the window
|
|
|
|
|
* manager supports this operation. Not all window managers support
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* this, and some deliberately ignore it or don’t have a concept of
|
|
|
|
|
* “keep below”; so you can’t rely on the window being kept below.
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* But it will happen with most standard window managers,
|
|
|
|
|
* and GDK makes a best effort to get it to happen.
|
|
|
|
|
*
|
|
|
|
|
* Since: 2.4
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_keep_below (GdkWindow *window, gboolean setting)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_keep_below (window, setting);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_group:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
*
|
|
|
|
|
* Returns the group leader window for @window. See gdk_window_set_group().
|
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: (transfer none): the group leader window for @window
|
2010-12-05 20:58:23 +00:00
|
|
|
|
*
|
|
|
|
|
* Since: 2.4
|
|
|
|
|
**/
|
|
|
|
|
GdkWindow *
|
|
|
|
|
gdk_window_get_group (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
return GDK_WINDOW_IMPL_GET_CLASS (window->impl)->get_group (window);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_group:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
2011-05-03 07:30:49 +00:00
|
|
|
|
* @leader: (allow-none): group leader window, or %NULL to restore the default group leader window
|
2010-12-05 20:58:23 +00:00
|
|
|
|
*
|
|
|
|
|
* Sets the group leader window for @window. By default,
|
|
|
|
|
* GDK sets the group leader for all toplevel windows
|
|
|
|
|
* to a global window implicitly created by GDK. With this function
|
|
|
|
|
* you can override this default.
|
|
|
|
|
*
|
|
|
|
|
* The group leader window allows the window manager to distinguish
|
|
|
|
|
* all windows that belong to a single application. It may for example
|
|
|
|
|
* allow users to minimize/unminimize all windows belonging to an
|
|
|
|
|
* application at once. You should only set a non-default group window
|
|
|
|
|
* if your application pretends to be multiple applications.
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_group (GdkWindow *window,
|
|
|
|
|
GdkWindow *leader)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_group (window, leader);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_decorations:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
* @decorations: decoration hint mask
|
|
|
|
|
*
|
2014-02-05 19:50:22 +00:00
|
|
|
|
* “Decorations” are the features the window manager adds to a toplevel #GdkWindow.
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* This function sets the traditional Motif window manager hints that tell the
|
|
|
|
|
* window manager which decorations you would like your window to have.
|
|
|
|
|
* Usually you should use gtk_window_set_decorated() on a #GtkWindow instead of
|
|
|
|
|
* using the GDK function directly.
|
|
|
|
|
*
|
|
|
|
|
* The @decorations argument is the logical OR of the fields in
|
|
|
|
|
* the #GdkWMDecoration enumeration. If #GDK_DECOR_ALL is included in the
|
|
|
|
|
* mask, the other bits indicate which decorations should be turned off.
|
|
|
|
|
* If #GDK_DECOR_ALL is not included, then the other bits indicate
|
|
|
|
|
* which decorations should be turned on.
|
|
|
|
|
*
|
|
|
|
|
* Most window managers honor a decorations hint of 0 to disable all decorations,
|
|
|
|
|
* but very few honor all possible combinations of bits.
|
|
|
|
|
*
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_decorations (GdkWindow *window,
|
|
|
|
|
GdkWMDecoration decorations)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_decorations (window, decorations);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_decorations:
|
|
|
|
|
* @window: The toplevel #GdkWindow to get the decorations from
|
2011-01-18 09:10:30 +00:00
|
|
|
|
* @decorations: (out): The window decorations will be written here
|
2010-12-05 20:58:23 +00:00
|
|
|
|
*
|
|
|
|
|
* Returns the decorations set on the GdkWindow with
|
|
|
|
|
* gdk_window_set_decorations().
|
|
|
|
|
*
|
|
|
|
|
* Returns: %TRUE if the window has decorations set, %FALSE otherwise.
|
|
|
|
|
**/
|
|
|
|
|
gboolean
|
|
|
|
|
gdk_window_get_decorations(GdkWindow *window,
|
|
|
|
|
GdkWMDecoration *decorations)
|
|
|
|
|
{
|
|
|
|
|
return GDK_WINDOW_IMPL_GET_CLASS (window->impl)->get_decorations (window, decorations);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_functions:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
* @functions: bitmask of operations to allow on @window
|
|
|
|
|
*
|
|
|
|
|
* Sets hints about the window management functions to make available
|
|
|
|
|
* via buttons on the window frame.
|
|
|
|
|
*
|
|
|
|
|
* On the X backend, this function sets the traditional Motif window
|
|
|
|
|
* manager hint for this purpose. However, few window managers do
|
|
|
|
|
* anything reliable or interesting with this hint. Many ignore it
|
|
|
|
|
* entirely.
|
|
|
|
|
*
|
|
|
|
|
* The @functions argument is the logical OR of values from the
|
|
|
|
|
* #GdkWMFunction enumeration. If the bitmask includes #GDK_FUNC_ALL,
|
|
|
|
|
* then the other bits indicate which functions to disable; if
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* it doesn’t include #GDK_FUNC_ALL, it indicates which functions to
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* enable.
|
|
|
|
|
*
|
|
|
|
|
**/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_functions (GdkWindow *window,
|
|
|
|
|
GdkWMFunction functions)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_functions (window, functions);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2011-11-05 05:10:16 +00:00
|
|
|
|
* gdk_window_begin_resize_drag_for_device:
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
* @edge: the edge or corner from which the drag is started
|
2011-11-05 05:10:16 +00:00
|
|
|
|
* @device: the device used for the operation
|
2014-01-13 03:06:59 +00:00
|
|
|
|
* @button: the button being used to drag, or 0 for a keyboard-initiated drag
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* @root_x: root window X coordinate of mouse click that began the drag
|
|
|
|
|
* @root_y: root window Y coordinate of mouse click that began the drag
|
|
|
|
|
* @timestamp: timestamp of mouse click that began the drag (use gdk_event_get_time())
|
|
|
|
|
*
|
|
|
|
|
* Begins a window resize operation (for a toplevel window).
|
2014-02-05 19:50:22 +00:00
|
|
|
|
* You might use this function to implement a “window resize grip,” for
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* example; in fact #GtkStatusbar uses it. The function works best
|
2014-02-03 21:56:15 +00:00
|
|
|
|
* with window managers that support the
|
|
|
|
|
* [Extended Window Manager Hints](http://www.freedesktop.org/Standards/wm-spec)
|
|
|
|
|
* but has a fallback implementation for other window managers.
|
2010-12-05 20:58:23 +00:00
|
|
|
|
*
|
2011-11-05 05:10:16 +00:00
|
|
|
|
* Since: 3.4
|
|
|
|
|
*/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_begin_resize_drag_for_device (GdkWindow *window,
|
|
|
|
|
GdkWindowEdge edge,
|
|
|
|
|
GdkDevice *device,
|
|
|
|
|
gint button,
|
|
|
|
|
gint root_x,
|
|
|
|
|
gint root_y,
|
|
|
|
|
guint32 timestamp)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->begin_resize_drag (window, edge, device, button, root_x, root_y, timestamp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_begin_resize_drag:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
|
|
|
|
* @edge: the edge or corner from which the drag is started
|
2014-01-13 03:06:59 +00:00
|
|
|
|
* @button: the button being used to drag, or 0 for a keyboard-initiated drag
|
2011-11-05 05:10:16 +00:00
|
|
|
|
* @root_x: root window X coordinate of mouse click that began the drag
|
|
|
|
|
* @root_y: root window Y coordinate of mouse click that began the drag
|
|
|
|
|
* @timestamp: timestamp of mouse click that began the drag (use gdk_event_get_time())
|
|
|
|
|
*
|
|
|
|
|
* Begins a window resize operation (for a toplevel window).
|
|
|
|
|
*
|
|
|
|
|
* This function assumes that the drag is controlled by the
|
|
|
|
|
* client pointer device, use gdk_window_begin_resize_drag_for_device()
|
|
|
|
|
* to begin a drag with a different device.
|
|
|
|
|
*/
|
2010-12-05 20:58:23 +00:00
|
|
|
|
void
|
|
|
|
|
gdk_window_begin_resize_drag (GdkWindow *window,
|
|
|
|
|
GdkWindowEdge edge,
|
|
|
|
|
gint button,
|
|
|
|
|
gint root_x,
|
|
|
|
|
gint root_y,
|
|
|
|
|
guint32 timestamp)
|
|
|
|
|
{
|
2015-12-15 22:19:49 +00:00
|
|
|
|
GdkDisplay *display;
|
2011-11-05 05:10:16 +00:00
|
|
|
|
GdkDevice *device;
|
|
|
|
|
|
2015-12-15 22:19:49 +00:00
|
|
|
|
display = gdk_window_get_display (window);
|
|
|
|
|
device = gdk_seat_get_pointer (gdk_display_get_default_seat (display));
|
2011-11-05 05:10:16 +00:00
|
|
|
|
gdk_window_begin_resize_drag_for_device (window, edge,
|
|
|
|
|
device, button, root_x, root_y, timestamp);
|
2010-12-05 20:58:23 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2011-11-05 05:10:16 +00:00
|
|
|
|
* gdk_window_begin_move_drag_for_device:
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* @window: a toplevel #GdkWindow
|
2011-11-05 05:10:16 +00:00
|
|
|
|
* @device: the device used for the operation
|
2014-01-13 03:06:59 +00:00
|
|
|
|
* @button: the button being used to drag, or 0 for a keyboard-initiated drag
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* @root_x: root window X coordinate of mouse click that began the drag
|
|
|
|
|
* @root_y: root window Y coordinate of mouse click that began the drag
|
|
|
|
|
* @timestamp: timestamp of mouse click that began the drag
|
|
|
|
|
*
|
2011-11-05 05:10:16 +00:00
|
|
|
|
* Begins a window move operation (for a toplevel window).
|
2014-02-05 19:50:22 +00:00
|
|
|
|
* You might use this function to implement a “window move grip,” for
|
2014-02-03 21:56:15 +00:00
|
|
|
|
* example. The function works best with window managers that support the
|
|
|
|
|
* [Extended Window Manager Hints](http://www.freedesktop.org/Standards/wm-spec)
|
|
|
|
|
* but has a fallback implementation for other window managers.
|
2010-12-05 20:58:23 +00:00
|
|
|
|
*
|
2011-11-05 05:10:16 +00:00
|
|
|
|
* Since: 3.4
|
|
|
|
|
*/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_begin_move_drag_for_device (GdkWindow *window,
|
|
|
|
|
GdkDevice *device,
|
|
|
|
|
gint button,
|
|
|
|
|
gint root_x,
|
|
|
|
|
gint root_y,
|
|
|
|
|
guint32 timestamp)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->begin_move_drag (window,
|
|
|
|
|
device, button, root_x, root_y, timestamp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_begin_move_drag:
|
|
|
|
|
* @window: a toplevel #GdkWindow
|
2014-01-13 03:06:59 +00:00
|
|
|
|
* @button: the button being used to drag, or 0 for a keyboard-initiated drag
|
2011-11-05 05:10:16 +00:00
|
|
|
|
* @root_x: root window X coordinate of mouse click that began the drag
|
|
|
|
|
* @root_y: root window Y coordinate of mouse click that began the drag
|
|
|
|
|
* @timestamp: timestamp of mouse click that began the drag
|
|
|
|
|
*
|
|
|
|
|
* Begins a window move operation (for a toplevel window).
|
|
|
|
|
*
|
|
|
|
|
* This function assumes that the drag is controlled by the
|
|
|
|
|
* client pointer device, use gdk_window_begin_move_drag_for_device()
|
|
|
|
|
* to begin a drag with a different device.
|
|
|
|
|
*/
|
2010-12-05 20:58:23 +00:00
|
|
|
|
void
|
|
|
|
|
gdk_window_begin_move_drag (GdkWindow *window,
|
|
|
|
|
gint button,
|
|
|
|
|
gint root_x,
|
|
|
|
|
gint root_y,
|
|
|
|
|
guint32 timestamp)
|
|
|
|
|
{
|
2015-12-15 22:19:49 +00:00
|
|
|
|
GdkDisplay *display;
|
2011-11-05 05:10:16 +00:00
|
|
|
|
GdkDevice *device;
|
|
|
|
|
|
2015-12-15 22:19:49 +00:00
|
|
|
|
display = gdk_window_get_display (window);
|
|
|
|
|
device = gdk_seat_get_pointer (gdk_display_get_default_seat (display));
|
2011-11-05 05:10:16 +00:00
|
|
|
|
gdk_window_begin_move_drag_for_device (window, device, button, root_x, root_y, timestamp);
|
2010-12-05 20:58:23 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_opacity:
|
2012-11-07 12:03:32 +00:00
|
|
|
|
* @window: a top-level or non-native #GdkWindow
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* @opacity: opacity
|
|
|
|
|
*
|
2012-11-07 12:03:32 +00:00
|
|
|
|
* Set @window to render as partially transparent,
|
2010-12-05 20:58:23 +00:00
|
|
|
|
* with opacity 0 being fully transparent and 1 fully opaque. (Values
|
|
|
|
|
* of the opacity parameter are clamped to the [0,1] range.)
|
|
|
|
|
*
|
2012-11-07 12:03:32 +00:00
|
|
|
|
* For toplevel windows this depends on support from the windowing system
|
|
|
|
|
* that may not always be there. For instance, On X11, this works only on
|
2014-10-28 14:48:49 +00:00
|
|
|
|
* X screens with a compositing manager running. On Wayland, there is no
|
|
|
|
|
* per-window opacity value that the compositor would apply. Instead, use
|
|
|
|
|
* `gdk_window_set_opaque_region (window, NULL)` to tell the compositor
|
|
|
|
|
* that the entire window is (potentially) non-opaque, and draw your content
|
|
|
|
|
* with alpha, or use gtk_widget_set_opacity() to set an overall opacity
|
|
|
|
|
* for your widgets.
|
2012-11-07 12:03:32 +00:00
|
|
|
|
*
|
|
|
|
|
* Support for non-toplevel windows was added in 3.8.
|
2010-12-05 20:58:23 +00:00
|
|
|
|
*
|
|
|
|
|
* Since: 2.12
|
|
|
|
|
*/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_opacity (GdkWindow *window,
|
|
|
|
|
gdouble opacity)
|
|
|
|
|
{
|
2012-11-07 12:03:32 +00:00
|
|
|
|
if (opacity < 0)
|
|
|
|
|
opacity = 0;
|
|
|
|
|
else if (opacity > 1)
|
|
|
|
|
opacity = 1;
|
|
|
|
|
|
|
|
|
|
window->alpha = round (opacity * 255);
|
|
|
|
|
|
|
|
|
|
if (window->destroyed)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (gdk_window_has_impl (window))
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_opacity (window, opacity);
|
|
|
|
|
else
|
|
|
|
|
{
|
2013-04-17 15:05:49 +00:00
|
|
|
|
recompute_visible_regions (window, FALSE);
|
2013-04-19 15:40:58 +00:00
|
|
|
|
gdk_window_invalidate_rect_full (window, NULL, TRUE);
|
2012-11-07 12:03:32 +00:00
|
|
|
|
}
|
2010-12-05 20:58:23 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* This function is called when the XWindow is really gone.
|
|
|
|
|
*/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_destroy_notify (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->destroy_notify (window);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_register_dnd:
|
|
|
|
|
* @window: a #GdkWindow.
|
|
|
|
|
*
|
|
|
|
|
* Registers a window as a potential drop destination.
|
|
|
|
|
*/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_register_dnd (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->register_dnd (window);
|
|
|
|
|
}
|
2010-12-09 05:02:35 +00:00
|
|
|
|
|
2011-02-01 17:11:35 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_drag_protocol:
|
|
|
|
|
* @window: the destination window
|
|
|
|
|
* @target: (out) (allow-none) (transfer full): location of the window
|
|
|
|
|
* where the drop should happen. This may be @window or a proxy window,
|
|
|
|
|
* or %NULL if @window does not support Drag and Drop.
|
|
|
|
|
*
|
|
|
|
|
* Finds out the DND protocol supported by a window.
|
|
|
|
|
*
|
|
|
|
|
* Returns: the supported DND protocol.
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.0
|
|
|
|
|
*/
|
|
|
|
|
GdkDragProtocol
|
|
|
|
|
gdk_window_get_drag_protocol (GdkWindow *window,
|
|
|
|
|
GdkWindow **target)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), GDK_DRAG_PROTO_NONE);
|
|
|
|
|
|
|
|
|
|
return GDK_WINDOW_IMPL_GET_CLASS (window->impl)->get_drag_protocol (window, target);
|
|
|
|
|
}
|
|
|
|
|
|
2010-12-10 06:27:10 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_drag_begin:
|
|
|
|
|
* @window: the source window for this drag.
|
2017-11-18 04:53:25 +00:00
|
|
|
|
* @formats: (transfer none): the offered formats
|
2010-12-10 06:27:10 +00:00
|
|
|
|
*
|
|
|
|
|
* Starts a drag and creates a new drag context for it.
|
2010-12-25 05:02:39 +00:00
|
|
|
|
* This function assumes that the drag is controlled by the
|
|
|
|
|
* client pointer device, use gdk_drag_begin_for_device() to
|
|
|
|
|
* begin a drag with a different device.
|
2010-12-10 06:27:10 +00:00
|
|
|
|
*
|
|
|
|
|
* This function is called by the drag source.
|
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: (transfer full): a newly created #GdkDragContext
|
2010-12-10 06:27:10 +00:00
|
|
|
|
*/
|
|
|
|
|
GdkDragContext *
|
2017-11-18 04:53:25 +00:00
|
|
|
|
gdk_drag_begin (GdkWindow *window,
|
|
|
|
|
GdkContentFormats *formats)
|
2010-12-10 06:27:10 +00:00
|
|
|
|
{
|
2015-12-15 22:19:49 +00:00
|
|
|
|
GdkDisplay *display;
|
2010-12-10 06:27:10 +00:00
|
|
|
|
GdkDevice *device;
|
|
|
|
|
|
2015-12-15 22:19:49 +00:00
|
|
|
|
display = gdk_window_get_display (window);
|
|
|
|
|
device = gdk_seat_get_pointer (gdk_display_get_default_seat (display));
|
2010-12-10 06:27:10 +00:00
|
|
|
|
|
2017-11-18 04:53:25 +00:00
|
|
|
|
return gdk_drag_begin_for_device (window, device, formats);
|
2010-12-10 06:27:10 +00:00
|
|
|
|
}
|
|
|
|
|
|
2010-12-25 05:02:39 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_drag_begin_for_device:
|
|
|
|
|
* @window: the source window for this drag
|
|
|
|
|
* @device: the device that controls this drag
|
2017-11-18 04:53:25 +00:00
|
|
|
|
* @formats: (transfer none): the offered formats
|
2010-12-25 05:02:39 +00:00
|
|
|
|
*
|
|
|
|
|
* Starts a drag and creates a new drag context for it.
|
|
|
|
|
*
|
|
|
|
|
* This function is called by the drag source.
|
|
|
|
|
*
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: (transfer full): a newly created #GdkDragContext
|
2010-12-25 05:02:39 +00:00
|
|
|
|
*/
|
2010-12-10 06:27:10 +00:00
|
|
|
|
GdkDragContext *
|
2015-12-07 18:47:45 +00:00
|
|
|
|
gdk_drag_begin_for_device (GdkWindow *window,
|
|
|
|
|
GdkDevice *device,
|
2017-11-18 04:53:25 +00:00
|
|
|
|
GdkContentFormats *formats)
|
2010-12-10 06:27:10 +00:00
|
|
|
|
{
|
2015-12-07 18:47:45 +00:00
|
|
|
|
gint x, y;
|
|
|
|
|
|
2017-10-31 16:30:38 +00:00
|
|
|
|
gdk_device_get_position (device, &x, &y);
|
2015-12-07 18:47:45 +00:00
|
|
|
|
|
2017-11-18 04:53:25 +00:00
|
|
|
|
return gdk_drag_begin_from_point (window, device, formats, x, y);
|
2015-12-07 18:47:45 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_drag_begin_from_point:
|
|
|
|
|
* @window: the source window for this drag
|
|
|
|
|
* @device: the device that controls this drag
|
2017-11-18 04:53:25 +00:00
|
|
|
|
* @formats: (transfer none): the offered formats
|
2015-12-07 18:47:45 +00:00
|
|
|
|
* @x_root: the x coordinate where the drag nominally started
|
|
|
|
|
* @y_root: the y coordinate where the drag nominally started
|
|
|
|
|
*
|
|
|
|
|
* Starts a drag and creates a new drag context for it.
|
|
|
|
|
*
|
|
|
|
|
* This function is called by the drag source.
|
|
|
|
|
*
|
|
|
|
|
* Returns: (transfer full): a newly created #GdkDragContext
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.20
|
|
|
|
|
*/
|
|
|
|
|
GdkDragContext *
|
2017-11-18 04:53:25 +00:00
|
|
|
|
gdk_drag_begin_from_point (GdkWindow *window,
|
|
|
|
|
GdkDevice *device,
|
|
|
|
|
GdkContentFormats *formats,
|
|
|
|
|
gint x_root,
|
|
|
|
|
gint y_root)
|
2015-12-07 18:47:45 +00:00
|
|
|
|
{
|
2017-11-18 04:53:25 +00:00
|
|
|
|
return GDK_WINDOW_IMPL_GET_CLASS (window->impl)->drag_begin (window, device, formats, x_root, y_root);
|
2010-12-10 06:27:10 +00:00
|
|
|
|
}
|
2010-12-16 06:21:49 +00:00
|
|
|
|
|
2010-12-17 00:00:01 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_property_get:
|
2010-12-25 05:26:22 +00:00
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
* @property: the property to retrieve
|
2017-11-15 17:13:31 +00:00
|
|
|
|
* @type: the desired property type, or %NULL, if any type of data
|
2010-12-17 00:00:01 +00:00
|
|
|
|
* is acceptable. If this does not match the actual
|
|
|
|
|
* type, then @actual_format and @actual_length will
|
|
|
|
|
* be filled in, a warning will be printed to stderr
|
|
|
|
|
* and no data will be returned.
|
|
|
|
|
* @offset: the offset into the property at which to begin
|
|
|
|
|
* retrieving data, in 4 byte units.
|
|
|
|
|
* @length: the length of the data to retrieve in bytes. Data is
|
|
|
|
|
* considered to be retrieved in 4 byte chunks, so @length
|
|
|
|
|
* will be rounded up to the next highest 4 byte boundary
|
|
|
|
|
* (so be careful not to pass a value that might overflow
|
|
|
|
|
* when rounded up).
|
|
|
|
|
* @pdelete: if %TRUE, delete the property after retrieving the
|
|
|
|
|
* data.
|
2011-01-18 09:10:30 +00:00
|
|
|
|
* @actual_property_type: (out) (transfer none): location to store the
|
|
|
|
|
* actual type of the property.
|
|
|
|
|
* @actual_format: (out): location to store the actual return format of the
|
2010-12-17 00:00:01 +00:00
|
|
|
|
* data; either 8, 16 or 32 bits.
|
|
|
|
|
* @actual_length: location to store the length of the retrieved data, in
|
|
|
|
|
* bytes. Data returned in the 32 bit format is stored
|
|
|
|
|
* in a long variable, so the actual number of 32 bit
|
|
|
|
|
* elements should be be calculated via
|
|
|
|
|
* @actual_length / sizeof(glong) to ensure portability to
|
|
|
|
|
* 64 bit systems.
|
2011-01-18 09:10:30 +00:00
|
|
|
|
* @data: (out) (array length=actual_length) (transfer full): location
|
|
|
|
|
* to store a pointer to the data. The retrieved data should be
|
|
|
|
|
* freed with g_free() when you are finished using it.
|
2010-12-17 00:00:01 +00:00
|
|
|
|
*
|
|
|
|
|
* Retrieves a portion of the contents of a property. If the
|
|
|
|
|
* property does not exist, then the function returns %FALSE,
|
2017-11-15 17:13:31 +00:00
|
|
|
|
* and %NULL will be stored in @actual_property_type.
|
2010-12-17 00:00:01 +00:00
|
|
|
|
*
|
|
|
|
|
* The XGetWindowProperty() function that gdk_property_get()
|
|
|
|
|
* uses has a very confusing and complicated set of semantics.
|
|
|
|
|
* Unfortunately, gdk_property_get() makes the situation
|
|
|
|
|
* worse instead of better (the semantics should be considered
|
|
|
|
|
* undefined), and also prints warnings to stderr in cases where it
|
|
|
|
|
* should return a useful error to the program. You are advised to use
|
|
|
|
|
* XGetWindowProperty() directly until a replacement function for
|
2014-02-02 06:22:14 +00:00
|
|
|
|
* gdk_property_get() is provided.
|
2010-12-17 00:00:01 +00:00
|
|
|
|
*
|
|
|
|
|
* Returns: %TRUE if data was successfully received and stored
|
|
|
|
|
* in @data, otherwise %FALSE.
|
|
|
|
|
*/
|
|
|
|
|
gboolean
|
|
|
|
|
gdk_property_get (GdkWindow *window,
|
|
|
|
|
GdkAtom property,
|
|
|
|
|
GdkAtom type,
|
|
|
|
|
gulong offset,
|
|
|
|
|
gulong length,
|
|
|
|
|
gint pdelete,
|
|
|
|
|
GdkAtom *actual_property_type,
|
|
|
|
|
gint *actual_format_type,
|
|
|
|
|
gint *actual_length,
|
|
|
|
|
guchar **data)
|
|
|
|
|
{
|
|
|
|
|
return GDK_WINDOW_IMPL_GET_CLASS (window->impl)
|
|
|
|
|
->get_property (window, property, type, offset, length, pdelete,
|
|
|
|
|
actual_property_type, actual_format_type,
|
|
|
|
|
actual_length, data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2011-01-18 05:37:11 +00:00
|
|
|
|
* gdk_property_change: (skip)
|
2010-12-25 05:26:22 +00:00
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
* @property: the property to change
|
2010-12-17 00:00:01 +00:00
|
|
|
|
* @type: the new type for the property. If @mode is
|
|
|
|
|
* %GDK_PROP_MODE_PREPEND or %GDK_PROP_MODE_APPEND, then this
|
|
|
|
|
* must match the existing type or an error will occur.
|
|
|
|
|
* @format: the new format for the property. If @mode is
|
|
|
|
|
* %GDK_PROP_MODE_PREPEND or %GDK_PROP_MODE_APPEND, then this
|
|
|
|
|
* must match the existing format or an error will occur.
|
|
|
|
|
* @mode: a value describing how the new data is to be combined
|
|
|
|
|
* with the current data.
|
2014-02-04 23:21:13 +00:00
|
|
|
|
* @data: the data (a `guchar *`
|
|
|
|
|
* `gushort *`, or `gulong *`,
|
|
|
|
|
* depending on @format), cast to a `guchar *`.
|
2010-12-17 00:00:01 +00:00
|
|
|
|
* @nelements: the number of elements of size determined by the format,
|
|
|
|
|
* contained in @data.
|
|
|
|
|
*
|
|
|
|
|
* Changes the contents of a property on a window.
|
|
|
|
|
*/
|
|
|
|
|
void
|
|
|
|
|
gdk_property_change (GdkWindow *window,
|
|
|
|
|
GdkAtom property,
|
|
|
|
|
GdkAtom type,
|
|
|
|
|
gint format,
|
|
|
|
|
GdkPropMode mode,
|
|
|
|
|
const guchar *data,
|
|
|
|
|
gint nelements)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)
|
|
|
|
|
->change_property (window, property, type, format, mode, data, nelements);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_property_delete:
|
2010-12-25 05:26:22 +00:00
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
* @property: the property to delete
|
2010-12-17 00:00:01 +00:00
|
|
|
|
*
|
|
|
|
|
* Deletes a property from a window.
|
|
|
|
|
*/
|
|
|
|
|
void
|
|
|
|
|
gdk_property_delete (GdkWindow *window,
|
|
|
|
|
GdkAtom property)
|
|
|
|
|
{
|
|
|
|
|
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->delete_property (window, property);
|
|
|
|
|
}
|
2012-10-03 22:34:01 +00:00
|
|
|
|
|
2012-09-26 14:28:06 +00:00
|
|
|
|
static void
|
|
|
|
|
gdk_window_flush_events (GdkFrameClock *clock,
|
|
|
|
|
void *data)
|
|
|
|
|
{
|
|
|
|
|
GdkWindow *window;
|
|
|
|
|
GdkDisplay *display;
|
|
|
|
|
|
|
|
|
|
window = GDK_WINDOW (data);
|
|
|
|
|
|
|
|
|
|
display = gdk_window_get_display (window);
|
2013-11-11 23:04:34 +00:00
|
|
|
|
_gdk_event_queue_flush (display);
|
2012-10-07 18:13:56 +00:00
|
|
|
|
_gdk_display_pause_events (display);
|
2012-09-26 14:28:06 +00:00
|
|
|
|
|
|
|
|
|
gdk_frame_clock_request_phase (clock, GDK_FRAME_CLOCK_PHASE_RESUME_EVENTS);
|
2015-01-26 21:52:00 +00:00
|
|
|
|
|
|
|
|
|
window->frame_clock_events_paused = TRUE;
|
2012-09-26 14:28:06 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
gdk_window_resume_events (GdkFrameClock *clock,
|
|
|
|
|
void *data)
|
|
|
|
|
{
|
|
|
|
|
GdkWindow *window;
|
|
|
|
|
GdkDisplay *display;
|
|
|
|
|
|
|
|
|
|
window = GDK_WINDOW (data);
|
|
|
|
|
|
|
|
|
|
display = gdk_window_get_display (window);
|
2012-10-07 18:13:56 +00:00
|
|
|
|
_gdk_display_unpause_events (display);
|
2015-01-26 21:52:00 +00:00
|
|
|
|
|
2015-01-30 23:42:06 +00:00
|
|
|
|
window->frame_clock_events_paused = FALSE;
|
2012-09-26 14:28:06 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-01-30 20:09:44 +00:00
|
|
|
|
static void
|
2012-10-03 22:34:01 +00:00
|
|
|
|
gdk_window_set_frame_clock (GdkWindow *window,
|
|
|
|
|
GdkFrameClock *clock)
|
|
|
|
|
{
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
g_return_if_fail (clock == NULL || GDK_IS_FRAME_CLOCK (clock));
|
2013-01-30 20:09:44 +00:00
|
|
|
|
g_return_if_fail (clock == NULL || gdk_window_is_toplevel (window));
|
2012-10-03 22:34:01 +00:00
|
|
|
|
|
|
|
|
|
if (clock == window->frame_clock)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (clock)
|
|
|
|
|
{
|
|
|
|
|
g_object_ref (clock);
|
2012-09-26 14:28:06 +00:00
|
|
|
|
g_signal_connect (G_OBJECT (clock),
|
|
|
|
|
"flush-events",
|
|
|
|
|
G_CALLBACK (gdk_window_flush_events),
|
|
|
|
|
window);
|
2012-10-03 22:34:01 +00:00
|
|
|
|
g_signal_connect (G_OBJECT (clock),
|
|
|
|
|
"paint",
|
|
|
|
|
G_CALLBACK (gdk_window_paint_on_clock),
|
|
|
|
|
window);
|
2012-09-26 14:28:06 +00:00
|
|
|
|
g_signal_connect (G_OBJECT (clock),
|
|
|
|
|
"resume-events",
|
|
|
|
|
G_CALLBACK (gdk_window_resume_events),
|
|
|
|
|
window);
|
2012-10-03 22:34:01 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (window->frame_clock)
|
|
|
|
|
{
|
2015-01-26 21:52:00 +00:00
|
|
|
|
if (window->frame_clock_events_paused)
|
2015-01-30 23:42:06 +00:00
|
|
|
|
gdk_window_resume_events (window->frame_clock, G_OBJECT (window));
|
2015-01-26 21:52:00 +00:00
|
|
|
|
|
2012-09-26 14:28:06 +00:00
|
|
|
|
g_signal_handlers_disconnect_by_func (G_OBJECT (window->frame_clock),
|
|
|
|
|
G_CALLBACK (gdk_window_flush_events),
|
|
|
|
|
window);
|
2012-10-03 22:34:01 +00:00
|
|
|
|
g_signal_handlers_disconnect_by_func (G_OBJECT (window->frame_clock),
|
|
|
|
|
G_CALLBACK (gdk_window_paint_on_clock),
|
|
|
|
|
window);
|
2012-09-26 14:28:06 +00:00
|
|
|
|
g_signal_handlers_disconnect_by_func (G_OBJECT (window->frame_clock),
|
|
|
|
|
G_CALLBACK (gdk_window_resume_events),
|
|
|
|
|
window);
|
2012-10-03 22:34:01 +00:00
|
|
|
|
g_object_unref (window->frame_clock);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
window->frame_clock = clock;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_frame_clock:
|
|
|
|
|
* @window: window to get frame clock for
|
|
|
|
|
*
|
|
|
|
|
* Gets the frame clock for the window. The frame clock for a window
|
2013-01-30 20:09:44 +00:00
|
|
|
|
* never changes unless the window is reparented to a new toplevel
|
|
|
|
|
* window.
|
2012-10-03 22:34:01 +00:00
|
|
|
|
*
|
2013-01-30 20:09:44 +00:00
|
|
|
|
* Since: 3.8
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: (transfer none): the frame clock
|
2012-10-03 22:34:01 +00:00
|
|
|
|
*/
|
|
|
|
|
GdkFrameClock*
|
|
|
|
|
gdk_window_get_frame_clock (GdkWindow *window)
|
|
|
|
|
{
|
2013-01-30 20:09:44 +00:00
|
|
|
|
GdkWindow *toplevel;
|
|
|
|
|
|
2012-10-03 22:34:01 +00:00
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
|
|
|
|
|
2013-01-30 20:09:44 +00:00
|
|
|
|
toplevel = gdk_window_get_toplevel (window);
|
2012-10-03 22:34:01 +00:00
|
|
|
|
|
2013-01-30 20:09:44 +00:00
|
|
|
|
return toplevel->frame_clock;
|
2012-10-03 22:34:01 +00:00
|
|
|
|
}
|
2013-01-18 14:47:29 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_get_scale_factor:
|
|
|
|
|
* @window: window to get scale factor for
|
|
|
|
|
*
|
|
|
|
|
* Returns the internal scale factor that maps from window coordiantes
|
|
|
|
|
* to the actual device pixels. On traditional systems this is 1, but
|
|
|
|
|
* on very high density outputs this can be a higher value (often 2).
|
|
|
|
|
*
|
|
|
|
|
* A higher value means that drawing is automatically scaled up to
|
|
|
|
|
* a higher resolution, so any code doing drawing will automatically look
|
|
|
|
|
* nicer. However, if you are supplying pixel-based data the scale
|
|
|
|
|
* value can be used to determine whether to use a pixel resource
|
|
|
|
|
* with higher resolution data.
|
|
|
|
|
*
|
|
|
|
|
* The scale of a window may change during runtime, if this happens
|
|
|
|
|
* a configure event will be sent to the toplevel window.
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.10
|
2014-02-19 23:49:43 +00:00
|
|
|
|
* Returns: the scale factor
|
2013-01-18 14:47:29 +00:00
|
|
|
|
*/
|
|
|
|
|
gint
|
|
|
|
|
gdk_window_get_scale_factor (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
GdkWindowImplClass *impl_class;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), 1);
|
|
|
|
|
|
|
|
|
|
if (GDK_WINDOW_DESTROYED (window))
|
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
|
|
|
|
|
|
|
|
|
if (impl_class->get_scale_factor)
|
|
|
|
|
return impl_class->get_scale_factor (window);
|
|
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
2013-05-14 20:23:33 +00:00
|
|
|
|
|
2014-11-20 10:50:11 +00:00
|
|
|
|
/* Returns the *real* unscaled size, which may be a fractional size
|
|
|
|
|
in window scale coordinates. We need this to properly handle GL
|
|
|
|
|
coordinates which are y-flipped in the real coordinates. */
|
|
|
|
|
void
|
|
|
|
|
gdk_window_get_unscaled_size (GdkWindow *window,
|
|
|
|
|
int *unscaled_width,
|
|
|
|
|
int *unscaled_height)
|
|
|
|
|
{
|
|
|
|
|
GdkWindowImplClass *impl_class;
|
|
|
|
|
gint scale;
|
|
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
|
|
|
|
|
if (window->impl_window == window)
|
|
|
|
|
{
|
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
|
|
|
|
|
|
|
|
|
if (impl_class->get_unscaled_size)
|
2015-06-13 05:45:57 +00:00
|
|
|
|
{
|
|
|
|
|
impl_class->get_unscaled_size (window, unscaled_width, unscaled_height);
|
|
|
|
|
return;
|
|
|
|
|
}
|
2014-11-20 10:50:11 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
scale = gdk_window_get_scale_factor (window);
|
|
|
|
|
|
|
|
|
|
if (unscaled_width)
|
|
|
|
|
*unscaled_width = window->width * scale;
|
|
|
|
|
|
|
|
|
|
if (unscaled_height)
|
|
|
|
|
*unscaled_height = window->height * scale;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2013-05-14 20:23:33 +00:00
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_opaque_region:
|
|
|
|
|
* @window: a top-level or non-native #GdkWindow
|
2015-04-18 16:54:45 +00:00
|
|
|
|
* @region: (allow-none): a region, or %NULL
|
2013-05-14 20:23:33 +00:00
|
|
|
|
*
|
2015-04-18 16:54:45 +00:00
|
|
|
|
* For optimisation purposes, compositing window managers may
|
2013-05-14 20:23:33 +00:00
|
|
|
|
* like to not draw obscured regions of windows, or turn off blending
|
|
|
|
|
* during for these regions. With RGB windows with no transparency,
|
|
|
|
|
* this is just the shape of the window, but with ARGB32 windows, the
|
|
|
|
|
* compositor does not know what regions of the window are transparent
|
|
|
|
|
* or not.
|
|
|
|
|
*
|
|
|
|
|
* This function only works for toplevel windows.
|
|
|
|
|
*
|
2015-04-18 16:54:45 +00:00
|
|
|
|
* GTK+ will update this property automatically if
|
2013-05-14 20:23:33 +00:00
|
|
|
|
* the @window background is opaque, as we know where the opaque regions
|
|
|
|
|
* are. If your window background is not opaque, please update this
|
2014-01-21 23:41:41 +00:00
|
|
|
|
* property in your #GtkWidget::style-updated handler.
|
2013-05-14 20:23:33 +00:00
|
|
|
|
*
|
|
|
|
|
* Since: 3.10
|
|
|
|
|
*/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_opaque_region (GdkWindow *window,
|
|
|
|
|
cairo_region_t *region)
|
|
|
|
|
{
|
|
|
|
|
GdkWindowImplClass *impl_class;
|
|
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
g_return_if_fail (!GDK_WINDOW_DESTROYED (window));
|
|
|
|
|
|
2017-08-18 10:01:54 +00:00
|
|
|
|
if (cairo_region_equal (window->opaque_region, region))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
g_clear_pointer (&window->opaque_region, cairo_region_destroy);
|
|
|
|
|
|
|
|
|
|
if (region != NULL)
|
|
|
|
|
window->opaque_region = cairo_region_reference (region);
|
|
|
|
|
|
2013-05-14 20:23:33 +00:00
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
|
|
|
|
|
|
|
|
|
if (impl_class->set_opaque_region)
|
2015-02-17 13:17:53 +00:00
|
|
|
|
impl_class->set_opaque_region (window, region);
|
2013-05-14 20:23:33 +00:00
|
|
|
|
}
|
2013-12-13 03:38:12 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_set_shadow_width:
|
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
* @left: The left extent
|
|
|
|
|
* @right: The right extent
|
|
|
|
|
* @top: The top extent
|
|
|
|
|
* @bottom: The bottom extent
|
|
|
|
|
*
|
|
|
|
|
* Newer GTK+ windows using client-side decorations use extra geometry
|
|
|
|
|
* around their frames for effects like shadows and invisible borders.
|
|
|
|
|
* Window managers that want to maximize windows or snap to edges need
|
|
|
|
|
* to know where the extents of the actual frame lie, so that users
|
2014-02-07 18:32:47 +00:00
|
|
|
|
* don’t feel like windows are snapping against random invisible edges.
|
2013-12-13 03:38:12 +00:00
|
|
|
|
*
|
|
|
|
|
* Note that this property is automatically updated by GTK+, so this
|
|
|
|
|
* function should only be used by applications which do not use GTK+
|
|
|
|
|
* to create toplevel windows.
|
|
|
|
|
*
|
|
|
|
|
* Since: 3.12
|
|
|
|
|
*/
|
|
|
|
|
void
|
|
|
|
|
gdk_window_set_shadow_width (GdkWindow *window,
|
|
|
|
|
gint left,
|
|
|
|
|
gint right,
|
|
|
|
|
gint top,
|
|
|
|
|
gint bottom)
|
|
|
|
|
{
|
|
|
|
|
GdkWindowImplClass *impl_class;
|
|
|
|
|
|
|
|
|
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
|
|
|
|
g_return_if_fail (!GDK_WINDOW_DESTROYED (window));
|
|
|
|
|
g_return_if_fail (left >= 0 && right >= 0 && top >= 0 && bottom >= 0);
|
|
|
|
|
|
2016-06-16 15:20:35 +00:00
|
|
|
|
window->shadow_top = top;
|
|
|
|
|
window->shadow_left = left;
|
|
|
|
|
window->shadow_right = right;
|
|
|
|
|
window->shadow_bottom = bottom;
|
|
|
|
|
|
2013-12-13 03:38:12 +00:00
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
|
|
|
|
|
|
|
|
|
if (impl_class->set_shadow_width)
|
|
|
|
|
impl_class->set_shadow_width (window, left, right, top, bottom);
|
|
|
|
|
}
|
2014-03-13 21:28:01 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* gdk_window_show_window_menu:
|
|
|
|
|
* @window: a #GdkWindow
|
|
|
|
|
* @event: a #GdkEvent to show the menu for
|
|
|
|
|
*
|
2014-05-21 23:01:37 +00:00
|
|
|
|
* Asks the windowing system to show the window menu. The window menu
|
|
|
|
|
* is the menu shown when right-clicking the titlebar on traditional
|
2014-03-13 21:28:01 +00:00
|
|
|
|
* windows managed by the window manager. This is useful for windows
|
|
|
|
|
* using client-side decorations, activating it with a right-click
|
|
|
|
|
* on the window decorations.
|
|
|
|
|
*
|
2014-05-21 23:01:37 +00:00
|
|
|
|
* Returns: %TRUE if the window menu was shown and %FALSE otherwise.
|
2014-03-13 21:28:01 +00:00
|
|
|
|
*
|
|
|
|
|
* Since: 3.14
|
|
|
|
|
*/
|
|
|
|
|
gboolean
|
|
|
|
|
gdk_window_show_window_menu (GdkWindow *window,
|
|
|
|
|
GdkEvent *event)
|
|
|
|
|
{
|
|
|
|
|
GdkWindowImplClass *impl_class;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
|
|
|
|
|
g_return_val_if_fail (!GDK_WINDOW_DESTROYED (window), FALSE);
|
|
|
|
|
|
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
|
|
|
|
|
|
|
|
|
if (impl_class->show_window_menu)
|
|
|
|
|
return impl_class->show_window_menu (window, event);
|
|
|
|
|
else
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
2017-09-18 02:09:10 +00:00
|
|
|
|
|
|
|
|
|
gboolean
|
|
|
|
|
gdk_window_supports_edge_constraints (GdkWindow *window)
|
|
|
|
|
{
|
|
|
|
|
GdkWindowImplClass *impl_class;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
|
|
|
|
|
g_return_val_if_fail (!GDK_WINDOW_DESTROYED (window), FALSE);
|
|
|
|
|
|
|
|
|
|
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
|
|
|
|
|
|
|
|
|
if (impl_class->supports_edge_constraints)
|
|
|
|
|
return impl_class->supports_edge_constraints (window);
|
|
|
|
|
else
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|