Commit Graph

427 Commits

Author SHA1 Message Date
Alexander Larsson
fe3c410048 Filter out all native grab/ungrab events with detail INFERIOR
These are generated when we get an implicit grab on a native
child window, and we can't filter them with _has_grab() because
they are sent before the button press event where we detect
the implicit grab.

This makes clicks work in the flash plugin again
2009-04-02 10:15:32 +02:00
Alexander Larsson
20c81eca6a Return ignoring of native grab/ungrab events when we don't have a grab
It turns out we really have to ignore grab/ungrab events or we'll
report double crossing events when we grab or ungrab.

However, we also can't ignore crossing events from grabs from other clients
as that leads to missed enter/leave events on e.g. alt-tab in metacity.

Fortunately we now track grabs very precisely, so we know with certainty
whether we have a grab at the time (serial) of the native crossing events,
and only if we do we ignore them.
2009-04-02 10:15:30 +02:00
Alexander Larsson
53269a5042 Handle crossing events with subwindows unknown to gdk
If we get crossing events with subwindow unexpectedly being NULL
that means there is a native subwindow that gdk doesn't know about.
We track these and forward them, with the correct virtual window
events inbetween.

This is important to get right, as metacity uses gdk for the frame
windows, but gdk doesn't know about the client windows reparented
into the frame.
2009-04-02 10:15:30 +02:00
Alexander Larsson
5be3f38535 Move implicit grab tracking totally to common code 2009-04-02 10:15:30 +02:00
Alexander Larsson
26cbf87d7d New approach for grab tracking code
We try to track the exact grab state, i.e. whats valid on the client
now and whats comming soon via the xserver roundtrip (and when).
2009-04-02 10:15:30 +02:00
Alexander Larsson
a6e647863d Only sync the display if creating a native window implicitly 2009-04-02 10:15:29 +02:00
Alexander Larsson
e631d2d2d4 Sync the display when creating a native window.
This is needed because we want to be able to use the xid immediately
even from another process or another connection to the display.
2009-04-02 10:15:29 +02:00
Alexander Larsson
089c9ca2f1 Don't warn about unexpected events on foreign windows
We don't really control these events so its not wrong per se
to have them generate stuff we don't expect.
2009-04-02 10:15:29 +02:00
Alexander Larsson
177b53a079 Fix typo in gdk_window_input_shape_combine_region 2009-04-02 10:15:29 +02:00
Alexander Larsson
8b7d8431aa Make gdk_window_get_toplevel() for CHILD window with root as parent
Having GDK_WINDOW_CHILD windows with root as the parent apparently works,
and metacity uses it. The current gdk_window_get_toplevel() returns the
root window for that, which is wrong, so we check that explicitly.
2009-04-02 10:15:29 +02:00
Alexander Larsson
33c0c1fba8 Don't mess with any events on the root window.
This causes all sorts of weirdness with pointer_over_window
being the rootwindow and then crashing gdk_window_get_toplevel() later.

With this metacity stops crashing madly.
2009-04-02 10:15:29 +02:00
Alexander Larsson
6e56179b03 Don't crash if window->parent is NULL
This happens for events on the root window.
2009-04-02 10:15:28 +02:00
Alexander Larsson
de2d5f299d Simplify do_move_region_bits_on_impl by removing unused arguments 2009-04-02 10:15:28 +02:00
Alexander Larsson
b272456023 Remove unused label 2009-04-02 10:15:28 +02:00
Alexander Larsson
5ca1865f5d Don't ignore native CROSSING_GRAB/UNGRAB events
These are sent when someone else grabs the pointer, and we don't
want to miss these expose events. For instance, we missed enter
and leave events on alt-tab.

There were some issues with these wrt out-of-sync grab information
in the client, but that should now be handled. So, it should work
or at least be fixable if we find some bug.
2009-04-02 10:15:27 +02:00
Richard Hult
1a47356485 Remove invalidate_maybe_recurse and process_updates from the paintable interface
Replace them with two new functions
_gdk_windowing_{before,after}_process_all_updates() that are called
around the guts of gdk_window_process_all_updates(). Add empty ones
for X11 (nothing more needed), quartz ones will be implemented next.
2009-04-02 10:15:27 +02:00
Richard Hult
1ee03b35d0 Expose _gdk_window_process_updates_recurse for backends
We use this in the added windowing function
_gdk_windowing_window_process_updates_recurse. The X11 implementation
just calls _gdk_window_process_updates_recurse directly, but at least
quartz will need to do some more work.
2009-04-02 10:15:27 +02:00
Richard Hult
72d4403eed Add a window argument to begin_paint_region in the paintable interface
The paintable itself is now the impl window, which can be different
from the window.
2009-04-02 10:15:27 +02:00
Alexander Larsson
32a070d09a Fix gdk_window_has_no_impl typo 2009-04-02 10:15:26 +02:00
Alexander Larsson
ca1aeff814 Only set cursors on toplevel.
This fixes a problem where we used to set them on a native window, but we
never unset it becase when the pointer moved to another native window
we just set the cursor on that window. Always setting on the toplevel
fixes this.
2009-04-02 10:15:26 +02:00
Alexander Larsson
e24c9e291d Switch motion hint emulation to be serial based.
For backends not supporting serials, just have
_gdk_windowing_window_get_next_serial return zero.
2009-04-02 10:15:26 +02:00
Alexander Larsson
6a0d317866 Keep track of the impl windows wrapper directly with a ref
This is needed so that the ->wrapper of the impl window doesn't
go away while there are virtual windows referencing the impl
window.
2009-04-02 10:15:26 +02:00
Alexander Larsson
cf54a2c68e Ungrab keyboard if virtual window is hidden or destroyed 2009-04-02 10:15:26 +02:00
Alexander Larsson
cb05af0a61 Implement GDK_POINTER_MOTION_HINT_MASK support 2009-04-02 10:15:25 +02:00
Alexander Larsson
d267452bb7 New flicker flicker fixing approach
There was a performance problem with the old flicker fixing
approach. For moved windows we copied the window data to the double
buffer pixmap and then back to the window with the rest of the
expose data. In some cases the copy from window data to pixmap was
very slow because the pixmap was allocated in system memory and
the window in video memory.

