2002-11-29 Tor Lillqvist <tml@iki.fi>
* gdk/win32/gdkprivate-win32.h (WIN32_API_FAILED,
WIN32_GDI_FAILED, OTHER_API_FAILED): Don't use __PRETTY_FUNCTION__
if __GNUC__ >= 3, to avoid warning message.
* gdk/win32/gdkwindow-win32.c (show_window_internal): Only call
SetWindowPos() with HWND_TOPMOST if the raise flag is on.
(gdk_window_set_transient_for): Rewrite. Just call SetWindowLong()
with GWL_HWNDPARENT, which despite its name sets the *owner*
window, which should be exactly what we want. The PSDK
documentation is said to be misleading. testgtk's modal window
test now works much better. (#50586)
2002-11-25 Tor Lillqvist <tml@iki.fi>
* gdk/win32/gdkevents-win32.c (print_event_state,
print_window_state, print_event): Enclose in #ifdef
G_ENABLE_DEBUG, as they use functions only available with
G_ENABLE_DEBUG, and are called only when G_ENABLE_DEBUG.
2002-11-24 Tor Lillqvist <tml@iki.fi>
* gdk/win32/gdkdrawable-win32.c: Remove the already ifdeffed-out
code that didn't use generic_draw.
(generic_draw): When drawing into the mask (for tiled/stippled
fill styles), copy the line attributes from the actual GC. Also
ask for text drawing setup if needed. Use differently set up HDCs
in the normal and tiled/stippled cases.
(draw_segments) Slight code reorg.
(draw_lines, gdk_win32_draw_lines): Use generic_draw() also for
lines.
* gdk/win32/gdkgc-win32.c: Remove ifdeffed-out code.
(predraw_set_foreground, gdk_win32_hdc_get): Some code moved
around. Call SetROP2() only if necessary. Call SetTextColor() only
if GDK_GC_FOREGROUND flag present.
Remove background color handling from here. The background color
of a GdkGC is supposed to affect only GDK_OPAQUE_STIPPLED fill style,
which it is already handled in generic_draw(), and
GDK_LINE_DOUBLE_DASH lines, which aren't implemented properly
anyway. Calling SetBkColor() is unnecessary.
(gdk_win32_hdc_get, gdk_win32_hdc_release): Add doc comments, as
these are public functions.
2002-11-23 Tor Lillqvist <tml@iki.fi>
* gdk/win32/gdkdrawable-win32.c (draw_polygon,
gdk_win32_draw_polygon, draw_segments, gdk_win32_draw_segments):
Use generic_draw() also for polygons and segments, thus adding
support for tiled and stippled polygons and segments.
(gdk_win32_draw_points): Use Rectangle() instead of
SetPixel(). Rectangle() uses the function (raster op) set for the
HDC, SetPixel() doesn't.
(widen_bounds): New function, refactoring.
* gdk/win32/gdkgc-win32.c (predraw_set_foreground): Ifdef out the
GDK_OPAQUE_STIPPLED handling here, has been superseded by the code
in generic_draw(). Always create a solid brush.
2002-11-22 Tor Lillqvist <tml@iki.fi>
* gdk/win32/gdkdrawable-win32.c (draw_arc, gdk_win32_draw_arc):
Use generic_draw() also for arcs, thus adding support for tiled
and stippled arcs.
* gdk/win32/gdkevents-win32.c (synthesize_expose_events): Don't
synthesize expose events for GDK_INPUT_ONLY windows.
(gdk_event_translate): On WM_SIZE, call
gdk_synthesize_window_state() if window was iconified, restored or
maximized. (#98983, Arnaud Charlet)
* gdk/win32/gdkmain-win32.c
* gdk/win32/gdkpixmap-win32.c: Minor debugging output changes.
* gdk/win32/gdkwindow-win32.c (gdk_window_new): Revert change from
2002-11-19: Don't need to set depth of GDK_INPUT_ONLY windows to
nonzero. It was synthesize_expose_events() (see above) that was
causing the trouble with them in 256-colour mode.
2002-11-21 15:48:13 2002 Dan Mills <thunder@ximian.com>
* configure.in: replace gtk-doc version check with an all-sh
version that works better (#99216).
Wed Nov 20 20:35:14 2002 Kristian Rietveld <kris@gtk.org>
* ==== Released 2.0.9 ====
* configure.in: Version 2.0.9, interface, binary age 9.
* NEWS: updated.
Wed Nov 20 19:42:57 2002 Kristian Rietveld <kris@gtk.org>
Merged treeview fixes from HEAD.
* gtk/gtkrbtree.c (gtk_rbtree_reorder_sort_func): return a value
in the range of [-1, 1] instead [0, 1],
(gtk_rbtree_reorder_invert_func): ditto,
This makes treeview reordering working on platforms as FreeBSD and
solaris, thanks go to Heiner Eichmann for finding this out and
sending in a patch (#98251).
* gtk/gtktreestore.c (node_free): only free the data list if
node->data is not NULL,
(gtk_tree_store_remove): free the data list from the node if
needed. (#94728, pointed out by Peter Bloomfield).
* gtk/gtktreeview.c (gtk_tree_view_remove_column): stop editing
and set the edited_column to NULL if edited_column is set.
(#91288, modified patch from Josh Parsons).
* gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_start_editing):
only _set_text if celltext->text is not NULL. (#97815, reported
and testcase provided by Vitaly Tishkov).
* gtk/gtktreeselection.c (gtk_tree_selection_real_modify_range):
also update the anchor_path, makes behaviour consistent with the
other selection modification functions. (#96801, reported and
testcase provided by Vitaly Tishkov).
2002-11-20 Tor Lillqvist <tml@iki.fi>
Fix by Arnaud Charlet (#98983):
* gtk+/gdk/win32/gdkwindow-win32.c
(gdk_window_get_frame_extents): Fix typo in setting y.
2002-11-19 Tor Lillqvist <tml@iki.fi>
* gdk/win32/gdkwindow-win32.c (gdk_window_new): Yes, my change
on 2002-11-14 to gdkpixmap-win32.c:gdk_pixmap_new() broke
palettized (256-colour) display slightly: For some reason
GdkWindowObject::depth of GDK_INPUT_ONLY windows now needs to
be set to the visual's depth, even if the X11 backend sets it
to zero. Otherwise, on a palettized display, gdk_pixmap_new()
when called from gdk_window_begin_paint_region() would get
zero from gdk_drawable_get_depth(), and fail.
2002-11-15 Tor Lillqvist <tml@iki.fi>
* gdk/win32/gdkprivate-win32.h
* gdk/win32/gdkglobals-win32.c
* gdk/win32/gdkmain-win32.c
* gdk/win32/gdkdrawable-win32.c (generic_draw): Don't check if
MaskBlt() is present in gdi32.dll, it is, even on Win9x. It just
always returns failure on Win9x. Instead, call MaskBlt() only if
we are on NT/2k/XP.
2002-11-14 Tor Lillqvist <tml@iki.fi>
Start implementing all fill styles (i.e. tiled, stippled, and
opaque stippled in addition to the plain solid style) in the Win32
backend in an elegant and generic way. For now only did the
draw_rectangle() and draw_glyphs() methods. The rest will
follow. Previously some of the drawing methods implemented opaque
stippling, but not tiles or non-opaque stippling.
Seems to work fine, now the check marks show up in check buttons,
the stippled background and stippled text in gtk-demo's Text
Widget look as they should, and GtkText's line wrap arrow shows
correctly instead of an ugly rectangle.
The implementation does do a lot of pixmap handling and blitting
back and forth, especially on Win9x. But performance is hopefully
not an issue. I don't think many applications do a lot of tiled or
stippled drawing.
* gdk/win32/gdkprivate-win32.h: Define a new macro, GDI_CALL, that
calls a GDI function and prints a warning if it failed. Also
API_CALL for non-GDI calls. Cleans all the the if (!BlaBla())
WIN32_GDI_FAILED ("BlaBla") snippets, these can now be written
GDI_CALL (BlaBla, ()).
* gdk/win32/gdkdrawable-win32.c: Use GDI_CALL macro in lots of places.
(generic_draw): New function that handles all the blitting
necessary to implement tiles and stipples. A function that
actually draws stuff is passed as a parameter to
generic_draw(). If the fill style is solid, it is called
directly, to draw on the destination drawable. Otherwise it is
called to draw on a temporary mask bitmap, which then is used in
blitting operations. The tiles and/or stipples are rendered into
another temporary pixmap. If MaskBlt() is available (on NT/2k/XP),
it is used, otherwise a sequence of BitBlt() is used to do the
final composition onto the destination drawable.
(draw_tiles_lowlevel, draw_tiles): Some renaming and code
reorg. Use BitBlt() to blit each tile, not gdk_draw_drawable().
(rop2_to_rop3): Instead of bitblt_wrapper, this function does the
binary->ternary rop mapping.
(draw_rectangle, gdk_win32_draw_rectangle, draw_glyphs,
gdk_win32_draw_glyphs): Split functionality into two functions,
with generic_draw() doing its magic inbetween.
* gdk/win32/gdkevents-win32.c: Remove the TrackMouseEvent code, it
was ifdeffed out and wouldn't have done anything even if
enabled. Remove the GDK_EVENT_FUNC_FROM_WINDOW_PROC code, didn't
have any effect any more anyway after all the changes GTK+ has
gone through in the last years. Remove some #if 0 code.
* gdk/win32/gdkgc-win32.c (gdk_gc_copy): Set the copy's hdc field
to NULL in case a GC is copied while it has a Windows DC active.
* gdk/win32/gdkprivate-win32.h
* gdk/win32/gdkglobals-win32.c: Remove gdk_event_func_from_window_proc.
Add mask_blt that points to MaskBlt() if available.
* gdk/win32/gdkmain-win32.c: Remove -event-func-from-window-proc
option. Check if MaskBlt() is available. If there is a
PRETEND_WIN9X envvar, set windows_version as if on Win9x.
* gdk/win32/gdkpixmap-win32.c (_gdk_win32_pixmap_new,
gdk_pixmap_new): Combine these two, _gdk_win32_pixmap_new() wasn't
used or exported. Make a bit more like the X11 version. Hopefully
I didn't break the fragile palettized display ("pseudocolor")
code.
2002-11-13 Christopher James Lahey <clahey@ximian.com>
* gdk/x11/gdkwindow-x11.c (gdk_window_impl_x11_get_colormap): Ref
the colormap returned from gdk_colormap_lookup.
2002-11-13 Tor Lillqvist <tml@iki.fi>
* gdk/win32/gdkdrawable-win32.c (bitblt_wrapper): New
function. Translates the GC's current binary raster op (rop2) to
the appropriate ternary raster op and calls BitBlt(). Previously
used SRCCOPY always.
(blit_from_pixmap, blit_inside_window, blit_from_window): Use
bitblt_wrapper().
* gdk/win32/gdkgc-win32.c
* gdk/win32/gdkmain-win32.c:: Various debugging output improvements.
* gdk/win32/gdkgc-win32.c (predraw_set_foreground): Check whether
tile/stipple origins are valid when calling SetBrushOrgEx().
(gdk_win32_hdc_get): Ifdef out code that tries to handle the
stipple by converting it into a region, and combining the clip
region with that. A stipple shouldn't work like that, it should
replicate in x and y directions. Stipples will have to be handled
elsewhere.
* gdk/win32/gdkmain-win32.c: (gdk_win32_gcvalues_mask_to_string,
gdk_win32_rop2_to_string): New debugging functions.
(gdk_win32_print_dc): Print also DC's rop2 and text color.
* gdk/win32/gdkprivate-win32.h: Declare new functions.
2002-11-12 Tor Lillqvist <tml@iki.fi>
More work on the Win32 backend. The scrolling problem diagnosis
from 2002-11-07 was wrong, even if the cure happened to work. The
problems were not caused by a lack of WM_PAINT messages while
scrolling. The real issue was that SetWindowPos() and
ScrollWindowEx() don't blit those parts of the window they think
are invalid. As we didn't keep Windows's update region in synch
with GDK's, Windows thought those areas that in fact had been
updated were invalid. Calling ValidateRgn() in
_gdk_windowing_window_queue_antiexpose() seems to be an elegant
and efficient solution, removing from Windows's update region
those areas we are about to repaint proactively.
In some cases garbage leftover values were used for the clip
origin in GdkGCWin32. This showed up as odd blank areas around the
pixmaps included in the Text Widget in gtk-demo.
Having the clip region either as a GdkRegion or a HRGN in
GdkGCWin32 was unnecessary, it's better to just use a HRGN.
The translation and antiexpose queue handling in
gdkgeometry-win32.c seems unnecessary (and not implementable in
the same way as on X11 anyway, no serial numbers) on Windows,
ifdeffed out.
All of testgtk and gtk-demo except "big windows" now seem to work
pretty well.
Bug #79720 should be fixed now.
* gdk/win32/gdkevents-win32.c (gdk_event_translate) In WM_PAINT
handler: Don't check for empty update rect. When we get a
WM_PAINT, the update region isn't empty. And if it for some
strange reason is, that will be handled later anyway. Don't leak
hrgn.
* gdk/win32/gdkgc-win32.c: Set clip origins to zero
when appropriate.
(gdk_gc_copy): Increase refcount on colormap if present.
(gdk_win32_hdc_get): Handle just hcliprgn. If we have a stipple,
combine it with clip region after selecting into the DC.
(_gdk_win32_bitmap_to_hrgn): Rename from _gdk_win32_bitmap_to_region.
(_gdk_win3_gdkregion_to_hrgn): New function, code snippet
extracted from gdk_win32_hdc_get().
* gdk/win32/gdkgeometry-win32.c: Ifdef out the translate_queue
handling.
(gdk_window_copy_area_scroll): Increase clipRect to avoid
ScrollWindowEx() not scrolling pixels it thinks are invalid.
Don't call UpdateWindow().
(_gdk_window_move_resize_child): Don't call UpdateWindow().
(gdk_window_premove, gdk_window_postmove,
gdk_window_clip_changed): Add debugging output.
(_gdk_windowing_window_queue_antiexpose): Just call ValidateRgn()
on the region.
(_gdk_window_process_expose): No use for the serial number
parameter now. Instead of a rectangle, take a region parameter, as
Windows gives us one in WM_PAINT.
* gdk/win32/gdkmain-win32.c (gdk_win32_rect_to_string,
gdk_win32_gdkrectangle_to_string, gdk_win32_gdkregion_to_string):
New debugging functions.
* gdk/win32/*.c: Use above functions.
* gdk/win32/gdkwindow-win32.c (gdk_propagate_shapes): Plug memory
leak, free list after use.
* gdk/win32/gdkprivate-win32.h: Drop the clip_region field from
GdkGCWin32. Only use the HRGN hcliprgn. Declare new functions.
* gdk/win32/rc/gdk.rc.in: Update copyright year.
Fri Nov 8 14:44:43 2002 Owen Taylor <otaylor@redhat.com>
* ==== Released 2.0.8 ====
* configure.in: Version 2.0.8, interface, binary age 8.
* NEWS: Updated.
Thu Nov 7 18:09:42 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkfilesel.c (open_new_dir): Escape invalid
filename before printing it out, since it isn't
a valid UTF-8 string. (#94676)
2002-11-07 Tor Lillqvist <tml@iki.fi>
* gdk/win32/gdkgeometry-win32.c (gdk_window_copy_area_scroll,
_gdk_window_move_resize_child): Call UpdateWindow() after
scrolling or moving/resizing the window. This causes a WM_PAINT
message to be sent to the window procedure. Improves scrolling a
lot, for instance in testgtk's "scrolled windows" dialog or
gtk-demo's "Text Widget".
Without calling UpdateWindow(), Windows generates a WM_PAINT only
when there is no other message in the queue. Thus, while you keep
moving the scrollbar slider and generating mouse messages, no
WM_PAINT messages are sent.
Thu Nov 7 17:18:06 2002 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkdrawable-x11.c (gdk_x11_draw_pixbuf):
Don't try to use render if we can't get a picture for
the drawable. (Fixes#97220, reported by
Jamie Zawinski)
* gtk/gtkimage.c: Force requisition calculation
when we get a expose prior to size_request().
(#91711, reported by Sven Neumann, debugging
help from Matthias Clasen, Soeren Sandmann)
2002-11-04 Sven Neumann <sven@gimp.org>
* io-bmp.c (DecodeHeader): removed redundant code that did nothing,
caused a compiler warning and is also not in the HEAD branch.
2002-11-03 Tor Lillqvist <tml@iki.fi>
Lots of changes to the Win32 backend:
One big improvement is that scrolling of windows with background
pixmaps now works much better. (This can be seen in for instance
testgtk's "text" test.) Blitting inside a window
(gdk_draw_drawable) also works much better now (can also seen in
the "text" test).
Another major change is we don't (try to) do guffaw scrolling as
there is no static window gravity on Windows. Guffaw scrolling
would be unnecessary anyway, as there is the ScrollWindow()
API. This improves the behaviour of the Text Widget demo in
gtk-demo a lot. But I have no idea how the lack of static win
gravity should be handled in other places where the X11 code uses
it. Especially _gdk_window_move_resize_child().
Big windows still don't work correctly, I assume.
l
Another vague area is the translate_queue. I don't think the queue
items actually ever gets used, at least not in the code as of now.
There is still some problem in expose handling. By moving an
obscuring window back and forth over testgtk's main window, for
instance, every now and then you typically get narrow vertical or
horizontal strips of pixels that haven't been properly redrawn
after being exposed. A fencepost error somewhere?
* gdk/win32/gdkevents-win32.c: Cast known GdkWindowObjects
directly instead of using GDK_WINDOW_OBJECT(). Remove unused
latin_locale_loaded variable.
(_gdk_win32_get_next_tick): New function. Used to make sure
timestamps of events are always increasing, both in events
generated from the window procedure and in events gotten via
PeekMessage(). Not sure whether this is actually useful, but it
seemed as a good idea.
(real_window_procedure): Don't use a local GdkEventPrivate
variable. Don't attempt any compression of configure or expose
events here, handled elsewhere.
(erase_background): Accumulate window offsets when traversing up
the parent chain for GDK_PARENT_RELATIVE_BG, in order to get
correct alignment of background pixmaps. Don't fill with
BLACK_BRUSH if GDK_NO_BG.
(gdk_event_get_graphics_expose): A bit more verbose debugging output.
(gdk_event_translate): Use _gdk_win32_get_next_tick(). In the
WM_PAINT handler, call GetUpdateRgn() before calling BeginPaint()
and EndPaint() (which empty the update region).
* gdk/win32/gdkdnd-win32.c
* gdk/win32/gdkinput-win32.c:
Use _gdk_win32_get_next_tick().
* gdk/win32/gdkfont-win32.c: Use %p to print HFONTs.
(gdk_text_size): Remove, unused.
* gdk/win32/gdkgeometry-win32.c
(_gdk_windowing_window_queue_antiexpose): Always return FALSE for
now, until figured out whether antiexposes actually can work on
Win32.
(gdk_window_copy_area_scroll): Scroll also children with the
ScrollWindowEx() call. No need to call gdk_window_move() on the
children.
(gdk_window_scroll): Don't do guffaw scrolling.
(gdk_window_compute_position): Fix typo, used win32_y where x was
intended.
(gdk_window_queue_append): Use GetTickCount() for serial number,
not GetMessageTime(), which can be very far back.
* gdk/win32/gdkwindow-win32.c (gdk_window_gravity_works): Remove,
we know that there is no such thing on Windows.
(gdk_window_set_static_bit_gravity,
gdk_window_set_static_win_gravity): Ditto, remove, they didn't do
anything anyway.
(_gdk_windowing_window_init, gdk_window_foreign_new): Call
_gdk_window_init_position() like in the X11 backend.
(gdk_window_reparent): Don't call the now nonexistent
gdk_window_set_static_win_gravity(). No idea what should be done
instead.
(gdk_window_get_geometry): The returned x and y should be relative
to parent. Used to be always zero..
(gdk_window_set_static_gravities): Return FALSE if trying to set
static gravity.
* gdk/win32/gdkdrawable-win32.c (_gdk_win32_draw_tiles):
Rewrite. Make static. Must take tile origin parameters, too.
(gdk_win32_draw_rectangle): Pass the tile/stipple origin to
_gdk_win32_draw_tiles(). Remove #if 0 code.
(blit_inside_window): Don't call ScrollDC(), that didn't work at
all like I thought. A simple call to BitBlt() is enough.
* gdk/win32/gdkcolor-win32.c (gdk_win32_color_to_string,
gdk_win32_print_paletteentries, gdk_win32_print_system_palette,
gdk_win32_print_hpalette)
* gdk/win32/gdkdrawable-win32.c (gdk_win32_drawable_description)
* gdk/win32/gdkevents-win32.c (gdk_win32_message_name):
Move all debugging helper functions to gdkmain-win32.c.
* gdk/win32/gdkmain-win32.c: (gdk_win32_lbstyle_to_string,
gdk_win32_pstype_to_string, gdk_win32_psstyle_to_string,
gdk_win32_psendcap_to_string, gdk_win32_psjoin_to_string): New
debugging functions.
(static_printf): Helper function for the above. sprintfs into a
static circular buffer, return value should be used "soon".
* gdk/win32/gdkgc-win32.c: Use above debugging functions.
* gdk/win32/gdkprivate-win32.h: Declare new functions, remove
obsoleted ones.
Sun Nov 3 21:26:20 2002 Kristian Rietveld <kris@gtk.org>
Bah, and of course I broke something ...
* gtk/gtktreeselection.c (gtk_tree_selection_selected_foreach): fix
up the mess I caused with my commit of Oct 23 fixing #50263, things
should be fine now.
Sun Nov 3 13:03:29 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkfilesel.c configure.in: Remove check for
winsock.h since it might show up on Linux+Wine.
Instead just conditionalize of G_OS_WIN32.
(#97396, Gaute Lindkvist)