summaryrefslogtreecommitdiff
path: root/gdk/win32/gdkevents-win32.c
Commit message (Collapse)AuthorAgeFilesLines
* Get the invalidated region from ScrollWindowEx() instead of an incorrectTor Lillqvist2006-01-021-1/+1
| | | | | | | | | | | | 2006-01-02 Tor Lillqvist <tml@novell.com> * gdk/win32/gdkgeometry-win32.c (gdk_window_scroll): Get the invalidated region from ScrollWindowEx() instead of an incorrect attempt to calculate it ourselves. Fix by John Ehresman. (#323666) * gdkevents-win32.c: Make _gdk_win32_hrgn_to_region() non-static. * gdkprivate-win32.h: Declare it.
* Don't treat Alt-Enter specially. It does not have any special meaning andTor Lillqvist2005-10-131-3/+2
| | | | | | | | 2005-10-13 Tor Lillqvist <tml@novell.com> * gdk/win32/gdkevents-win32.c (gdk_event_translate): Don't treat Alt-Enter specially. It does not have any special meaning and should be passed on to the application. (#318378, Tim Evans)
* Keep track of cursor position also in root window coordinates. Prune outTor Lillqvist2005-09-021-11/+14
| | | | | | | | | | | | | | | | | 2005-09-02 Tor Lillqvist <tml@novell.com> * gdk/win32/gdkevents-win32.c (gdk_event_translate): Keep track of cursor position also in root window coordinates. Prune out superfluous WM_MOUSEMOVE events even earlier, based on root window coordinates. Windows sends WM_MOUSEMOVE messages after a new window has ben mapped below the cursor even if the mouse doesn't move. We used to generate GDK_MOTION_NOTIFY in these cases. This confused at least gtk_menu_motion_notify(). (#314995) * gtk/gtkintl.h: No need to include config.h here. It caused warnings about GTK_LOCALEDIR being redefined on Win32 when compiling files where gtkintl.h is included after gtkprivate.h (which #undefines and re-#defines GTK_LOCALEDIR on Win32).
* Cosmetics.Tor Lillqvist2005-07-291-10/+5
|
* Remove ifdeffed out code relating to the gdk-ping message. Use the globalTor Lillqvist2005-07-291-148/+105
| | | | | | | | | | | | | | | | | | | | | | 2005-07-29 Tor Lillqvist <tml@novell.com> * gdk/win32/gdkevents-win32.c: Remove ifdeffed out code relating to the gdk-ping message. Use the global _gdk_display instead of calling gdk_display_get_default() which would return _gdk_display anyway. (append_event, apply_filters, gdk_event_translate): Drop any GdkDisplay parameter as we only have one display anyway. Use _gdk_display where needed. (gdk_event_apply_filters): Delete, move the code into its only caller, apply_filters(). (generate_button_event): Factor out code from two places in gdk_event_translate(). (gdk_event_translate): Call generate_button_event() in place of inline code.
* New static function to generate and append the GDK_GRAB_BROKEN events.Tor Lillqvist2005-07-281-18/+40
| | | | | | | | | | | | | | | | | 2005-07-29 Tor Lillqvist <tml@novell.com> * gdk/win32/gdkevents-win32.c (generate_grab_broken_event): New static function to generate and append the GDK_GRAB_BROKEN events. (gdk_pointer_grab, gdk_keyboard_grab): Generate grab broken events when overriding a grab inside the application, like in the X11 backend. Final bits of the fix for #107320, hopefully. (print_event): Handle also GDK_SETTING, GDK_OWNER_CHANGE and GDK_GRAB_BROKEN events. (gdk_event_translate): Call generate_grab_broken_event() in place of inline code.
* Ignore GrabBroken events which are caused by overgrabbing inside theMatthias Clasen2005-06-271-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | 2005-06-27 Matthias Clasen <mclasen@redhat.com> * gtk/gtkmenushell.c (gtk_menu_shell_grab_broken): Ignore GrabBroken events which are caused by overgrabbing inside the application; menus rely on these for their operation. * gdk/gdkevents.h (struct _GdkEventGrabBroken): Add a grab_window field. * gdk/win32/gdkevents-win32.c (gdk_event_translate): Set grab_window to NULL when generating GrabBroken events for WM_KILLFOCUS messages. * gdk/x11/gdkmain-x11.c (_gdk_xgrab_check_unmap) (_gdk_xgrab_check_destroy): Set grab_window to NULL when generating GrabBroken events when the grab window becomes unviewable or is destroyed. * gdk/x11/gdkmain-x11.c (gdk_pointer_grab, gdk_keyboard_grab): Generate GrabBroken events when overriding a grab inside the application. In this case, set grab_window to the new grab_window.
* Add a GrabBroken event to GDK, and a grab-broken-event signal toMatthias Clasen2005-06-251-1/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 2005-06-25 Matthias Clasen <mclasen@redhat.com> Add a GrabBroken event to GDK, and a grab-broken-event signal to GtkWidget. (#107320, Simon Cooke, initial patch by John Ehresman) * gdk/gdkevents.h: Add a GDK_GRAB_BROKEN event type, define a GdkEventGrabBroken event struct. * gdk/win32/gdkevents-win32.c (gdk_event_translate): Generate GrabBroken events in response to WM_KILLFOCUS. * gdk/x11/gdkmain-x11.c: Generate GrabBroken events when a grab is broken by the window becoming unviewable, or by another grab from the same client. * gtk/gtkwidget.h (GtkWidgetClass): Add grab_broken_event. * gtk/gtkwidget.c (gtk_widget_event_internal): Translate GrabBroken events into grab_broken_event signals. * gtk/gtkmain.c (gtk_main_do_event): Propagate GrabBroken events. * gtk/gtkmenushell.c (gtk_menu_shell_grab_broken): Deactivate the menu when the grab is broken. * gtk/gtkcolorsel.c (gtk_color_selection_grab_broken): Stop the color picker if the grab is broken. * gtk/gtkpaned.c (gtk_paned_grab_broken): Stop the drag if the grab is broken.
* gdk/win32/gdkevents-win32.c gdk/win32/gdkkeys-win32.c Check theTor Lillqvist2005-05-181-0/+20
| | | | | | | | | | | | 2005-05-18 Tor Lillqvist <tml@novell.com> * gdk/win32/gdkevents-win32.c * gdk/win32/gdkkeys-win32.c * gdk/win32/gdkprivate-win32.h: Check the KF_EXTENDED bit in lParam of WM_KEY* messages to distinguish between left and right Control and Alt keys. Unfortunately, the right Shift key doesnt set KF_EXTENDED, so to distinguish between left and right Shift keys, check the scan code. (#304584)
* New debugging function, to log a clipboard format name symbolically.Tor Lillqvist2005-04-041-1/+57
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 2005-04-04 Tor Lillqvist <tml@novell.com> * gdk/win32/gdkmain.c (_gdk_win32_cf_to_string): New debugging function, to log a clipboard format name symbolically. (_gdk_win32_data_to_string): Also new, to log random data bytes. Implement delayed rendering on Win32, specifically for transfering images through the clipboard from GTK+ apps to other apps (#168173, implementation by Ivan Wong): * gdk/win32/gdkevents-win32.c (gdk_event_translate): Handle WM_RENDERFORMAT. * gdk/win32/gdkprivate-win32.h * gdk/win32/gdkglobals-win32.c: Add _format_atom_table, _delayed_rendering_data and _image_bmp. * gdk/win32/gdkmain-win32.c: Initialize _image_bmp. * gdk/win32/gdkproperty-win32.c (gdk_property_change): Accept formats other than GDK_TARGET_STRING or _utf8_string, and assume they are handled through delayed rendering. * gdk/win32/gdkselection-win32.c (gdk_selection_convert): Return all available formats (including those registered by GTK+ apps) on request_targets. (gdk_selection_property_get): We should append a zero byte like X11 does. (gdk_win32_selection_add_targets): New function, for gtkselection's use. Win32 requires that the clipboard owner registers all valid formats even if the owner wants delayed rendering. (_gdk_win32_selection_convert_to_dib): New function. Convert images to DIB using gdk-pixbuf. * gdk/win32/gdkwin32.h: Declare gdk_win32_selection_add_targets(). * gtk/gtkselection.c (gtk_selection_add_target, gtk_selection_add_targets): Call gdk_win32_selection_add_targets() to register target formats. * gdk/gdk.symbols: Add gdk_win32_selection_add_targets().
* Fix event filter handling. If an event filter (global, client messageTor Lillqvist2005-03-301-47/+42
| | | | | | | | | | | | | | | 2005-03-30 Tor Lillqvist <tml@novell.com> * gdk/win32/gdkevents-win32.c (gdk_event_translate): Fix event filter handling. If an event filter (global, client message filter, of window-specific) returns GDK_FILTER_CONTINUE, continue as if nothing happened. If it returns GDK_FILTER_REMOVE or GDK_FILTER_TRANSLATE, return TRUE from gdk_event_translate() which means that DefWindowProc() will not be called. (gdk_event_translate): Fix client message handling. Append a GDK_CLIENT_EVENT unless there is a filter that matches and returns something other than GDK_FILTER_CONTINUE. (#135552)
* The state field should represent the state before the event, like on X11.Tor Lillqvist2005-03-301-5/+24
| | | | | | | | 2005-03-30 Tor Lillqvist <tml@novell.com> * gdk/win32/gdkevents-win32.c (build_pointer_event_state): The state field should represent the state before the event, like on X11. (#169753)
* On WM_MOUSEMOVE, don't check if this process owns the active window. ThisTor Lillqvist2005-03-181-10/+1
| | | | | | | | | | | | 2005-03-18 Tor Lillqvist <tml@novell.com> * gdk/win32/gdkevents-win32.c (gdk_event_translate): On WM_MOUSEMOVE, don't check if this process owns the active window. This makes cross-application widget embedding work better. On WM_MOVE, don't bother checking for window visibility. * gdk/win32/gdkim-win32.c: Remove bogus empty doc comment. Remove unused variables. Add some casts to silence gcc.
* gdk/win32/gdkprivate-win32.h Drop global variable _gdk_root_window, justTor Lillqvist2005-03-161-8/+8
| | | | | | | | | | | | | | | | | | | | | 2005-03-16 Tor Lillqvist <tml@novell.com> * gdk/win32/gdkprivate-win32.h * gdk/win32/*.c: Drop global variable _gdk_root_window, just call GetDesktopWindow(). Rename the GdkWindow* _gdk_parent_root to _gdk_root. * gdk/win32/gdkwindow-win32.h (GdkWindowImplWin32): Add toplevel_window_type field. * gdk/win32/gdkwindow-win32.c: As there is only one root window in GDK on Win32, we can compare directly to _gdk_root instead of checking the window type. (gdk_window_reparent): When reparenting a child of the desktop clear out the window decorations. Correspondingly, when reparenting to the desktop, add decorations. As in the X11 backend, save the window type of a toplevel window when reparenting, in case it is reparented back to toplevel.
* Print debugging output only if asked for, not always.Tor Lillqvist2005-03-161-9/+5
| | | | | | | | | | | | | | | | | | | 2005-03-16 Tor Lillqvist <tml@novell.com> * gdk/win32/gdkdisplay-win32.c (_win32_on_clipboard_change): Print debugging output only if asked for, not always. * gdk/win32/*.c: Use the %+d%+d format for coordinate pairs in debugging printout instead of +%d+%d. Misc other additions and cosmetic improvements to debugging printouts. Use API_CALL() and GDI_CALL() macros in more places. * gdk/win32/gdkwindow-win32.c (gdk_window_move, gdk_window_resize, gdk_window_move_resize): To detect child windows, check whether the real parent is not the desktop window, instead of relying on the GDK window type being GDK_WINDOW_CHILD. Foreign GtkPlug windows have a GDK window type GDK_WINDOW_FOREIGN, but are still de facto child windows.
* New debugging function. As GetKeyNameText() returns a localized key nameTor Lillqvist2005-03-151-7/+3
| | | | | | | | | | | | | | | | | 2005-03-15 Tor Lillqvist <tml@novell.com> * gdk/win32/gdkmain-win32.c (_gdk_win32_key_to_string): New debugging function. As GetKeyNameText() returns a localized key name we need to convert it to UTF-8. * gdk/win32/gdkprivate-win32.h: Declare it. * gdk/win32/gdkevents-win32.c: Use it. * gdk/win32/gdkwindow-win32.c (gdk_window_new_internal): Fix handling of children of foreign windows. They should be child windows from Windows's perspective, even if they are toplevel GDK windows.
* Implement better handling of Wintab tablet context overlap on Win32.Robert Ögren2005-02-251-0/+10
| | | | | | | | | | | | | | | 2005-02-24 Robert Ögren <gtk@roboros.com> Implement better handling of Wintab tablet context overlap on Win32. (#167298) * gdk/win32/gdkinput-win32.c (_gdk_input_set_tablet_active): New function that brings any tablet contexts to the top of the overlap order. * gdk/win32/gdkinput-win32.h: Declare _gdk_input_set_tablet_active () * gdk/win32/gdkevents-win32.c (gdk_event_translate): Call _gdk_input_set_tablet_active when a window is activated (on WM_ACTIVATE)
* New functions, code blocks refactored out of update_keymap(). NoTor Lillqvist2005-02-011-4/+4
| | | | | | | | | | | | | | | | | | | 2005-02-01 Tor Lillqvist <tml@novell.com> * gdk/win32/gdkkeys-win32.c (handle_special, set_shift_vks, reset_after_dead, handle_dead): New functions, code blocks refactored out of update_keymap(). No functionality change. (update_keymap): Use ToUnicodeEx() when available (on NT-based Windows) instead of ToAsciiEx(). Makes keyboard input work in Unicode-only input locales that don't have any ANSI codepage, for instance Hindi and Bengali. Use _gdk_input_codepage only on Win9x. (#165723) * gdk/win32/gdkevents-win32.c (gdk_event_translate): On WM_INPUTLANGCHANGE, use GetLocaleInfo() instead of TranslateCharsetInfo() to get the input locale's corresponding codepage, if any.
* Fix for #163702, from Ivan Wong:Tor Lillqvist2005-01-231-1/+13
| | | | | | | | | | | | | | | | | | | | 2005-01-23 Tor Lillqvist <tml@novell.com> Fix for #163702, from Ivan Wong: * gdk/win32/gdkprivate-win32.h * gdk/win32/gdkglobals-win32.c: New flag _ignore_destroy_clipboard. * gdk/win32/gdkevents-win32.c (gdk_event_translate): Handle WM_DESTROYCLIPBOARD. Unless _ignore_destroy_clipboard, generate a GDK_SELECTION_CLEAR event. * gdk/win32/gdkselection-win32.c (gdk_selection_owner_set_for_display): Set _ignore_destroy_clipboard when emptying the clipboard ourselves. (gdk_selection_send_notify_for_display): Remove the artifical GDK_SELECTION_CLEAR event generation.
* Fix a copy-and-paste error. (#158459)Matthias Clasen2004-11-161-1/+1
| | | | | | | 2004-11-16 Matthias Clasen <mclasen@redhat.com> * gdk/win32/gdkevents-win32.c (gdk_event_translate): Fix a copy-and-paste error. (#158459)
* Fix for #137551, by Robert Ögren:Tor Lillqvist2004-11-111-8/+74
| | | | | | | | | | | | | | 2004-11-11 Tor Lillqvist <tml@iki.fi> Fix for #137551, by Robert Ögren: * gdk/win32/gdkevents-win32.c (generate_focus_event): New function. (gdk_keyboard_grab, gdk_keyboard_ungrab): Generate focus change events. (gdk_event_translate): Check for keyboard grabs and not pointer grabs when handling WM_{SET,KILL}FOCUS. Use generate_focus_event().
* Event timestamps don't have to be unique. As long as they areTor Lillqvist2004-11-101-1/+1
| | | | | | | | | 2004-11-10 Tor Lillqvist <tml@iki.fi> * gdk/win32/gdkevents-win32.c (_gdk_win32_get_next_tick): Event timestamps don't have to be unique. As long as they are nondecreasing we should be fine. Solves problems with for instance long menus not staying up on first click. (#152035, Robert Ögren)
* gdk/win32/gdkprivate-win32.h gdk/win32/gdkglobals-win32.c RemoveTor Lillqvist2004-10-311-1/+1
| | | | | | | | | | | 2004-10-31 Tor Lillqvist <tml@iki.fi> * gdk/win32/gdkprivate-win32.h * gdk/win32/gdkglobals-win32.c * gdk/win32/gdkmain-win32.c: Remove _windows_version and the IS_WIN_NT() macro. * gdk/win32/*.c: Use G_WIN32_IS_NT_BASED() from GLib instead.
* List the three theme gtkrc files separately, zip doesn't do anything ifTor Lillqvist2004-09-031-0/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | 2004-09-03 Tor Lillqvist <tml@iki.fi> * gtk-zip.sh.in: List the three theme gtkrc files separately, zip doesn't do anything if one of the files on its command line doesn't exist. Handle changes of screen resolution on Win32. (#151581, reported by Arjohn Kampman) * gdk/win32/gdkwindow-win32.c (_gdk_windowing_window_init, _gdk_root_window_size_init): Factor out setting the root window's size (as the size of the union of all monitors) to a new function. * gdk/win32/gdkdisplay-win32.c (gdk_display_open, _gdk_monitor_init): Factor out the monitor query to a new function. * gdk/win32/gdkprivate-win32.h: Declare above new functions. * gdk/win32/gdkevents-win32.c (gdk_event_translate, handle_display_change): Handle WM_DISPLAYCHANGE by calling the above two functions, and emitting the "size_changed" signal on our (only) GdkScreen.
* On Win32, do not produce tablet motion or button events while a window isRobert Ögren2004-08-311-5/+4
| | | | | | | | | | | | | | | 2004-08-28 Robert Ögren <gtk@roboros.com> On Win32, do not produce tablet motion or button events while a window is being moved or resized. (#151090, reported by Shaneyfelt) * gdk/win32/gdkprivate-win32.h * gdk/win32/gdkglobals-win32.c * gdk/win32/gdkevents-win32.c: Rename the variable resizing to _sizemove_in_progress and make it extern. * gdk/win32/gdkinput-win32.c (_gdk_input_other_event): Ignore motion and button events if _sizemove_in_progress is true.
* autogenerate gtk.def, cleanupHans Breuer2004-08-091-2/+0
| | | | | | | | | | 2004-08-09 Hans Breuer <hans@breuer.org> * gtk/makefile.msc.in : autogenerate gtk.def, cleanup * gdk/win32/gdkwindow-win32.c gdk/win32/gdkevents-win32.c : removed long time unused ifdef/ed code (WITHOUT_WM_CREATE), removed duplicated call to gdk_window_set_cursor()
* WM_WINDOWPOSCHANGED): Add _gdk_offset_{x,y} to top-level windowTor Lillqvist2004-08-071-17/+13
| | | | | | | | | 2004-08-07 Tor Lillqvist <tml@iki.fi> * gdk/win32/gdkevents-win32.c (handle_configure_event, gdk_event_translate:WM_WINDOWPOSCHANGED): Add _gdk_offset_{x,y} to top-level window coordinates, not just in generated events. (#148526, Robert Ögren)
* Don't propagate mouse events to windows that want extended input events.Robert Ögren2004-05-241-41/+47
| | | | | | | | | | | | | | | | | | | 2004-05-11 Robert Ögren <gtk@roboros.com> * gdk/win32/gdkevents-win32.c (propagate): Don't propagate mouse events to windows that want extended input events. (#142943) (gdk_event_translate): Move check for extended input devices to propagate, new parameter to propagate. (gdk_pointer_grab, gdk_display_pointer_ungrab): Enable calls to _gdk_input_(un)grab_pointer. (#142943) * gdk/win32/gdkinput-win32.c (_gdk_input_other_event): Check for input grab. [Fix missing update of impl in "dijkstra" event propagation loop] Drop the parallel "impl" pointer, just use a cast. Don't propagate beyond windows that want normal input events. (#142943) (gdk_input_grab_pointer, gdk_input_ungrab_pointer): Limited implementation of input grab. (#142943)
* Add missing call to g_object_ref in Wintab code. (#138341)Robert Ögren2004-05-121-0/+1
| | | | | | | | | | | | | 2004-05-11 Robert Ögren <gtk@roboros.com> * gdk/win32/gdkevents-win32.c (gdk_event_translate): Add missing call to g_object_ref in Wintab code. (#138341) * gdk/win32/gdkinput-win32.c: Fix numerous Wintab problems including unallocated buffers for event->motion.axes and event->button.axes, unsigned wraparound problem in the code for detecting missing press/release events and assigning min instead of max when setting up axes.
* applied the undisputable and required [due to recent gtkfilesystemHans Breuer2004-03-201-13/+17
| | | | | | | | | | | | | | | 2004-03-20 Hans Breuer <hans@breuer.org> * gtk/gtkfilesystemwin32.c : applied the undisputable and required [due to recent gtkfilesystem internal api semantic changes] part of patches to fix bug #137543 (Tor Lillqvist, J. Ali Harlow) * gdk/gdkevents-win32.c (handle_configure_event) : (gdk_event_translate), WM_WINDOWPOSCHANGED : initialize GdkWindowObject::x, y with screen coords to make gdk_window_get_position () return the right thing and thus fix drag and drop positioning (e.g. Gimp tabs, fixes bug #137192)
* Set also the pointer button bits. (#136636, Dave Neary)Tor Lillqvist2004-03-101-0/+16
| | | | | | | | | | | | | | 2004-03-10 Tor Lillqvist <tml@iki.fi> * gdk/win32/gdkevents-win32.c (build_key_event_state): Set also the pointer button bits. (#136636, Dave Neary) * gdk/win32/gdkwindow-win32.c (show_window_internal): Show transparent (input only) windows using SetWindowPos(). (#132331, John Ehresman) (gdk_window_set_type_hint): For splash screens, remove the resize handles, menu, and minimize/maximize/close buttons. (#132896)
* Fixes #136082 and #135265, patch by Morten Welinder.Federico Mena Quintero2004-03-061-1/+1
| | | | | | | | | | 2004-03-05 Federico Mena Quintero <federico@ximian.com> Fixes #136082 and #135265, patch by Morten Welinder. * configure.in: Use AC_SYS_LARGEFILE. * */*.c: #include <config.h>
* Add missing entries, thanks to J. Ali Harlow.Tor Lillqvist2004-03-051-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 2004-03-05 Tor Lillqvist <tml@iki.fi> * gdk/gdk.def: Add missing entries, thanks to J. Ali Harlow. * gdk/win32/gdkcursor-win32.c (color_is_white): const-correctness. (gdk_cursor_new_from_pixbuf): Copy of the non-Xcursor X11 implementation. (gdk_display_supports_cursor_alpha, gdk_display_supports_cursor_color): Dummy implementations. (gdk_display_get_default_cursor_size, gdk_display_get_maximal_cursor_size): Implement. * gdk/win32/gdkdisplay-win32.c (gdk_display_get_default_group): Dummy implementation. * gdk/win32/gdkevents-win32.c (gdk_net_wm_supports): Dummy implementation. * gdk/win32/gdkfont-win32.c (gdk_font_get_display): Implement. * gdk/win32/gdkinput-win32.c (gdk_input_motion_events): Remove, not in API. * gdk/win32/gdkwindow-win32.c (gdk_window_get_group): Dummy implementation.
* set current_dest_drag to NULL when destroying, fixes bug #120007. AlsoHans Breuer2004-02-281-2/+7
| | | | | | | | | | | | | | | | 2004-02-28 Hans Breuer <hans@breuer.org> * gdk/win32/gdkdnd-win32.c : set current_dest_drag to NULL when destroying, fixes bug #120007. Also removed the mirrored ref counting for deprecated gdk_drag_context_<ref|unref>() cause it wasn't reliable anymore anyway. * gdk/win32/gdkdisplay-win32.c : fix typo, which should have broken the win32 build for everyone not using msvc * gdk/win32/gdkevents-win32.c : WM_GETMINAMXINFO ensure not to return negative values for ptMaxTrackSize, it caused snapping windows to their minimum size
* Return GDK_FILTER_CONTINUE for unhandled message types.Owen Taylor2004-02-261-1/+1
| | | | | | | | | | | | | | | | | Thu Feb 26 17:29:04 2004 Owen Taylor <otaylor@redhat.com> * gdk/x11/gdkevents-x11.c (gdk_wm_protocols_filter): Return GDK_FILTER_CONTINUE for unhandled message types. * gdk/x11/gdkevents-x11.c (gdk_event_translate): Allow multiple filters for the same event type with the standard "GDK_FILTER_CONTINUE == pretend I wasn't here" semantics. * gdk/x11/gdkevents-x11.c (gdk_display_add_client_message_filter): Append to the filter list not prepend, since order now matters. * gdk/win32/gdkevents-win32.c (gdk_add_client_message_filter): Append to the filter list not prepend, since order now matters.
* Set the cursor in all cases. If no grab cursor specified, use the grabbingTor Lillqvist2004-02-021-0/+5
| | | | | | | | | 2004-02-02 Tor Lillqvist <tml@iki.fi> * gdk/win32/gdkevents-win32.c (gdk_pointer_grab): Set the cursor in all cases. If no grab cursor specified, use the grabbing window's cursor. If the grabbing window has no cursor, use the default arrow cursor. (#118025)
* Don' generate enter or leave events if the pointer is grabbed withTor Lillqvist2004-01-281-0/+9
| | | | | | | | | | | 2004-01-28 Tor Lillqvist <tml@iki.fi> * gdk/win32/gdkevents-win32.c (synthesize_leave_event, synthesize_enter_event): Don' generate enter or leave events if the pointer is grabbed with owner_events off, and the grab event mask doesn't ask for them. (#129242) (gdk_event_translate): Ditto for focus change events.
* handle GTK_DATADIR similar as the other filesystem placement 'constants'Hans Breuer2003-12-141-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | 2003-12-14 Hans Breuer <hans@breuer.org> * gtk/gtkprivate.h gtk/gtkmain.c : handle GTK_DATADIR similar as the other filesystem placement 'constants' (dynamic resolving on win32) * gtk/gtkfilechooserwidget.c : handle file system to win32 renaming here as will * gtk/gtkfilesystemwin32.c : implement render_icon * gtk/gtk.def gdk/gdk.def : updated externals * gdk/win32/gdkdisplay-win32.c : make it compile without <multimon.h> - i.e. even older sdk * gdk/win32/gdkevents-win32.c : match resize_timer_proc with TIMERPROC prototype * gdk/win32/gdkwindow-win32.c : older msvc does not know BITMAPV5HEADER (from win xp) either * gtk/gtkimmodule.c : make it compile even if GTK_LOCALEDIR is not defined * tests/testfilechooser.c : recent GLib crashes on g_print ("%s", NULL) so avoid this
* Merge from stable:Tor Lillqvist2003-12-141-223/+275
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 2003-12-14 Tor Lillqvist <tml@iki.fi> Merge from stable: * gdk/gdkdisplaymanager.c: Mark default_display static. * gdk/win32/gdkdnd-win32.c: Mark current_dest_drag static. * gdk/win32/gdkkeys-win32.c: Disable some overly verbose debugging output. * gdk/win32/gdkevents-win32.c: Clean up the debugging output from --gdk-debug=events. In general, output just one line of debugging output for each Windows message, plus one line for each GDK event generated. Indent all lines according to window procedure nesting level. (inner_window_procedure): Rename from real_window_procedure. (find_real_window_for_grabbed_mouse_event): Don't get misled when the point is in the non-client (decoration) area of the window returned by WindowFromPoint(). Return the root window in that case. (build_pointer_event_state): Test also MK_XBUTTON1 and MK_XBUTTON2 (buttons 4 and 5). (synthesize_enter_event): Track the mouse leaving the window in the event being generated, not the one mentioned in the Windows message. (propagate): Test for NULL parent earlier. Improves event generation from a grabbed pointer. Part of fix for #107320. (handle_stuff_while_moving_or_resizing): New function, to dispatch the main loop (once). (resize_timer_proc): New function, set to be called by an inerval timer during resizes/moves. Calls handle_stuff_while_moving_or_resizing(). (gdk_event_translate): Drop unused return_exposes parameter. Handle WM_XBUTTONDOWN and UP messages (buttons 4 and 5). On WM_SYSKEYUP, generate a key release event also for just the Alt key. On WM_MOUSELEAVE, generate a leave event of type GDK_NOTIFY_ANCESTOR (and not UNKNOWN) if the mouse left a top-level window, and left the app completely. On WM_ENTERSIZEMOVE, set a flag, and start an interval timer that calls resize_timer_proc() at regular intervals. On WM_EXITSIZEMOVE, kill the timer. On WM_WINDOWPOSCHANGED, generate a configure event if necessary, and dispatch the main loop (by calling handle_stuff_while_moving_or_resizing()). Fixes #99540, idea by Herman Bloggs. * gdk/win32/gdkmain-win32.c (_gdk_win32_message_to_string): Handle also wintab messages. * gdk/win32/gdkwindow-win32.c (gdk_window_set_skip_taskbar_hint): Instead of using WS_EX_TOOLWINDOW, implement by setting/unsetting the window's owner. Fixes #118093, reported by Maxime Romano.
* If we already have a pointer grab active with a grab cursor set, destroyTor Lillqvist2003-12-071-0/+8
| | | | | | | | 2003-12-07 Tor Lillqvist <tml@iki.fi> * gdk/win32/gdkevents-win32.c (gdk_pointer_grab): If we already have a pointer grab active with a grab cursor set, destroy that cursor to avoid a GDI resource leak. (#128410, Tim Evans)
* Don't use hardcoded DEMOCODEDIR on Windows.Tor Lillqvist2003-09-251-106/+120
| | | | | | | | | | | | | | | | | | | | | 2003-09-25 Tor Lillqvist <tml@iki.fi> * demos/gtk-demo/main.c: Don't use hardcoded DEMOCODEDIR on Windows. 2003-09-21 Tor Lillqvist <tml@iki.fi> * gdk/win32/gdkevents-win32.c (handle_wm_paint): New function. Code split out from gdk_event_translate(). Needed because gdk_event_get_graphics_expose() couldn't do anything sensible otherwise. (Not that I think graphics exposes work anyway in gdk/win32, but at least now the code could work.) (gdk_event_get_graphics_expose): Call handle_wm_paint() instead of gdk_event_translate(), which couldn't have worked as it doesn't take any pre-allocated GdkEvent parameter any longer. (gdk_event_translate): Handle WM_MOUSEACTIVATE: Don't let GDK_WINDOW_TEMP windows be activated. (#122578, John Ehresman)
* Print also the root coordinates for events that have such. PrintTor Lillqvist2003-08-081-12/+19
| | | | | | | | | | | | | | | 2003-08-08 Tor Lillqvist <tml@iki.fi> * gdk/win32/gdkevents-win32.c (print_event): Print also the root coordinates for events that have such. Print coordinates for enter and leave events. (gdk_event_translate): Don't use event uninitialixed in the return_exposes branch of the WM_PAINT handler. * gdk/win32/gdkwindow-win32.c (gdk_window_new, _gdk_windowing_window_get_pointer, _gdk_windowing_window_at_pointer): Must offset top-level window coordinates here, too.
* gdk/win32/gdkinput-win32.h Drop the GdkEvent* parameter, it wasn't used.Tor Lillqvist2003-08-071-46/+210
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 2003-08-07 Tor Lillqvist <tml@iki.fi> * gdk/win32/gdkinput-win32.h * gdk/win32/gdkinput-win32.c (_gdk_input_configure_event, _gdk_input_enter_event): Drop the GdkEvent* parameter, it wasn't used. * gdk/win32/gdkevents-win32.c (gdk_event_translate): Adapt caller accordingly, in fact an uninitialised variable was dereferenced. [Win32] Add support for multiple monitors. * gdk/win32/gdkprivate-win32.h * gdk/win32/gdkglobals-win32.c: New global variables for multiple-monitor info: _gdk_num_monitors, _gdk_monitors, and _gdk_offset_x and _gdk_offset_y. * gdk/win32/gdkdisplay-win32.c (count_monitor, enum_monitor): New functions, enumeration functions passed to EnumDisplayMonitors(). (gdk_display_open): If the EnumDisplayMonitors() and GetMonitorInfo() API is present (on Win98, Win2000 and newer), use if to find out monitor info. Calculate the offset between Win32 coordinates (relative to the primary monitor's origin (and thus negative on monitors to the left of or above it), and GDK's (visible coordinates should be non-negative). * gdk/win32/gdkscreen-win32 (gdk_screen_get_n_monitors, gdk_screen_get_monitor_geometry): Use information collected above. (gdk_window_move, gdk_window_move_resize_window_get_geometry): Subtract _gdk_offset_{x,y} from GDK root window coordinates. (gdk_window_get_geometry, gdk_window_get_origin, gdk_window_get_frame_extents): For top-level windows, add _gdk_offset_{x,y} to GDK root window coordinates Still need to handle multiple monitors in gdk_window_fullscreen(). Probably should make the window fullscreen on the monitor where the cursor is? * gdk/win32/gdkevents-win32.c: Add _gdk_offset_{x,y} to all GDK root window coordinates in GdkEvents. [Win32] Fix geometry hint handling. Add support for resize increment and base size, and aspect ratio geometry hints. The "gridded geometry" test in testgtk now works beautifully. * gdk/win32/gdkwindow-win32.c (gdk_window_set_geometry_hints): Turns out this function shouldn't actually ever modify the window's size, just store the hints. (Old code kept for a while inside #if 0.) (gdk_window_set_hints): Remove presumably broken code that handles the position hints, this function is obsolete anyway. * gdk/win32/gdkevents-win32.c: Drop the current_{x,y}_root variables, not used. (adjust_drag): New function, used to implement resize increment hints. (gdk_event_translate): Handle WM_SIZING, implement resize increment and base size, and aspect ratio geometry hints here. The WM_GETMINMAXINFO handler takes care of the minimum and maximum size hints as before. Fix the WM_GETMINMAXINFO handler to take into account window decorations. No need to modify the ptMaxPosition and ptMaxSize fields in the MINMAXINFO struct, the defaults are fine. * gdk/win32/gdkprivate-win32.h * gdk/win32/gdkwindow-win32.c (_gdk_win32_adjust_client_rect, _gdk_win32_get_adjusted_client_rect): New helper functions.
* finally use TrackMouseEvent (only if the new window not known to Gdk) toHans Breuer2003-08-071-6/+85
| | | | | | | | | | | | | 2003-08-07 Hans Breuer <hans@breuer.org> * gdk/win32/gdkevents-win32.c : finally use TrackMouseEvent (only if the new window not known to Gdk) to get proper leave notification, and get rid of the wrong placed tooltips, bug #102283 (gdk_event_translate) : small code reordering to not get GDK_MOTION_NOTIFY for still mouse and get back tooltips on menus, bug #117367
* 2003-08-04 Tor Lillqvist <tml@iki.fiTor Lillqvist2003-08-041-4/+10
| | | | | | | * gdk/win32/gdkevents-win32.c (apply_filters): Fix braino: actually use the passed-in filter list. The function also needs a GdkWindow parameter, as filter functions expect GdkEvent::any.window to be valid. (#119034, Hans Breuer)
* Fix gdk/win32 window geometry handling again. The window position in aTor Lillqvist2003-08-021-31/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | 2003-08-02 Tor Lillqvist <tml@iki.fi> Fix gdk/win32 window geometry handling again. The window position in a GDK_CONFIGURE event should be that of the client area, not of the window decorations. (I was confused by the term "window border" in X11. It does *not* mean the window manager decorations. There are no X11-style window borders in Win32.) Also, this time do take the geometry hints into account appropriately when moving windows. Now testgtk's gravity test's move buttons work OK. There are stil problems with taking gravity into account when showing a hidden window. * gdk/win32/gdkwindow-win32.h: Keep a whole GdkGeometry as hints instead of separate fields. * gdk/win32/gdkevents-win32.c (handle_configure_event): Don't adjust for decorations. * gdk/win32/gdkwindow-win32.c (get_outer_rect, adjust_for_gravity_hints): New functions. (gdk_window_move, gdk_window_resize, gdk_window_move_resize): Use above functions, take geometry hints into account. (gdk_window_set_geometry_hints): Size hints specicy client area, not including decorations.
* Fix for #108007, #112402, #117042: There was confusion in gdk/win32 atTor Lillqvist2003-07-291-52/+67
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* On Win9x, the keyboard state returned by GetKeyboardState() doesn'tTor Lillqvist2003-07-271-1/+16
| | | | | | | | | | | 2003-07-27 Tor Lillqvist <tml@iki.fi> * gdk/win32/gdkevents-win32.c (build_key_event_state): On Win9x, the keyboard state returned by GetKeyboardState() doesn't distinguish between the left and right Control and Alt keys. Thus we cannot detect AltGr (which is supposed to be left Control + right Alt) the same way as on NT-based systems, but have to accept either Control + either Alt as AltGr.
* gdk/win32/gdkprivate-win32.h New flags _gdk_input_locale_is_ime andTor Lillqvist2003-07-261-1283/+839
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 2003-07-25 Tor Lillqvist <tml@iki.fi> * gdk/win32/gdkprivate-win32.h * gdk/win32/gdkglobals-win32.c: New flags _gdk_input_locale_is_ime and _gdk_keyboard_has_altgr. * gdk/win32/gdkevents-win32.c: Lots of changes. Most important ones detailled here. Code that has been ifdeffed out for a long time removed. Remove some really old doc comments that were left behind for some public functions, the official ones are in the X11 backend anyway. Change GDK_WINDOW_OBJECT() calls to GdkWindowObject casts. Reformat multi-line boolean expressions to have the operators at ends of lines. As mouse capture with SetCapture() indeed seems to work OK, no need to have the correspoinding macro USE_SETCAPTURE and ifdefs. Ifdef out the gdk-ping-msg stuff. I don't remember why it was needed at some time, and things seem to work fine now without (knock on wood). Ifdef out the search for some Latin locale keyboard layout being loaded. Not used currently, but might be needed after all, if we decide that we want to be able to generate ASCII control character events with a non-Latin keyboard. (assign_object): New helper function, handles the g_object_ref() and unref() calls when assigning GObject pointers. (generate_crossing_events): Also generate the GDK_NOTIFY_INTERIOR enter event when the pointer has moved to an ancestor window. Was left out by mistake. (gdk_window_is_ancestor): Renamed from gdk_window_is_child(). (gdk_pointer_grab, gdk_pointer_ungrab): Implement the confine_to functionality, using ClipCursor(). (find_window_for_mouse_event): Splice part of code into new function find_real_window_for_grabbed_mouse_event(). (fixup_event, append_event, apply_filters): New functions, code refactored out from elsewhere. (synthesize_enter_or_leave_event, synthesize_leave_event, synthesize_enter_event, synthesize_leave_events,synthesize_enter_events): Also take a GdkCrossingMode parameter, in preparation to generating GDK_CROSSING_GRAB and GDK_CROSSING_UNGRAB events. (fixup_event, append_event, fill_key_event_string): New functions, code refactoring. (vk_from_char, build_keypress_event, build_keyrelease_event): Removed as part of dropping WM_CHAR handling. (build_key_event_state,gdk_event_translate): Call GetKeyboardState(), once, for each keyboard message, instead of several calls to GetKeyState() here and there. (gdk_event_translate): Fix bugs #104516, #104662, #115902. While at it, do some major refactoring, and some fixes for potential problems noticed while going through the code. Don't handle WM_CHAR at all. Only handle WM_KEYDOWN and WM_KEYUP. Don't need the state variables related to whether to wait for WM_CHAR or not, and whether the current key is AltGr. Remove lots of complexity. Thus don't need the use_ime_composition flag. Not handling WM_CHAR means dead key handling will have to be taken care of by GTK, but that seems to work fine, so no worry. Another side-effect is that Alt+keypad digits don't work any longer, but it's better to learn to use GTK's ISO14755 support is anyway. Be more careful in checking whether AltGr is involved. Only attempt to handle it if the keyboard actually has it. And explicitly check for *left* Control plus *right* Alt being pressed. Still, allow (left) Alt and/or (right) Control with AltGr chars. Handle keys using similar code as in the X11 backend. As we have built a keymap in gdkkeys-win32.c anyway, use it by calling gdk_keymap_translate_keyboard_state() to look up the keysym from the virtual key code and keyboard state. Build the key event string in exactly the same way as the X11 backend. If an IME is being used, don't generate GDK events for keys between receiving WM_IME_STARTCOMPOSITION and WM_IME_ENDCOMPOSITION, as those keys are for the IME. For WM_IME_COMPOSITION, handle all the Unicode chars returned from the IME, not just the first one. gdk_event_translate() is still quite complex, could split the message handler cases out into separate functions. On mouse events, when the mouse is grabbed, use find_real_window_for_grabbed_mouse_event() in order to be able to generate correct crossing events. No longer take a pre-allocated GdkEvent as parameter. Instead, allocate events as needed and append them to the queue. (This is different from how gdk_event_translate() in the X11 backend works.) This change made the code much clearer, especially in the cases where we have to generate several GDK events for one Windows message. Return FALSE if DefWindowProc() should be called, TRUE if not. If DefWindowProc() should not be called, also return the value to be returned from the window procedure. (Previously, the interaction with gdk_event_translate()'s caller was much more complex, when we had to indicate whether the already-queued event should be left in the queue or removed, and in addition also had to indicate whether to call DefWindowProc() or not, and what value to return from the window procedure if not.) Don't use a separate "private" variable required to be pointing to the GdkWindowObject of the "window" variable at all times. Just use casts, even if looks a bit uglier. Notice destroyed windows as early as possible, and break out of the messsage switch. Use _gdk_pointer_root as current_window when the pointer is outside GDK's top-level windows. On WM_INPUTLANGCHANGE, set _gdk_input_locale_is_ime as appropriate, based on ImmIsIME(). (gdk_event_translate, gdk_event_send_client_message_for_display, gdk_screen_broadcast_client_message): Implement client messages. Use a registered Windows message to pass GDK client messages. Note that the amount of user data is restricted to four bytes, as it is carried in the LPARAM. (The WPARAM is used for the message type "atom".) (real_window_procedure): Adapt for new gdk_event_translate() interface. * gdk/win32/gdkmain-win32.c (_gdk_windowing_init): Set _gdk_input_locale_is_ime initially. * gdk/win32/gdkwindow-win32.c: Use g_object_ref()/unref() instead of g_colormap_ref()/unref(). (gdk_window_new): Made code a bit more like the X11 one, pretend to handle screens (although we just have one for now). * gdk/x11/gdkevents-x11.c (gdk_event_send_client_message_for_display, gdk_screen_broadcast_client_message): Document the user data limitation on Win32. * gdk/win32/gdkevents-win32.c (print_event): More complete enter and leave notify detail output. * gdk/win32/gdkkeys-win32.c (update_keymap): Make dead keys visible to GDK and GTK. Store the corresponding GDK_dead_* keysym for those, so that the GtkIMContextCimple compose tables will work. Deduce if the keyboard layout has the AltGr key, and set the above flag accordingly.
* new file to build it all ... added to EXTRA_DISTHans Breuer2003-07-201-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 2003-07-20 Hans Breuer <hans@breuer.org> * makefile.msc : new file to build it all * Makefile.am : ... added to EXTRA_DIST * gdk/makefile.msc gtk/stock-icons/makefile.msc gtk/makefile.msc.in tests/makefile.msc : updated * gdk/gdk.def gtk/gtk.def : export a bunch of new functions * gtk/gtkbbox.c : use g_return_val_if_fail() if there is a value to return * gtk/gtkfontsel.c gtk/gtkiconfactory.c : static correctness * gtk/gtkicontheme.c : ported to use GTimeVal instead of struct timeval and GTK_DATA_PREFIX instead of GTK_DATADIR * gtk/gtkicontheme.c : use HAVE_LC_MESSAGES * gtk/gtkimmulticontext.c : use gtkprivate.h * gtk/stock-icons/stock_color_picker_25.png gtk/stock-icons/stock_jump_to_rtl_16.png gtk/stock-icons/stock_jump_to_rtl_24.png gtk/stock-icons/stock_redo_rtl_16.png gtk/stock-icons/stock_redo_rtl_24.png gtk/stock-icons/stock_undelete_rtl_16.png gtk/stock-icons/stock_undelete_rtl_24.png gtk/stock-icons/stock_undo_rtl_16.png : gtk/stock-icons/stock_undo_rtl_24.png : readded as binary