The new approach is to delay all window moves and then replay them
after the expose has drawn to the double buffer pixmap but before
drawing it to the window. Furthermore, we remove all exposed areas
from the destination of the delayed moves so we won't copy something
just to then immediately draw over it.

This makes scrolling in firefox fast, and it makes tests/flicker not
show any (detectable) flicker.
2009-04-02 10:15:25 +02:00
Alexander Larsson
3155fdcd41 gdk_window_process_updates_internal only needs to flush outstanding moves 2009-04-02 10:15:25 +02:00
Alexander Larsson
4455db353f Split out the flushing of outstanding moves
Some places need to only flush the outstanding moves, split
this into gdk_window_flush_outstanding_move
2009-04-02 10:15:25 +02:00
Alexander Larsson
a9fd3ae249 Flush any outstanding stuff in the window in non-buffered get_internal_paint_info case
We return the raw window drawable, so its likely the app will do some
weird stuff to it, like draw using non-gdk operations. We don't want
the app to see any half-drawn state, so flush everything.

This fixes a scroll issue in firefox at least.
2009-04-02 10:15:25 +02:00
Alexander Larsson
815f0d7605 Clip exposed area to the visible region.
This avoids extra work, and it means we won't allocate large pixmaps
for double buffering.
2009-04-02 10:15:25 +02:00
Alexander Larsson
d82cee80c3 Don't send expose events if region is empty 2009-04-02 10:15:21 +02:00
Alexander Larsson
7cebc68bde Handle native children correctly in gdk_window_scroll
This is basically the same fix as was done for
gdk_window_move_resize_internal. We make sure not to move the native
child window contents twice and we don't copy data that was overwritten
by the moving of the native child windows.
2009-04-02 10:15:21 +02:00
Alexander Larsson
50d9a9018a Ifdef out x11 specific code 2009-04-02 10:15:21 +02:00
Alexander Larsson
e718893611 Fix performance issue with find_native_sibling_above
It keep recursing a lot, unnecessary
2009-04-02 10:15:20 +02:00
Alexander Larsson
1084b8e6a1 Call backend move_resize with the right coords/size
We calculated and set the new position and size, just pass that.
This avoids parsing the "special values" again
2009-04-02 10:15:20 +02:00
Alexander Larsson
905d328933 Make moving subwindows correctly handle native windows
Whenever a native window is moved this causes an immediate change in
the window (the window content is copied). This change conflicts can
conflict with outstanding moves or other cached changed, so we need
to flush all outstanding moves in the related windows.

To simplify the code for window move/resize the toplevel version was
split out to its own function.

Move native windows after recomputing so that we get the right new
shape before moving (and the implied copy). This means we're not
copying too much data.

Take into account the area of a moved window that contains native
subwindows, as these affect things in two ways:

First of all we shouldn't copy the original window location, as that
is copied by the native window move.

Secondly, we can't copy things  that would end up copying from the
native window move destination, as the data that used to be there is
now destroyed by the native window move.
2009-04-02 10:15:20 +02:00
Alexander Larsson
df4f4c14c7 do_move_region_bits_on_impl needs to copy from overlapping native windows too
It can happen that another native window is re-shaped over the region to
be moved, this will not destroy the data (since we're unsetting the background
when we reshape), but it will mean we need to read from this window.

