2003-07-29 Tor Lillqvist <tml@iki.fi>
Fix for #108007, #112402, #117042: There was confusion in
gdk/win32 at various places whether a window position refers to
the decoration position or the client area position. Also whether
window size includes decorations or not.
The correct interpretation apparently is that in GDK (like in
X11), a top-level window position means the decoration's position,
but size means the window's inner size (client area size). In the
Win32 API, the window size usually includes the decorations,
though.
* gdk/win32/gdkevents-win32.c (decode_key_lparam): Move inside
#ifdef G_ENABLE_DEBUG.
(handle_configure_event): New function, generates GDK_CONFIGURE
events from WM_SIZE and WM_MOVE messages. Even if no event is
generated because of the event mask, still set the private
position and size fields. Calculate position and size correctly.
(gdk_event_translate): Call handle_configure_event().
* gdk/win32/gdkgeometry-win32.c: Cosmetics.
* gdk/win32/gdkwindow-win32.c: Use GDI_CALL() and API_CALL()
macros. Cosmetic debugging output changes.
(SafeAdjustWindowRectEx): Remove. If an application wants to
locate a window outside of the screen, it's not GDK's business to
prevent it. And anyway, with multiple monitors, negative
coordinates are perfectly normal.
(gdk_window_new): Adjust the window size for decorations after
_gdk_window_init_position() has done its job. (But the big window
code currently is presumably broken on Win32 anyway.)
(gdk_window_move): The position passed in is supposed to be that
of the window border, so don't need to adjust for decorations.
(gdk_window_resize, gdk_window_move_resize): Simplify somewhat.
2003-06-30 Tor Lillqvist <tml@iki.fi>
* gdk/win32/gdkdnd-win32.c (find_window_enum_proc): New function,
callback proc for EnumWindows().
(gdk_drag_find_window_for_screen): Actually take the drag_window
argument into account: Instead of using WindowFromPoint(), use
EnumWindows(), to be able to skip the drag_window. (#116320, Tony
M Brown, Herman Bloggs)
* gdk/win32/*.c: Replace gdk_drawable_ref()/unref() and
gdk_window_ref()/unref() calls with g_object_ref()/unref().
Consistently use %p format in debugging output of pointers and
HANDLEs.
2002-11-12 Tor Lillqvist <tml@iki.fi>
* gdk/win32/gdkprivate-win32.h
* gdk/win32/*.c: Rename all global variables and functions to
start with underscore.
Merge from stable:
More work on the Win32 backend. The cause of some scrolling
problems 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.
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().
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?
Otherwise, all of testgtk and gtk-demo except "big windows" now
seem to work pretty well.
Bug #79720 should be fixed now.
* 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/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/gdkevents-win32.c (gdk_event_translate) 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, 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. 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/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.
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_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_lbstyle_to_string,
_gdk_win32_pstype_to_string, _gdk_win32_psstyle_to_string,
_gdk_win32_psendcap_to_string, _gdk_win32_psjoin_to_string,
_gdk_win32_rect_to_string, _gdk_win32_gdkrectangle_to_string,
_gdk_win32_gdkregion_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/gdkwindow-win32.c (gdk_propagate_shapes): Plug memory
leak, free list after use.
(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/gdkprivate-win32.h: Drop the clip_region field from
GdkGCWin32. Only use the HRGN hcliprgn. Declare new
functions.
* gdk/win32/*.c: Use new debugging functions.
* gdk/win32/rc/gdk.rc.in: Update copyright year.
2002-09-12 Tor Lillqvist <tml@iki.fi>
Merge from gtk-2-0:
* gdk/win32/gdkgeometry-win32.c: Add GDK_NOTE debugging output
to some functions, related to moving and resizing and expose
and antiexpose queue processing. Use %p to output HWNDs.
Tentative fix for #79720 based on code by Florent Duguet:
* gdk/win32/gdkgeometry-win32 (gdk_window_queue_append): New
static function. Checks length of translate_queue, calls
_gdk_window_process_expose() if length is >= 128. Then appends
to translate_queue.
(gdk_window_queue_translation,_gdk_windowing_window_queue_antiexpose):
Call gdk_window_queue_append().
2002-02-10 Hans Breuer <hans@breuer.org>
* gdk/win32/gdkgeometry-win32.c : don't reduce the scroll
rect size by the scroll amount
* gdk/win32/gdkwindow-win32.c
* gdk/win32/gdkselection-win32.c : added some casts to
make it compile with msvc's strict type checking
* gtk/fnmatch.c : #include <ctype.h> again for tolower
prototype. The fnmatch() code assumes to be in the crt
locale though it is feeded by utf8 strings from gtkfilesel.c
* gtk/gtkfilesel.c : let ->cmpl_text be a strdup managed by
_CompletionDir instead of referencing already freed memory
* gtk/gtktooltips.c (gtk_tooltips_init) : fix typo to
gtk_rc_parse_string (theDefaultTooltipColor) once as it
was intended
* tests/makefile.msc : added more tests
* tests/testgtk.c (create_list) : don't try to load gtkenums.h
from the current directory use ../gtk/gtkenums.h instead
2001-11-18 Hans Breuer <hans@breuer.org>
* gtk/gdkaccelmap.c : make it compile with msvc: !HAVE_UNISTD_H;
no label without op, even if it's a no-op.
* gtk/gtk.def :
* gtk/makefile.msc.in : reflect marshaler split, some clean-up
* config.h.win32.in : remove definition of HAVE_DIRENT_H
* gtk/gtkfilesel.c : due to GDir (new in glib) DIR isn't
required anymore, replace it.
* gtk/queryimmodules.c : DIR -> GDir replacement, also
getcwd() -> g_get_current_dir()
* gdk/win32/gdkgeometry-win32.c : adapt to refactored gdkgeometry-x11.c
Even 'noisy laugh' scolling appears to work, though I still can't
claim to have fully understood what it is supposed to do ...
2001-10-29 Tor Lillqvist <tml@iki.fi>
* gdk/win32/libwntab32x.la: New file, hand-written wrapper for the
Wintab library.
* gdk/win32/gdkwin32.h
* gdk/win32/gdkprivate-win32.h: Reorganise to match corresponding
X11 headers better, and to enable gdkwin32.h to be installed and
included from applications, but not the *-win32.h headers.
* gdk/win32/*.c: Corresponding small changes, simplifications of
#includes.
* gdk/win32/gdkregion-win32.c: Remove.
* gdk/win32/gdkevents-win32.c (print_event): Add GDK_SETTING.
* gdk/win32/gdkfont-win32.c
* gdk/win32/gdkgeometry-win32.c: Remove unused variables.
* gdk/win32/gdkproperty-win32.c (gdk_atom_intern): Don't insert
GDK_NONE values into hash table.
Changes for autoconfiscated build on Win32, and addition of Win32
backend to the related files:
* gdk/win32/Makefile.am: Actually enable building the win32
objects here, not just list all files in EXTRA_DIST. Link in the
compiled resource file from rc/gdk-win32res.lo. If HAVE_WINTAB,
copy the Wintab library into the .libs directory.
* gdk/win32/gdkwindow-win32.c (RegisterGdkClass): Don't assume the
name of the GDK DLL when fetching the icon. Use the HMODULE saved
in gdk_dll_hinstance by DllMain.
* gdk/win32/rc/Makefile.am: Build gdk-win32res.lo using the
build/win32/lt-compile-resource script.
* gdk/win32/rc/gdk.rc.in
* gtk/gtk-win32.rc.in: Use the DLL name that libtool would use.
2001-09-21 Hans Breuer <hans@breuer.org>
* gdk/gdk.def :
* gtk/gtk.def : updated externals
* gtk/gtkmain.h : define get_gtk_win32_directoty ()
* gtk/gtkmain.c (find_module) : don't use module_name after freeing it.
Also handle that Win32 pathes cann't be hard-coded
* gtk/gtkrc.c : use get_gtk_win32_directoty () to cleanup the various
module, themes etc directory calculations
* gdk/win32/gdkgeometry-win32.c : some more hacking to get coordinates
>16 bit right. The size limit within Win9x appears _not_ to be 32767
but slightly smaller ...
* gdk/win32/gdkwindow-win32.c : use impl->position_info to avoid
>16 bit clipping. Added dummy body for gdk_window_set_icon_list ()
* gdk/win32/gdkdrawable-win32.c : implement gdk_win32_drawable_get_handle ()
* gdk/win32/gdkevents-win32.c : some tweaking to get better expose
handling. I'm not sure if it is better now, but at least not worse
* gdk/win32/makefile.msc : define INSIDE_GDK_WIN32, some cleanup
* gdk/win32/gdkwin32.h : reflect recent API restrictions
2001-08-18 Hans Breuer <hans@breuer.org>
* gdk/gdk.def : updated externals
* gdk/win32/gdkselection-win32.c : returning TRUE with gdk_selection_set
is required to get (at least) visible in entry fields. Some selections
are really handled now - even on win32 - but copying via middle
mouse button into a different app needs to wait ...
* gdk/win32/gdkdnd-win32.c : implemented inter-app drag&drop
mostly by stealling code from gdkdnd-fb.c. Thanks to who ever wrote it!
* gdk/win32/gdkevents-win32.c : some tweaking to get better expose
handling. I'm not sure if it is better now, but at least not worse
* gdk/win32/gdkgeometry-win32.c : replaced every call to MoveWindow
with SetWindowPos () which allows more fine-tuning backing-store wise
* gdk/win32/gdkwindow-win32.c : allow unraised gdk_window_show ().
Also changed move/resize to be more like the X version.
* gtk/gtk.def : updated externals
2001-03-31 Hans Breuer <hans@breuer.org>
* config.h.win32.in : disable USE_MMX for msvc build cause
the assembler doesn't fit and is out of my scope. Disable
USE_GMODULE for msvc build as wel. The right way to share
binaries on win32 would be to use libtiff.dll etc. To reduce
installation hassles IMO it's better to include all fileformats
builtin to gdk-pixbuf
* gdk-pixbuf/makefile.msc : new file
* gdk/gdk.def : updated
* gdk/win32/gdkevents-win32.c : don't erase the background if
.no_bg is set. It improves the scrolling (e.g. of testgtk main
buttons
* gdk/win32/gdkgeometry-win32.c : added comment about the above
* gdk/win32/gdkwindow-win32.c : added three new functions like
the X version. Only one is implemented, because the other two
"gdk_window_begin_(resize|move)_drag" got no docs and appear to
be default behaviour on win32 anyway ...
* gtk/gtk.def : updated
* gtk/makefile.msc.in : update for new files, use glib-genmarshal
from where it was built and add an additional rule to automagically
build gtkmarshal.[hc]
* gtk/gtkfilesel.c (open_new_dir) : don't increase n_entries
before array access for the current entry isn't finished
* gtk/gtktreeitem.c (gtk_tree_item_subtree_button_click) :
use g_return_val_if_fail
* gtk/testgtk.c (window_controls) : don't use the *wrong* size
for the static array, but let the compiler calculate it. It
makes me wonder if gcc isn't capable to catch bugs like this ...
2000-10-22 Tor Lillqvist <tml@iki.fi>
* gdk/win32/gdkgc-win32.c
* gdk/win32/gdkimage-win32.c: Remove gcc -Wall warnings.
Patches by Hans Breuer:
* gdk/win32/gdkdrawable-win32.c (gdk_win32_draw_glyphs): Call
SetBkMode() and SetTextAlign() before calling
pango_win32_render().
* gdk/win32/gdkgc-win32.c (gdk_win32_gc_values_to_win32values):
Set hcliprgn to NULL after destroying it.
(gdk_gc_set_clip_rectangle): Delete hcliprgn and set to NULL.
* gdk/win32/gdkgeometry-win32.c
(_gdk_windowing_window_queue_antiexpose): More effective
implementation.
* gdk/win32/gdkpixmap-win32.c (gdk_pixmap_new): Use drawable's
depth as default, not the visual's.
* gdk/win32/gdkwindow-win32.c (gdk_window_set_title): Guard
against empty title.
* gdk/win32/gdkprivate-win32.h: Define a helper macro,
IMAGE_PRIVATE_DATA.
* gdk/win32/gdkimage-win32.c (gdk_image_get_type): Use it.
2000-10-09 Tor Lillqvist <tml@iki.fi>
* README.win32: Update.
* gdk/win32/gdkgeometry-win32.c (gdk_window_clip_changed): Add two
lines that had been deleted by mistake (?).
* gdk/win32/gdkcursor-win32.c (gdk_cursor_new_from_pixmap): Handle
also the case fg==white and bg==black (but still not randomly
coloured cursors). Thanks to Wolfgang Sourdeau.
* gdk/win32/*.c: Silence gcc -Wall.
* gtk/gtk.def: Add missing entry points.
Fixes by Hans Breuer:
* gdk/makefile.msc
* gdk/win32/makefile.msc: Update.
* gdk/testgdk.c: If compiling with debugging (with _DEBUG defined,
some MSVC thing, presumably), cause breakpoint on failures. Add
GDK_NOR case. Call g_log_set_always_fatal.
* gdk/win32/gdkwin32id.c (gdk_win32_handle_table_insert): Handle
should be pased by reference.
* gdk/win32/gdkprivate-win32.h: Correct declaration accordingly.
* gdk/win32/*.c: Correct calls to gdk_win32_handle_table_insert.
* gdk/win32/gdkevents-win32.c
* gdk/win32/gdkwindow-win32.c: Handle WM_CREATE.
* gdk/win32/gdkgc-win32.c: Fix mixups of drawable and
implementation object.
* gdk/win32/gdkimage-win32.c (gdk_image_get): Handle drawables,
not just windows.
* gdk/win32/gdkpixmap-win32.c (gdk_pixmap_impl_win32_finalize):
Use the wrapper object.
Wed Jul 26 12:59:31 2000 Tim Janik <timj@gtk.org>
* *.[hc]: applied patch from Andreas Persenius <ndap@swipnet.se> that
updates the license headers to the GNU Lesser General Public License,
as well as updating the copyright year to 2000.
2000-07-25 Tor Lillqvist <tml@iki.fi>
* Makefile.am: Include the build directory.
* configure.in: Generate build/Makefile and build/win32/Makefile.
* config.h.win32: Add USE_GMODULE and USE_MMX for gdk-pixbuf.
* gdk/gdk.def
* gtk/gtk.def: Updates.
* gdk/makefile.mingw.in: Define GDK_COMPILATION. Link with
PANGOWIN32_LIBS and gdk_pixbuf.
* gdk/win32: Compiles, but no doubt doesn't work at all.
* gdk/win32/makefile.mingw.in: Define GDK_COMPILATION.
* gdk/win32/gdkinput.c: New file, temporarily.
* gdk/win32/gdkinput-win32.h: New file
* gdk/win32/gdkinputprivate.h: Remove.
* gtk/gtkrc.[ch] (gtk_win32_get_installation_directory): Renamed and
made externally visible.