We already used INCLUDE_INFERIORS, but that only handle subwindows. We fix
this by doing the copy on the toplevel, offsetting the copy to compensate for
this.
2009-04-02 10:15:20 +02:00
Alexander Larsson
6b15e248fa move_region_on_impl - shortcut if region is empty 2009-04-02 10:15:20 +02:00
Alexander Larsson
3c5c7f4b4d Avoid extending implicit paint size due to empty regions not working well with gdk_rectangle_union on clipbox 2009-04-02 10:15:20 +02:00
Alexander Larsson
ef3d1893b6 Always set the shape when creating a native window.
This is not always done by recompute_visible_regions, as
the clip region doesn't change.
2009-04-02 10:15:19 +02:00
Alexander Larsson
c967cabc35 Avoid lots of unnecessary computation when moving toplevel windows
There is no need to do all these computations when moving toplevels
as that can't really change any visible regions. Nor will it cause
any exposes we need to handle.
2009-04-02 10:15:19 +02:00
Alexander Larsson
cdb405dfcf Restack native window after reparent put it on top 2009-04-02 10:15:19 +02:00
Alexander Larsson
c1884ce403 Fix up native window handling in gdk_window_lower too 2009-04-02 10:15:19 +02:00
Alexander Larsson
28c4518cca Fix up gdk_window_raise and native window creation to not move native window above windows outside the non-native parent 2009-04-02 10:15:19 +02:00
Alexander Larsson
cce1ff8eb8 Move all backend specific raise/lower code into _internal helpers 2009-04-02 10:15:19 +02:00
Alexander Larsson
e918b64088 Make sure we handle clipping in gdk_window_draw_pixbuf if gc == NULL 2009-04-02 10:15:19 +02:00
Alexander Larsson
78bbac87ed Send expose events to exposed area when changing the window shape 2009-04-02 10:15:19 +02:00
Alexander Larsson
d6ecaca166 Handle GDK_WA_CURSOR in non-native window creation 2009-04-02 10:15:18 +02:00
Alexander Larsson
764ceead66 Include inferiors when moving window parts 2009-04-02 10:15:18 +02:00
Alexander Larsson
5378324a18 Ref imp even in non-native windows and don't NULL out in destroy so that get_screen works after destroy. 2009-04-02 10:15:18 +02:00
Alexander Larsson
40827b99db When creating native window, set the native background 2009-04-02 10:15:18 +02:00
Alexander Larsson
959d940812 Need to split up impl changing and reparenting so we can recompute abs_x/y inbetween 2009-04-02 10:15:17 +02:00
Alexander Larsson
c8bdac7508 Recompute abs_x/y before reparenting windows due to new native window parent 2009-04-02 10:15:17 +02:00
Alexander Larsson
acf1954f12 Don't destroy NULL region 2009-04-02 10:15:17 +02:00
Alexander Larsson
ed5564ee3a Ensure we show native window when creating them for already visible windows 2009-04-02 10:15:17 +02:00
Alexander Larsson
d73859fe16 Move native window showing/hiding out of is_impl, we may need to do this for emulated windows too 2009-04-02 10:15:17 +02:00
Alexander Larsson
9f2c97dd80 Ensure that we always invalidate newly exposed areas, as X may not (due to temp bg none) 2009-04-02 10:15:17 +02:00
Alexander Larsson
4a0cb4a240 Various fixes for native windows:
move_region_on_impl() - doesn't need to copy anything if dx/dy == 0
Ensure that we queue an update when invalidating an empty area but we have outstanding moves
Temporarily unset background when moving native child windows
2009-04-02 10:15:17 +02:00
Alexander Larsson
76e23f00da Update abs_x/y before moving native children 2009-04-02 10:15:17 +02:00
Alexander Larsson
4442463481 Move all native children (recursively) in gdk_window_scroll 2009-04-02 10:15:16 +02:00
Alexander Larsson
f6e1b0ac17 Ensure that we're properly hiding impl window if one of its parent non-impl windows are hidden
Also, add some debug printing code to list the GdkWindow tree
2009-04-02 10:15:16 +02:00
Alexander Larsson
a38e797941 Don't remove composited childrens area when processing updates
Handle shape when processing updates
Make sure we reset the old clips before setting new cairo clips
2009-04-02 10:15:16 +02:00
Alexander Larsson
890503099f Handle mask == NULL in shape_combine_mask 2009-04-02 10:15:16 +02:00
Alexander Larsson
d7e369c27a Implement input shapes 2009-04-02 10:15:16 +02:00
Alexander Larsson
4ba2b181bf Implement shaped windows 2009-04-02 10:15:16 +02:00
Alexander Larsson
062da50b9f Add _gdk_windowing_window_get_shape 2009-04-02 10:15:16 +02:00
Alexander Larsson
0d540e935b Create _gdk_drawable_create_cairo_surface to ugly typechecking 2009-04-02 10:15:15 +02:00
Alexander Larsson
0ba99e6e7b Make gdk_windowing_window_destroy a GdkWindowImpl method 2009-04-02 10:15:15 +02:00
Alexander Larsson
36ce54878b Make _gdk_windowing_window_queue_translation a GdkWindiwImpl call 2009-04-02 10:15:15 +02:00
Alexander Larsson
f22211c881 Remove unnecessary clear_area method in GdkWindowImpl 2009-04-02 10:15:15 +02:00
Alexander Larsson
d093be43e7 For implicit grabs, we grab the *event* window, not the pointer window 2009-04-02 10:15:15 +02:00
Alexander Larsson
83ee69740e Handle cursors right with grabs 2009-04-02 10:15:15 +02:00
Alexander Larsson
7b2b9a0219 Implement cursors 2009-04-02 10:15:15 +02:00
Alexander Larsson
f2b50ff638 Fix crossing event order and some details 2009-04-02 10:15:15 +02:00
Alexander Larsson
b771c9924d New approach to motion event handling 2009-04-02 10:15:11 +02:00
Alexander Larsson
afc81c9e64 gdk_window_draw_points() - make sure we use the offset points 2009-04-02 10:14:08 +02:00
Alexander Larsson
d74d94ce69 Implement flicker free handling of window moves/resizes 2009-04-02 10:14:08 +02:00
Alexander Larsson
5587130d48 Don't access event after freeing it 2009-04-02 10:14:08 +02:00
Alexander Larsson
1babb5400b Share the code to copy impl window regions w/ update_area 2009-04-02 10:14:08 +02:00
Alexander Larsson
dc0e339697 Don't actually clear background when mapped, as that causes ugly flashed. Just queue a repaint.
This is what the X backend does too.
2009-04-02 10:14:08 +02:00
Alexander Larsson
ee4211b9a8 Move flushing code to non-implicit-paint only call.
This is in preparation for other types of buffering
2009-04-02 10:14:08 +02:00
Alexander Larsson
62a52f8fd3 Don't include composited childen in window clip region, update region when setting composited 2009-04-02 10:14:08 +02:00
Alexander Larsson
191e8d1587 Ensure native window if composite requested 2009-04-02 10:14:08 +02:00
Alexander Larsson
a9ca08f6eb Don't draw on input_only windows 2009-04-02 10:14:07 +02:00
Alexander Larsson
bb709321f0 Store colormap on impl window (necessary for e.g. foreign windows) 2009-04-02 10:14:07 +02:00
Alexander Larsson
2fa6f32d8e When reparenting, remove from old parent before setting the new parent
(otherwise we remove from the wrong parent)
2009-04-02 10:14:07 +02:00
Alexander Larsson
533d3058b8 Fix some return value warnings 2009-04-02 10:14:07 +02:00
Alexander Larsson
ede9c2cf74 Handle gdk_window_get_impl_window on root window 2009-04-02 10:14:07 +02:00
Alexander Larsson
077eab6edf Clear to end of window if passing zero width or height to gdk_window_clear_area (fixes clist/ctree clearing) 2009-04-02 10:14:07 +02:00
Alexander Larsson
ec5d176278 Move gdk_window_get_deskrelative_origin to the GdkWindowImpl and make the common code handle abs_x/y 2009-04-02 10:14:07 +02:00
Alexander Larsson
891440d288 The double get_composite_drawable case can happen for pixmap targets too, so move the code to gdk_draw_drawable 2009-04-02 10:14:07 +02:00
Alexander Larsson
b6e84d3105 Fix draw_drawable being offset when using window as source (testgtk text test) 2009-04-02 10:14:07 +02:00
Alexander Larsson
c7554a2c76 Don't convert foreign windows to child when reparented to non-toplevel 2009-04-02 10:14:06 +02:00
Alexander Larsson
864649157d Move _gdk_gc_remove_drawable_clip from after each time its set to before each pixmap set and when adding a new different region
This means we can avoid changing the clip if we're drawing with the same gc to the same clip region
2009-04-02 10:14:06 +02:00
Alexander Larsson
e9ee842db1 Move drawable clip tracking into GdkGC 2009-04-02 10:14:06 +02:00
Alexander Larsson
5ff017e64e Move clip offsetting into _gdk_gc_intersect_clip_region 2009-04-02 10:14:06 +02:00
Alexander Larsson
47acf79494 Actually report x/y_root against the root window 2009-04-02 10:14:06 +02:00
Alexander Larsson
3a6d68e836 Add g_warning to not yet supported code 2009-04-02 10:14:05 +02:00
Alexander Larsson
aee3c571b0 Ensure we have native window before reparenting to toplevel 2009-04-02 10:14:05 +02:00
Alexander Larsson
f39bdc7e0f Make sure we change the event mask on native window if they change between toplevel and child 2009-04-02 10:14:05 +02:00
Alexander Larsson
07f76be87a Change assert to warning with some information 2009-04-02 10:14:05 +02:00
Alexander Larsson
346acdca54 Never set shapes on foreign windows 2009-04-02 10:14:05 +02:00
Alexander Larsson
ec4f8baa08 For foreign parents, use the real parent not the root (which is what we list as parent in the APIs) 2009-04-02 10:14:05 +02:00
Alexander Larsson
eabac453e6 Initial client-side-windows work
The history before this was kind of twisted as several different
approaches were tested, so that was all squashed into this initial
commit to hide the uninteresting changes and files that were later
removed.
2009-04-02 10:14:01 +02:00
Alexander Larsson
e2a2ba9d98 Revert patch that conflicts with client-side-windows work
Revert commit f4090b5c84, as that
conflicts with the client-side-windows work. Furthermore, that
change is already applied as part of the client-side-windows work.
2009-04-02 10:06:01 +02:00
Alexander Larsson
f4090b5c84 Bug 573087 – gdkwindow.c: {x,y}_offset used uninitialized
2009-03-02  Alexander Larsson  <alexl@redhat.com>

	Bug 573087 – gdkwindow.c: {x,y}_offset used uninitialized

	* gdk/gdkwindow.c (gdk_window_clear_backing_rect_redirect):
	Don't use uninitialized vars.
	Fix offsets for redirected pixmap, draw to pixmap not window.



svn path=/trunk/; revision=22441
2009-03-02 15:09:27 +00:00
Matthias Clasen
fd20c54e35 Revert an accidental commit
svn path=/trunk/; revision=22421
2009-02-28 05:28:47 +00:00
Matthias Clasen
d0e7f5889e Bug 573069 – Gdk-CRITICAL warnings with Gtk 2.14 when dragging
GtkNotebook tabs

        * gtk/gtkwidget.c (_gtk_widget_synthesize_crossing): Be a little
        more careful when navigating up the parent chain.

        * gdk/gdkwindow.c (_gdk_window_destroy_hierarchy): Reset the
        pointer window thats stored on the screen when it is destroyed.


svn path=/trunk/; revision=22420
2009-02-28 05:24:07 +00:00
Matthias Clasen
379822c74b Use a different approach to snapshotting that is in line with what is done
* gtk/gtkwidget.c (gtk_widget_get_snapshot): Use a different approach
        to snapshotting that is in line with what is done in the client-side
        windows branch, and that works for widgets regardless if they are
        double-buffered or not. Patch by Alex Larsson.

        * gdk/gdkwindow.c (_gdk_window_calculate_full_clip_region): Clip
        to the parent.


svn path=/trunk/; revision=22187
2009-01-23 05:34:14 +00:00
Matthias Clasen
c98305ac00 Update docs on blank cursors
svn path=/trunk/; revision=22147
2009-01-20 02:27:57 +00:00
Christian Dywan
27d8d8ea2b Fail in gdk_window_new if _gdk_window_new failed
2009-01-09  Christian Dywan  <christian@imendio.com>

	Fail in gdk_window_new if _gdk_window_new failed

	* gdk/gdkwindow.c (gdk_window_new): Add g_return_val_if_fail
        in case _gdk_window_new is NULL. Approved by Tim Janik

svn path=/trunk/; revision=22082
2009-01-09 13:47:02 +00:00
Matthias Clasen
1934d3423b Fix a typo
svn path=/trunk/; revision=21877
2008-12-13 05:20:10 +00:00
Christian Dywan
c8392add22 Bug 539263 – Deprecate gdk_window_get_toplevels
2008-11-30  Christian Dywan  <christian@imendio.com>

	Bug 539263 – Deprecate gdk_window_get_toplevels

	* gdk/gdkwindow.c:
	* gdk/gdkwindow.h: Deprecate gdk_window_get_toplevels

svn path=/trunk/; revision=21831
2008-11-30 05:04:29 +00:00
Michael Natterer
6df89b0ad8 gdk/gdkdraw.c gdk/gdkimage.c gdk/gdkscreen.c replace assertions for obj !=
2008-10-21  Michael Natterer  <mitch@imendio.com>

	* gdk/gdkdraw.c
	* gdk/gdkimage.c
	* gdk/gdkscreen.c
	* gdk/gdkwindow.c: replace assertions for obj != NULL by
	GDK_IS_OBJ(), remove redundant != NULL checks when there is
	already a type check, add some g_return_if_fail() that were
	missing entirely, fix some broken indentation and spacing.


svn path=/trunk/; revision=21695
2008-10-21 21:42:39 +00:00
Matthias Clasen
07b6161995 More doc fixes
svn path=/trunk/; revision=21282
2008-09-04 04:32:30 +00:00
Torsten Schönfeld
016290b4e2 Fix small issues in the documentation of gdk_window_remove_redirection and
gdk_window_redirect_to_drawable.

svn path=/trunk/; revision=21137
2008-08-16 19:56:23 +00:00
Cody Russell
e7b024c6b7 Bug 541305 – [Win32] Scrolling was broken after GdkWindow refactoring
2008-07-02  Cody Russell  <bratsche@gnome.org>

        Bug 541305 – [Win32] Scrolling was broken after GdkWindow refactoring

        * gdk/win32/gdkwindow-win32.c:	Reverted	some logic so that scrolling
	works again.

        * gdk/win32/gdkgeometry-win32.c: Removed some more unnecessary	checks.
        * gdk/win32/gdkkeys-win32.c: Removed unused variable to fix compile-time
        warnings.


svn path=/trunk/; revision=20737
2008-07-02 20:22:30 +00:00
Cody Russell
57223c9a05 Revert name change
svn path=/trunk/; revision=20724
2008-07-01 22:57:50 +00:00
Cody Russell
fce9c8b7d4 Practically everything changed.
2008-06-30  Cody Russell  <bratsche@gnome.org>

        * Practically everything changed.

        Change	all references	of GIMP	Toolkit	(and variations	of it)
        to GTK+	Toolkit, showing no mercy at all to our	beloved
	ancestry. (#540529)


svn path=/trunk/; revision=20709
2008-06-30 23:01:56 +00:00
Michael Natterer
971023d922 Some unrelated cleanups found while reviewing the offscreen window patch:
2008-06-30  Michael Natterer  <mitch@imendio.com>

	Some unrelated cleanups found while reviewing
	the offscreen window patch:

	* gdk/gdkwindow.c: add missing Since: 2.14 to the redirection
	functions, fix some function header indentation, update
	documentation of redirect_to_drawable().

	* gdk/x11/gdkwindow-x11.c
	* gdk/x11/gdkpixmap-x11.c: fix function header
	formatting/indentation.

	* gtk/gtkwidget.c: use I_() on "damage_event".


svn path=/trunk/; revision=20708
2008-06-30 12:15:29 +00:00
Emmanuele Bassi
e27632cd6d Abstract some GdkWindow API into an interface that the backends must
2008-06-27  Emmanuele Bassi  <ebassi@gnome.org>

	Abstract some GdkWindow API into an interface that the backends
	must implement. (based on a patch by Alex Larsson)

	* gdk/Makefile.am: Add gdkwindowimpl.[ch]

	* gdk/gdk.symbols: Move symbols around.

	* gdk/gdkinternals.h:
	* gdk/gdkwindowimpl.[ch]: Move some of the GdkWindow API we require
	from the backends to a GInterface that the backends should implement
	instead.

	* gdk/gdkwindow.c: Provide some of the GdkWindow public API as a
	wrapper call around the GdkWindowImpl interface vtable.

	* gdk/x11/gdkevents-x11.c:
	* gdk/x11/gdkgeometry-x11.c:
	* gdk/x11/gdkprivate-x11.h:
	* gdk/x11/gdkwindow-x11.c:
	* gdk/x11/gdkwindow-x11.h: Update the X11 backend to implement
	the GdkWindowImpl interface.

svn path=/trunk/; revision=20695
2008-06-27 14:27:44 +00:00
Johan Dahlin
d97cdbdf53 Include "config.h" instead of <config.h> Command used: find -name
2008-06-21  Johan Dahlin  <jdahlin@async.com.br>

    * *.[ch]: Include "config.h" instead of <config.h>
    Command used:
    find -name \*.[ch]|xargs perl -p -i -e 's/^#include <config.h>/#include "config.h"/g'
    Rubberstamped by Mitch and Tim


svn path=/trunk/; revision=20669
2008-06-22 14:28:52 +00:00
Matthias Clasen
d0b1330d92 Fix doc typos
svn path=/trunk/; revision=20380
2008-06-13 17:20:55 +00:00
10:49:20 Tim Janik
4111cf2065 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
Michael Natterer
92f86e0496 gdk/gdk.h gdk/gdkcairo.h gdk/gdkcolor.h gdk/gdkgc.h gdk/gdkinternals.h
2008-01-14  Michael Natterer  <mitch@imendio.com>

	* gdk/gdk.h
	* gdk/gdkcairo.h
	* gdk/gdkcolor.h
	* gdk/gdkgc.h
	* gdk/gdkinternals.h
	* gdk/gdkregion.h
	* gdk/gdkwindow.h: made GdkRectangle*, GdkRegion* and GdkColor*
	parameters const.

	* gdk/gdkcairo.c
	* gdk/gdkgc.c
	* gdk/gdkwindow.c
	* gdk/gdkrectangle.c
	* gdk/gdkpolyreg-generic.c
	* gdk/gdkregion-generic.c
	* gdk/directfb/gdkcolor-directfb.c
	* gdk/directfb/gdkgc-directfb.c
	* gdk/directfb/gdkgeometry-directfb.c
	* gdk/directfb/gdkwindow-directfb.c
	* gdk/quartz/gdkcolor-quartz.c
	* gdk/quartz/gdkgc-quartz.c
	* gdk/quartz/gdkgeometry-quartz.c
	* gdk/quartz/gdkwindow-quartz.c
	* gdk/win32/gdkcolor-win32.c
	* gdk/win32/gdkgc-win32.c
	* gdk/win32/gdkgeometry-win32.c
	* gdk/win32/gdkprivate-win32.h
	* gdk/win32/gdkwindow-win32.c
	* gdk/x11/gdkcolor-x11.c
	* gdk/x11/gdkgc-x11.c
	* gdk/x11/gdkgeometry-x11.c
	* gdk/x11/gdkmain-x11.c
	* gdk/x11/gdkprivate-x11.h
	* gdk/x11/gdkwindow-x11.c: changed accordingly.

	* gdk/gdkpolyreg-generic.c: uncruftify to have proper function
	headers.


svn path=/trunk/; revision=19365
2008-01-14 14:02:12 +00:00
Kristian Rietveld
50a766c95f guard for windows with GDK_WINDOW_DESTROYED set. (Fixes #482531, reported
2007-11-09  Kristian Rietveld  <kris@imendio.com>

	* gdk/gdkwindow.c (gdk_window_process_all_updates): guard for
	windows with GDK_WINDOW_DESTROYED set.  (Fixes #482531, reported
	by Sebastien Bacher).


svn path=/trunk/; revision=18975
2007-11-09 22:44:31 +00:00
Kristian Rietveld
eab3ef3145 Fixes #426246.
2007-09-12  Kristian Rietveld  <kris@imendio.com>

	Fixes #426246.

	* gdk/gdk.symbols:
	* gdk/gdkwindow.[ch]
	(gdk_window_freeze_toplevel_updates_libgtk_only),
	(gdk_window_thaw_toplevel_updates_libgtk_only): new functions
	to freeze a toplevel window and all its descendants.  To be made
	public in 2.14,
	(gdk_window_schedule_update): return if toplevel is frozen,
	(gdk_window_process_all_updates): defer processing updates if toplevel
	is frozen.

	* gtk/gtkwindow.c (gtk_window_configure_event): directly size
	allocate for override redirect windows, freeze toplevel and
	descendants otherwise and wait until resizing is done.


svn path=/trunk/; revision=18802
2007-09-12 17:13:24 +00:00
Behdad Esfahbod
69cce50cd0 Revert commit that was accidentally made. Sorry.
svn path=/trunk/; revision=18596
2007-08-08 22:30:26 +00:00
Behdad Esfahbod
398a61e43d Use gtk_true instead of rolling a new one. Patch from Xan Lopez.
2007-08-08  Behdad Esfahbod  <behdad@gnome.org>

        * gdk/gdkwindow.c (gdk_window_invalidate_region): Use gtk_true
        instead of rolling a new one.  Patch from Xan Lopez.


svn path=/trunk/; revision=18595
2007-08-08 22:25:58 +00:00
Ryan Lortie
f0cfba930c add note that the semantics of this call, when mixed with the new
2007-07-20  Ryan Lortie  <desrt@desrt.ca>

        * gtk/gtkwidget.c (gtk_widget_is_composited): add note that the
        semantics of this call, when mixed with the new
        gdk_window_set_composited(), will change in the future.

        * gdk/x11/gdkevents-x11.c (gdk_event_translate): only grab Damage
        events that belong to us.


svn path=/trunk/; revision=18506
2007-07-19 23:50:39 +00:00
Tim Janik
2af3c53e47 docu fixup by Bjoern Lindqvist, #454703.
Sun Jul  8 01:33:45 2007  Tim Janik  <timj@gtk.org>

        * gdk/gdkwindow.c: docu fixup by Bjoern Lindqvist, #454703.



svn path=/trunk/; revision=18398
2007-07-07 23:36:33 +00:00
Behdad Esfahbod
1adaeba11f Improve docs. (#446138, Björn Lindqvist)
2007-06-12  Behdad Esfahbod  <behdad@gnome.org>

        * gdk/gdkwindow.c (gdk_window_get_pointer): Improve docs.
        (#446138, Björn Lindqvist)


svn path=/trunk/; revision=18109
2007-06-12 05:34:26 +00:00
Matthias Clasen
0f4d0f8e62 2.11.1
svn path=/trunk/; revision=18027
2007-06-04 17:01:14 +00:00
Matthias Clasen
885ba04648 Add support for composited child windows. (#412882, Ryan Lortie)
2007-06-01  Matthias Clasen  <mclasen@redhat.com>

        Add support for composited child windows.  (#412882, Ryan Lortie)

        * gdk/gdk.symbols:
        * gdk/gdkdisplay.h:
        * gdk/gdkinternals.h:
        * gdk/gdkwindow.[hc]: Add gdk_display_supports_composite() and
        gdk_window_set_composited().

        * gdk/x11/gdkevents-x11.c:
        * gdk/x11/gdkdisplay-x11.[hc]:
        * gdk/x11/gdkwindow-x11.[hc]: X11 implementation.

        * gdk/win32/gdkdisplay-win32.c:
        * gdk/win32/gdkwindow-win32.c: Dummy win32 implementration.

        * gdk/quartz/gdkdisplay-quartz.c:
        * gdk/quartz/gdkwindow-quartz.c: Dummy Quartz implementation.

        * gdk/directfb/gdkdisplay-directfb.c:
        * gdk/directfb/gdkwindow-directfb.c: Dummy DirectFB implementation.

        * tests/testgtk.c: Add a "composited window" test.


svn path=/trunk/; revision=18004
2007-06-01 12:16:12 +00:00
Matthias Clasen
abaed38888 Doc improvements
svn path=/trunk/; revision=17496
2007-03-12 06:26:34 +00:00
Matthias Clasen
82ce59cd0f Remove unnecessary NULL checks before g_free(). (#369666, Morten Welinder,
2007-03-09  Matthias Clasen <mclasen@redhat.com>

        * Everywhere: Remove unnecessary NULL checks before
        g_free().  (#369666, Morten Welinder, Djihed Afifi)

        * configure.in: Check for ftw.h



svn path=/trunk/; revision=17444
2007-03-09 21:57:37 +00:00
Matthias Clasen
788b391cef Reduce locking overhead by not repeatedly getting the paintable iface.
2007-01-25  Matthias Clasen  <mclasen@redhat.com>

        * gdk/gdkwindow.c: Reduce locking overhead by not repeatedly getting
        the paintable iface.



svn path=/trunk/; revision=17213
2007-01-25 14:24:53 +00:00
Behdad Esfahbod
b4328913d8 Avoid overflow when converting coordinates to Pango units. (#332266, Jody
2007-01-05  Behdad Esfahbod  <behdad@gnome.org>

        * gdk/gdkprivate.h:
        * gdk/gdkpango.c (gdk_draw_layout_line_with_colors),
        (gdk_draw_layout_with_colors):
        * gdk/gdkwindow.c (gdk_window_draw_glyphs_transformed):
        Avoid overflow when converting coordinates to Pango units. (#332266,
        Jody Goldberg)


svn path=/trunk/; revision=17075
2007-01-05 06:16:32 +00:00
Matthias Clasen
721c3bc101 Replace a lot of idle and timeout calls by the new gdk_threads api.
2006-12-22  Matthias Clasen  <mclasen@redhat.com>

        * *.c: Replace a lot of idle and timeout calls by
        the new gdk_threads api.
2006-12-22 19:10:43 +00:00
Matthias Clasen
241ff0b6bd Cleanups 2006-10-08 05:32:07 +00:00
Matthias Clasen
70ae6a0e83 Apply a patch by Behdad Esfahbod to reduce relocations. (#359053)
2006-10-03  Matthias Clasen  <mclasen@redhat.com>

        * gtk/*.c, gdk/*.c: Apply a patch by Behdad Esfahbod to
        reduce relocations. (#359053)
2006-10-03 15:54:52 +00:00
Matthias Clasen
5175386051 Add some more detail to the docs. (#311399, Nikos Kouremenos)
2006-07-17  Matthias Clasen  <mclasen@redhat.com>

	* gdk/gdkwindow.c (gdk_window_get_pointer): Add some more
	detail to the docs.  (#311399, Nikos Kouremenos)
2006-07-17 04:19:59 +00:00
Matthias Clasen
7b12fdbc2a Don't use G_DEFINE_TYPE, since the instance struct name does not match the
2006-05-30  Matthias Clasen  <mclasen@redhat.com>

	* gdk/gdkpixmap.c:
	* gdk/gdkwindow.c: Don't use G_DEFINE_TYPE, since the instance
	struct name does not match the type name.  (#343453, Ed Catmur)
2006-05-31 03:34:04 +00:00
Matthias Clasen
f22387f042 Remove extraneous ; 2006-05-14 03:58:06 +00:00
Matthias Clasen
8db728f953 fix docs 2006-05-07 03:28:22 +00:00
Anders Carlsson
47257b075b Add new GdkPaintable interface which implementation objects can implement
2006-04-11  Anders Carlsson  <andersca@imendio.com>

        * gdk/gdkinternals.h:
        * gdk/gdkwindow.c:
        (_gdk_paintable_get_type):
        (gdk_window_begin_paint_region):
        (gdk_window_end_paint):
        (gdk_window_process_updates):
        (gdk_window_invalidate_maybe_recurse):
        Add new GdkPaintable interface which implementation objects can
        implement in order to override gdk painting functions.
2006-04-10 19:43:08 +00:00
Matthias Clasen
10f0736ac7 Use G_DEFINE_TYPE.
2006-04-04  Matthias Clasen  <mclasen@redhat.com>

	* gdk/gdkdisplay.c:
	* gdk/gdkdisplaymanager.c:
	* gdk/gdkdraw.c:
	* gdk/gdkkeys.c:
	* gdk/gdkpixmap.c:
	* gdk/gdkscreen.c:
	* gdk/gdkwindow.c:
	* gdk/x11/gdkcolor-x11.c:
	* gdk/x11/gdkdisplay-x11.c:
	* gdk/x11/gdkdnd-x11.c:
	* gdk/x11/gdkdrawable-x11.c:
	* gdk/x11/gdkgc-x11.c:
	* gdk/x11/gdkimage-x11.c:
	* gdk/x11/gdkinput.c:
	* gdk/x11/gdkpixmap-x11.c:
	* gdk/x11/gdkscreen-x11.c:
	* gdk/x11/gdkwindow-x11.c: Use G_DEFINE_TYPE.

	* gdk/x11/gdkcolor-x11.c:
	* gdk/x11/gdkdnd-x11.c:
	* gdk/x11/gdkimage-x11.c: Use instance private data.
2006-04-04 14:02:03 +00:00
Federico Mena Quintero
9bfabba034 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
Michael Natterer
8bdc0bf97c Applied patch from maemo-gtk that addresses many issues wrt display
2005-11-10  Michael Natterer  <mitch@imendio.com>

	Applied patch from maemo-gtk that addresses many issues wrt
	display migration and display closing (bug #85715).

	* gdk/gdkdisplay.c (gdk_display_dispose): don't just set the
	default display to NULL when it's closed. Instead set the most
	recently opened display as new default (if one exists).

	* gdk/gdkpango.c (on_renderer_display_closed): fixed signature
	of this callback.

	* gdk/gdkscreen.c (gdk_screen_dispose): check if the GCs still
	exist before unrefing them.

	* gdk/gdkwindow.c (_gdk_window_destroy_hierarchy): if the screen
	is closed, allow destruction of the root window.

	* gdk/x11/gdkdisplay-x11.c: moved some stuff from finalize() to
	dispose(), free stuff that was leaked before.

	* gdk/x11/gdkevents-x11.c (_gdk_x11_events_uninit_screen): check if
	the xsettings_client still exists before destroying it.

	* gdk/x11/gdkkeys-x11.c: added finalization and free the allocated
	X resources.

	* gdk/x11/gdkpixmap-x11.c: moved stuff from finalize() to new
	dispose() implementation.

	* gdk/x11/gdkscreen-x11.c: moved stuff from finalize() to
	dispose() and check if it still exists before unrefing it. Set
	their pointers to NULL/None *after* upchaining in dispose(),
	because X11 implementations of members of the parent class still
	need them for their own destruction.

	* gdk/x11/gdkvisual-x11.c: removed finalize() implementation which
	was g_error()ing when finalizing a visual.

	* gtk/gtkclipboard.c (gtk_clipboard_finalize): don't use
	get_clipboard_widget() because it would create the widget if it
	doesn't exist. Use g_object_get_data() directly instead.

	* gtk/gtktextdisplay.c (on_renderer_display_closed): fixed signature
	of this callback.
2005-11-10 12:09:42 +00:00
Matthias Clasen
4401280405 Fix #316871, reported by Dan Winship:
2005-09-26  Matthias Clasen  <mclasen@redhat.com>

	Fix #316871, reported by Dan Winship:

	* gdk/gdkwindow.h (struct _GdkWindowObject): Add a shaped flag.

	* gdk/x11/gdkwindow-x11.c (gdk_window_shape_combine_mask)
	(gdk_window_shape_combine_region): Set it here.

	* gdk/gdkwindow.c (gdk_window_invalidate_maybe_recurse): Don't
	remove the child area for shaped windows.
2005-09-26 20:27:44 +00:00
Matthias Clasen
476e138db0 Intern type names before registering the type to avoid unnecessary copies.
2005-08-31  Matthias Clasen  <mclasen@redhat.com>

	* gdk/x11/gdkwindow-x11.c (gdk_window_impl_x11_get_type):
	* gdk/x11/gdkscreen-x11.c (_gdk_screen_x11_get_type):
	* gdk/x11/gdkpixmap-x11.c (gdk_pixmap_impl_x11_get_type):
	* gdk/x11/gdkkeys-x11.c (gdk_keymap_x11_get_type):
	* gdk/x11/gdkinput.c (gdk_device_get_type):
	* gdk/x11/gdkimage-x11.c (gdk_image_get_type):
	* gdk/x11/gdkgc-x11.c (_gdk_gc_x11_get_type):
	* gdk/x11/gdkdrawable-x11.c (_gdk_drawable_impl_x11_get_type):
	* gdk/x11/gdkdnd-x11.c (gdk_drag_context_get_type):
	* gdk/x11/gdkdisplay-x11.c (_gdk_display_x11_get_type):
	* gdk/x11/gdkcolor-x11.c (gdk_colormap_get_type):
	* gdk/gdkwindow.c (gdk_window_object_get_type):
	* gdk/gdkscreen.c (gdk_screen_get_type):
	* gdk/gdkrectangle.c (gdk_rectangle_get_type):
	* gdk/gdkpixmap.c (gdk_pixmap_get_type):
	* gdk/gdkkeys.c (gdk_keymap_get_type):
	* gdk/gdkfont.c (gdk_font_get_type):
	* gdk/gdkevents.c (gdk_event_get_type):
	* gdk/gdkdraw.c (gdk_drawable_get_type):
	* gdk/gdkdisplaymanager.c (gdk_display_manager_get_type):
	* gdk/gdkdisplay.c (gdk_display_get_type):
	* gdk/gdkcursor.c (gdk_cursor_get_type):
	* gdk/gdkcolor.c (gdk_color_get_type): Intern type names before
	registering the type to avoid unnecessary copies.
2005-08-31 15:14:26 +00:00