mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-09-20 05:50:11 +00:00
Doh! Mixed up x and y.
2001-01-17 <alexl@redhat.com> * gdk/linux-fb/gdkdrawable-fb2.c (gdk_shadow_fb_draw_arc): Doh! Mixed up x and y. * gdk/linux-fb/gdkglobals-fb.c: Removed gdk_fb_pointer_grab_window_events, added _gdk_fb_pointer_grab_owner_events and _gdk_fb_keyboard_grab_owner_events. * gdk/linux-fb/gdkmain-fb.c (gdk_fb_pointer_grab): Set all button mask if GDK_BUTTON_MOTION_MASK set. Send crossing events before grabbing. Set _gdk_fb_pointer_grab_owner_events. (gdk_fb_pointer_ungrab): Unset _gdk_fb_pointer_grab_owner_events Send crossing events after ungrab finished. (gdk_keyboard_grab): Set ..._owner_events (type_masks): Move out of function. (gdk_fb_other_event_window, gdk_fb_pointer_event_window, gdk_fb_keyboard_event_window): New functions, return the window an event should be targeted at. Handles grabs and event propagation. Can return NULL. (gdk_event_make): Remove event_mask checking. Now always returns an event. * gdk/linux-fb/gdkkeyboard-fb.c: * gdk/linux-fb/gdkproperty-fb.c: * gdk/linux-fb/gdkselection-fb.c: Use new event_window/gdk_event_make() behaviour. * gdk/linux-fb/gdkmouse-fb.c: Use new event_window/gdk_event_make() behaviour. Only send motion events if in the same window. If grabbed, use cursor from window if sibling of grabbed window, and cursor from grabbed window otherwise. * gdk/linux-fb/gdkprivate-fb.h: Update gdk_fb_window_send_crossing_events, gdk_event_make and grab varaible declarations. Add gdk_fb_*_event_window(). * gdk/linux-fb/gdkwindow-fb.c: Use new event_window/gdk_event_make() behaviour. Keep correct track of focus window. (gdk_window_set_events): Set all specific button motion masks if GDK_BUTTON_MOTION_MASK set. * gtk/gtkdnd.c (gtk_drag_update): Free info->last_event if gdk_drag_motion returned FALSE.
This commit is contained in:
parent
2d28a30379
commit
9012254c1e
48
ChangeLog
48
ChangeLog
@ -1,3 +1,51 @@
|
||||
2001-01-17 <alexl@redhat.com>
|
||||
|
||||
* gdk/linux-fb/gdkdrawable-fb2.c (gdk_shadow_fb_draw_arc):
|
||||
Doh! Mixed up x and y.
|
||||
|
||||
* gdk/linux-fb/gdkglobals-fb.c:
|
||||
Removed gdk_fb_pointer_grab_window_events,
|
||||
added _gdk_fb_pointer_grab_owner_events and
|
||||
_gdk_fb_keyboard_grab_owner_events.
|
||||
|
||||
* gdk/linux-fb/gdkmain-fb.c (gdk_fb_pointer_grab):
|
||||
Set all button mask if GDK_BUTTON_MOTION_MASK set. Send
|
||||
crossing events before grabbing. Set _gdk_fb_pointer_grab_owner_events.
|
||||
(gdk_fb_pointer_ungrab): Unset _gdk_fb_pointer_grab_owner_events
|
||||
Send crossing events after ungrab finished.
|
||||
(gdk_keyboard_grab): Set ..._owner_events
|
||||
(type_masks): Move out of function.
|
||||
(gdk_fb_other_event_window, gdk_fb_pointer_event_window,
|
||||
gdk_fb_keyboard_event_window): New functions, return the
|
||||
window an event should be targeted at. Handles grabs and
|
||||
event propagation. Can return NULL.
|
||||
(gdk_event_make): Remove event_mask checking. Now always
|
||||
returns an event.
|
||||
|
||||
* gdk/linux-fb/gdkkeyboard-fb.c:
|
||||
* gdk/linux-fb/gdkproperty-fb.c:
|
||||
* gdk/linux-fb/gdkselection-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
|
||||
* gdk/linux-fb/gdkmouse-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
Only send motion events if in the same window.
|
||||
If grabbed, use cursor from window if sibling of grabbed
|
||||
window, and cursor from grabbed window otherwise.
|
||||
|
||||
* gdk/linux-fb/gdkprivate-fb.h:
|
||||
Update gdk_fb_window_send_crossing_events, gdk_event_make
|
||||
and grab varaible declarations. Add gdk_fb_*_event_window().
|
||||
|
||||
* gdk/linux-fb/gdkwindow-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
Keep correct track of focus window.
|
||||
(gdk_window_set_events): Set all specific button motion masks
|
||||
if GDK_BUTTON_MOTION_MASK set.
|
||||
|
||||
* gtk/gtkdnd.c (gtk_drag_update):
|
||||
Free info->last_event if gdk_drag_motion returned FALSE.
|
||||
|
||||
Tue Jan 16 13:13:13 GMT 2001 Tony Gale <gale@gtk.org>
|
||||
|
||||
* docs/faq/gtk-faq.sgml: FAQ update:
|
||||
|
@ -1,3 +1,51 @@
|
||||
2001-01-17 <alexl@redhat.com>
|
||||
|
||||
* gdk/linux-fb/gdkdrawable-fb2.c (gdk_shadow_fb_draw_arc):
|
||||
Doh! Mixed up x and y.
|
||||
|
||||
* gdk/linux-fb/gdkglobals-fb.c:
|
||||
Removed gdk_fb_pointer_grab_window_events,
|
||||
added _gdk_fb_pointer_grab_owner_events and
|
||||
_gdk_fb_keyboard_grab_owner_events.
|
||||
|
||||
* gdk/linux-fb/gdkmain-fb.c (gdk_fb_pointer_grab):
|
||||
Set all button mask if GDK_BUTTON_MOTION_MASK set. Send
|
||||
crossing events before grabbing. Set _gdk_fb_pointer_grab_owner_events.
|
||||
(gdk_fb_pointer_ungrab): Unset _gdk_fb_pointer_grab_owner_events
|
||||
Send crossing events after ungrab finished.
|
||||
(gdk_keyboard_grab): Set ..._owner_events
|
||||
(type_masks): Move out of function.
|
||||
(gdk_fb_other_event_window, gdk_fb_pointer_event_window,
|
||||
gdk_fb_keyboard_event_window): New functions, return the
|
||||
window an event should be targeted at. Handles grabs and
|
||||
event propagation. Can return NULL.
|
||||
(gdk_event_make): Remove event_mask checking. Now always
|
||||
returns an event.
|
||||
|
||||
* gdk/linux-fb/gdkkeyboard-fb.c:
|
||||
* gdk/linux-fb/gdkproperty-fb.c:
|
||||
* gdk/linux-fb/gdkselection-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
|
||||
* gdk/linux-fb/gdkmouse-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
Only send motion events if in the same window.
|
||||
If grabbed, use cursor from window if sibling of grabbed
|
||||
window, and cursor from grabbed window otherwise.
|
||||
|
||||
* gdk/linux-fb/gdkprivate-fb.h:
|
||||
Update gdk_fb_window_send_crossing_events, gdk_event_make
|
||||
and grab varaible declarations. Add gdk_fb_*_event_window().
|
||||
|
||||
* gdk/linux-fb/gdkwindow-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
Keep correct track of focus window.
|
||||
(gdk_window_set_events): Set all specific button motion masks
|
||||
if GDK_BUTTON_MOTION_MASK set.
|
||||
|
||||
* gtk/gtkdnd.c (gtk_drag_update):
|
||||
Free info->last_event if gdk_drag_motion returned FALSE.
|
||||
|
||||
Tue Jan 16 13:13:13 GMT 2001 Tony Gale <gale@gtk.org>
|
||||
|
||||
* docs/faq/gtk-faq.sgml: FAQ update:
|
||||
|
@ -1,3 +1,51 @@
|
||||
2001-01-17 <alexl@redhat.com>
|
||||
|
||||
* gdk/linux-fb/gdkdrawable-fb2.c (gdk_shadow_fb_draw_arc):
|
||||
Doh! Mixed up x and y.
|
||||
|
||||
* gdk/linux-fb/gdkglobals-fb.c:
|
||||
Removed gdk_fb_pointer_grab_window_events,
|
||||
added _gdk_fb_pointer_grab_owner_events and
|
||||
_gdk_fb_keyboard_grab_owner_events.
|
||||
|
||||
* gdk/linux-fb/gdkmain-fb.c (gdk_fb_pointer_grab):
|
||||
Set all button mask if GDK_BUTTON_MOTION_MASK set. Send
|
||||
crossing events before grabbing. Set _gdk_fb_pointer_grab_owner_events.
|
||||
(gdk_fb_pointer_ungrab): Unset _gdk_fb_pointer_grab_owner_events
|
||||
Send crossing events after ungrab finished.
|
||||
(gdk_keyboard_grab): Set ..._owner_events
|
||||
(type_masks): Move out of function.
|
||||
(gdk_fb_other_event_window, gdk_fb_pointer_event_window,
|
||||
gdk_fb_keyboard_event_window): New functions, return the
|
||||
window an event should be targeted at. Handles grabs and
|
||||
event propagation. Can return NULL.
|
||||
(gdk_event_make): Remove event_mask checking. Now always
|
||||
returns an event.
|
||||
|
||||
* gdk/linux-fb/gdkkeyboard-fb.c:
|
||||
* gdk/linux-fb/gdkproperty-fb.c:
|
||||
* gdk/linux-fb/gdkselection-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
|
||||
* gdk/linux-fb/gdkmouse-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
Only send motion events if in the same window.
|
||||
If grabbed, use cursor from window if sibling of grabbed
|
||||
window, and cursor from grabbed window otherwise.
|
||||
|
||||
* gdk/linux-fb/gdkprivate-fb.h:
|
||||
Update gdk_fb_window_send_crossing_events, gdk_event_make
|
||||
and grab varaible declarations. Add gdk_fb_*_event_window().
|
||||
|
||||
* gdk/linux-fb/gdkwindow-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
Keep correct track of focus window.
|
||||
(gdk_window_set_events): Set all specific button motion masks
|
||||
if GDK_BUTTON_MOTION_MASK set.
|
||||
|
||||
* gtk/gtkdnd.c (gtk_drag_update):
|
||||
Free info->last_event if gdk_drag_motion returned FALSE.
|
||||
|
||||
Tue Jan 16 13:13:13 GMT 2001 Tony Gale <gale@gtk.org>
|
||||
|
||||
* docs/faq/gtk-faq.sgml: FAQ update:
|
||||
|
@ -1,3 +1,51 @@
|
||||
2001-01-17 <alexl@redhat.com>
|
||||
|
||||
* gdk/linux-fb/gdkdrawable-fb2.c (gdk_shadow_fb_draw_arc):
|
||||
Doh! Mixed up x and y.
|
||||
|
||||
* gdk/linux-fb/gdkglobals-fb.c:
|
||||
Removed gdk_fb_pointer_grab_window_events,
|
||||
added _gdk_fb_pointer_grab_owner_events and
|
||||
_gdk_fb_keyboard_grab_owner_events.
|
||||
|
||||
* gdk/linux-fb/gdkmain-fb.c (gdk_fb_pointer_grab):
|
||||
Set all button mask if GDK_BUTTON_MOTION_MASK set. Send
|
||||
crossing events before grabbing. Set _gdk_fb_pointer_grab_owner_events.
|
||||
(gdk_fb_pointer_ungrab): Unset _gdk_fb_pointer_grab_owner_events
|
||||
Send crossing events after ungrab finished.
|
||||
(gdk_keyboard_grab): Set ..._owner_events
|
||||
(type_masks): Move out of function.
|
||||
(gdk_fb_other_event_window, gdk_fb_pointer_event_window,
|
||||
gdk_fb_keyboard_event_window): New functions, return the
|
||||
window an event should be targeted at. Handles grabs and
|
||||
event propagation. Can return NULL.
|
||||
(gdk_event_make): Remove event_mask checking. Now always
|
||||
returns an event.
|
||||
|
||||
* gdk/linux-fb/gdkkeyboard-fb.c:
|
||||
* gdk/linux-fb/gdkproperty-fb.c:
|
||||
* gdk/linux-fb/gdkselection-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
|
||||
* gdk/linux-fb/gdkmouse-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
Only send motion events if in the same window.
|
||||
If grabbed, use cursor from window if sibling of grabbed
|
||||
window, and cursor from grabbed window otherwise.
|
||||
|
||||
* gdk/linux-fb/gdkprivate-fb.h:
|
||||
Update gdk_fb_window_send_crossing_events, gdk_event_make
|
||||
and grab varaible declarations. Add gdk_fb_*_event_window().
|
||||
|
||||
* gdk/linux-fb/gdkwindow-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
Keep correct track of focus window.
|
||||
(gdk_window_set_events): Set all specific button motion masks
|
||||
if GDK_BUTTON_MOTION_MASK set.
|
||||
|
||||
* gtk/gtkdnd.c (gtk_drag_update):
|
||||
Free info->last_event if gdk_drag_motion returned FALSE.
|
||||
|
||||
Tue Jan 16 13:13:13 GMT 2001 Tony Gale <gale@gtk.org>
|
||||
|
||||
* docs/faq/gtk-faq.sgml: FAQ update:
|
||||
|
@ -1,3 +1,51 @@
|
||||
2001-01-17 <alexl@redhat.com>
|
||||
|
||||
* gdk/linux-fb/gdkdrawable-fb2.c (gdk_shadow_fb_draw_arc):
|
||||
Doh! Mixed up x and y.
|
||||
|
||||
* gdk/linux-fb/gdkglobals-fb.c:
|
||||
Removed gdk_fb_pointer_grab_window_events,
|
||||
added _gdk_fb_pointer_grab_owner_events and
|
||||
_gdk_fb_keyboard_grab_owner_events.
|
||||
|
||||
* gdk/linux-fb/gdkmain-fb.c (gdk_fb_pointer_grab):
|
||||
Set all button mask if GDK_BUTTON_MOTION_MASK set. Send
|
||||
crossing events before grabbing. Set _gdk_fb_pointer_grab_owner_events.
|
||||
(gdk_fb_pointer_ungrab): Unset _gdk_fb_pointer_grab_owner_events
|
||||
Send crossing events after ungrab finished.
|
||||
(gdk_keyboard_grab): Set ..._owner_events
|
||||
(type_masks): Move out of function.
|
||||
(gdk_fb_other_event_window, gdk_fb_pointer_event_window,
|
||||
gdk_fb_keyboard_event_window): New functions, return the
|
||||
window an event should be targeted at. Handles grabs and
|
||||
event propagation. Can return NULL.
|
||||
(gdk_event_make): Remove event_mask checking. Now always
|
||||
returns an event.
|
||||
|
||||
* gdk/linux-fb/gdkkeyboard-fb.c:
|
||||
* gdk/linux-fb/gdkproperty-fb.c:
|
||||
* gdk/linux-fb/gdkselection-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
|
||||
* gdk/linux-fb/gdkmouse-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
Only send motion events if in the same window.
|
||||
If grabbed, use cursor from window if sibling of grabbed
|
||||
window, and cursor from grabbed window otherwise.
|
||||
|
||||
* gdk/linux-fb/gdkprivate-fb.h:
|
||||
Update gdk_fb_window_send_crossing_events, gdk_event_make
|
||||
and grab varaible declarations. Add gdk_fb_*_event_window().
|
||||
|
||||
* gdk/linux-fb/gdkwindow-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
Keep correct track of focus window.
|
||||
(gdk_window_set_events): Set all specific button motion masks
|
||||
if GDK_BUTTON_MOTION_MASK set.
|
||||
|
||||
* gtk/gtkdnd.c (gtk_drag_update):
|
||||
Free info->last_event if gdk_drag_motion returned FALSE.
|
||||
|
||||
Tue Jan 16 13:13:13 GMT 2001 Tony Gale <gale@gtk.org>
|
||||
|
||||
* docs/faq/gtk-faq.sgml: FAQ update:
|
||||
|
@ -1,3 +1,51 @@
|
||||
2001-01-17 <alexl@redhat.com>
|
||||
|
||||
* gdk/linux-fb/gdkdrawable-fb2.c (gdk_shadow_fb_draw_arc):
|
||||
Doh! Mixed up x and y.
|
||||
|
||||
* gdk/linux-fb/gdkglobals-fb.c:
|
||||
Removed gdk_fb_pointer_grab_window_events,
|
||||
added _gdk_fb_pointer_grab_owner_events and
|
||||
_gdk_fb_keyboard_grab_owner_events.
|
||||
|
||||
* gdk/linux-fb/gdkmain-fb.c (gdk_fb_pointer_grab):
|
||||
Set all button mask if GDK_BUTTON_MOTION_MASK set. Send
|
||||
crossing events before grabbing. Set _gdk_fb_pointer_grab_owner_events.
|
||||
(gdk_fb_pointer_ungrab): Unset _gdk_fb_pointer_grab_owner_events
|
||||
Send crossing events after ungrab finished.
|
||||
(gdk_keyboard_grab): Set ..._owner_events
|
||||
(type_masks): Move out of function.
|
||||
(gdk_fb_other_event_window, gdk_fb_pointer_event_window,
|
||||
gdk_fb_keyboard_event_window): New functions, return the
|
||||
window an event should be targeted at. Handles grabs and
|
||||
event propagation. Can return NULL.
|
||||
(gdk_event_make): Remove event_mask checking. Now always
|
||||
returns an event.
|
||||
|
||||
* gdk/linux-fb/gdkkeyboard-fb.c:
|
||||
* gdk/linux-fb/gdkproperty-fb.c:
|
||||
* gdk/linux-fb/gdkselection-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
|
||||
* gdk/linux-fb/gdkmouse-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
Only send motion events if in the same window.
|
||||
If grabbed, use cursor from window if sibling of grabbed
|
||||
window, and cursor from grabbed window otherwise.
|
||||
|
||||
* gdk/linux-fb/gdkprivate-fb.h:
|
||||
Update gdk_fb_window_send_crossing_events, gdk_event_make
|
||||
and grab varaible declarations. Add gdk_fb_*_event_window().
|
||||
|
||||
* gdk/linux-fb/gdkwindow-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
Keep correct track of focus window.
|
||||
(gdk_window_set_events): Set all specific button motion masks
|
||||
if GDK_BUTTON_MOTION_MASK set.
|
||||
|
||||
* gtk/gtkdnd.c (gtk_drag_update):
|
||||
Free info->last_event if gdk_drag_motion returned FALSE.
|
||||
|
||||
Tue Jan 16 13:13:13 GMT 2001 Tony Gale <gale@gtk.org>
|
||||
|
||||
* docs/faq/gtk-faq.sgml: FAQ update:
|
||||
|
@ -1,3 +1,51 @@
|
||||
2001-01-17 <alexl@redhat.com>
|
||||
|
||||
* gdk/linux-fb/gdkdrawable-fb2.c (gdk_shadow_fb_draw_arc):
|
||||
Doh! Mixed up x and y.
|
||||
|
||||
* gdk/linux-fb/gdkglobals-fb.c:
|
||||
Removed gdk_fb_pointer_grab_window_events,
|
||||
added _gdk_fb_pointer_grab_owner_events and
|
||||
_gdk_fb_keyboard_grab_owner_events.
|
||||
|
||||
* gdk/linux-fb/gdkmain-fb.c (gdk_fb_pointer_grab):
|
||||
Set all button mask if GDK_BUTTON_MOTION_MASK set. Send
|
||||
crossing events before grabbing. Set _gdk_fb_pointer_grab_owner_events.
|
||||
(gdk_fb_pointer_ungrab): Unset _gdk_fb_pointer_grab_owner_events
|
||||
Send crossing events after ungrab finished.
|
||||
(gdk_keyboard_grab): Set ..._owner_events
|
||||
(type_masks): Move out of function.
|
||||
(gdk_fb_other_event_window, gdk_fb_pointer_event_window,
|
||||
gdk_fb_keyboard_event_window): New functions, return the
|
||||
window an event should be targeted at. Handles grabs and
|
||||
event propagation. Can return NULL.
|
||||
(gdk_event_make): Remove event_mask checking. Now always
|
||||
returns an event.
|
||||
|
||||
* gdk/linux-fb/gdkkeyboard-fb.c:
|
||||
* gdk/linux-fb/gdkproperty-fb.c:
|
||||
* gdk/linux-fb/gdkselection-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
|
||||
* gdk/linux-fb/gdkmouse-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
Only send motion events if in the same window.
|
||||
If grabbed, use cursor from window if sibling of grabbed
|
||||
window, and cursor from grabbed window otherwise.
|
||||
|
||||
* gdk/linux-fb/gdkprivate-fb.h:
|
||||
Update gdk_fb_window_send_crossing_events, gdk_event_make
|
||||
and grab varaible declarations. Add gdk_fb_*_event_window().
|
||||
|
||||
* gdk/linux-fb/gdkwindow-fb.c:
|
||||
Use new event_window/gdk_event_make() behaviour.
|
||||
Keep correct track of focus window.
|
||||
(gdk_window_set_events): Set all specific button motion masks
|
||||
if GDK_BUTTON_MOTION_MASK set.
|
||||
|
||||
* gtk/gtkdnd.c (gtk_drag_update):
|
||||
Free info->last_event if gdk_drag_motion returned FALSE.
|
||||
|
||||
Tue Jan 16 13:13:13 GMT 2001 Tony Gale <gale@gtk.org>
|
||||
|
||||
* docs/faq/gtk-faq.sgml: FAQ update:
|
||||
|
@ -1249,9 +1249,9 @@ gdk_shadow_fb_draw_arc (GdkDrawable *drawable,
|
||||
gint extra_width;
|
||||
|
||||
minx = x + private->abs_x;
|
||||
miny = x + private->abs_y;
|
||||
miny = y + private->abs_y;
|
||||
maxx = x + width + private->abs_x;
|
||||
maxy = y + height + private->abs_x;
|
||||
maxy = y + height + private->abs_y;
|
||||
|
||||
if (!filled)
|
||||
{
|
||||
|
@ -33,7 +33,9 @@
|
||||
const gchar *gdk_progclass = "none";
|
||||
gboolean gdk_null_window_warnings = TRUE;
|
||||
|
||||
GdkWindow *_gdk_fb_pointer_grab_window, *_gdk_fb_pointer_grab_window_events, *_gdk_fb_keyboard_grab_window, *_gdk_fb_pointer_grab_confine = NULL;
|
||||
GdkWindow *_gdk_fb_pointer_grab_window, *_gdk_fb_keyboard_grab_window, *_gdk_fb_pointer_grab_confine = NULL;
|
||||
gboolean _gdk_fb_pointer_grab_owner_events;
|
||||
gboolean _gdk_fb_keyboard_grab_owner_events;
|
||||
GdkEventMask _gdk_fb_pointer_grab_events, _gdk_fb_keyboard_grab_events;
|
||||
|
||||
GdkFBWindow *gdk_root_window = NULL;
|
||||
|
@ -371,12 +371,14 @@ gdk_fb_handle_key (guint hw_keycode,
|
||||
gdk_fb_redraw_all ();
|
||||
}
|
||||
|
||||
win = gdk_fb_window_find_focus ();
|
||||
event = gdk_event_make (win,
|
||||
key_up ? GDK_KEY_RELEASE : GDK_KEY_PRESS,
|
||||
TRUE);
|
||||
if (event)
|
||||
win = gdk_fb_keyboard_event_window (gdk_fb_window_find_focus (),
|
||||
key_up ? GDK_KEY_RELEASE : GDK_KEY_PRESS);
|
||||
if (win)
|
||||
{
|
||||
event = gdk_event_make (win,
|
||||
key_up ? GDK_KEY_RELEASE : GDK_KEY_PRESS,
|
||||
TRUE);
|
||||
|
||||
event->key.state = modifier_state;
|
||||
event->key.keyval = keyval;
|
||||
event->key.string = string;
|
||||
|
@ -743,21 +743,30 @@ gdk_fb_pointer_grab (GdkWindow * window,
|
||||
gdk_pointer_ungrab (time);
|
||||
}
|
||||
|
||||
gdk_fb_window_send_crossing_events (NULL,
|
||||
window,
|
||||
GDK_CROSSING_GRAB);
|
||||
|
||||
if (event_mask & GDK_BUTTON_MOTION_MASK)
|
||||
event_mask |=
|
||||
GDK_BUTTON1_MOTION_MASK |
|
||||
GDK_BUTTON2_MOTION_MASK |
|
||||
GDK_BUTTON3_MOTION_MASK;
|
||||
|
||||
_gdk_fb_pointer_implicit_grab = implicit_grab;
|
||||
|
||||
_gdk_fb_pointer_grab_window = gdk_window_ref (window);
|
||||
_gdk_fb_pointer_grab_window_events = owner_events ? NULL : _gdk_fb_pointer_grab_window;
|
||||
_gdk_fb_pointer_grab_owner_events = owner_events;
|
||||
|
||||
_gdk_fb_pointer_grab_confine = confine_to ? gdk_window_ref (confine_to) : NULL;
|
||||
_gdk_fb_pointer_grab_events = event_mask;
|
||||
_gdk_fb_pointer_grab_cursor = cursor ? gdk_cursor_ref (cursor) : NULL;
|
||||
|
||||
|
||||
|
||||
if (cursor)
|
||||
gdk_fb_cursor_reset ();
|
||||
|
||||
gdk_fb_window_send_crossing_events (window,
|
||||
GDK_CROSSING_GRAB);
|
||||
|
||||
return GDK_GRAB_SUCCESS;
|
||||
}
|
||||
|
||||
@ -787,6 +796,7 @@ gdk_fb_pointer_ungrab (guint32 time, gboolean implicit_grab)
|
||||
{
|
||||
gboolean have_grab_cursor = _gdk_fb_pointer_grab_cursor && 1;
|
||||
GdkWindow *mousewin;
|
||||
GdkWindow *old_grab_window;
|
||||
|
||||
if (!_gdk_fb_pointer_grab_window)
|
||||
return;
|
||||
@ -805,16 +815,19 @@ gdk_fb_pointer_ungrab (guint32 time, gboolean implicit_grab)
|
||||
if (have_grab_cursor)
|
||||
gdk_fb_cursor_reset ();
|
||||
|
||||
mousewin = gdk_window_at_pointer (NULL, NULL);
|
||||
gdk_fb_window_send_crossing_events (mousewin,
|
||||
GDK_CROSSING_UNGRAB);
|
||||
old_grab_window = _gdk_fb_pointer_grab_window;
|
||||
|
||||
if (_gdk_fb_pointer_grab_window)
|
||||
gdk_window_unref (_gdk_fb_pointer_grab_window);
|
||||
_gdk_fb_pointer_grab_window = NULL;
|
||||
_gdk_fb_pointer_grab_window_events = NULL;
|
||||
|
||||
_gdk_fb_pointer_implicit_grab = FALSE;
|
||||
|
||||
mousewin = gdk_window_at_pointer (NULL, NULL);
|
||||
gdk_fb_window_send_crossing_events (old_grab_window,
|
||||
mousewin,
|
||||
GDK_CROSSING_UNGRAB);
|
||||
|
||||
if (old_grab_window)
|
||||
gdk_window_unref (old_grab_window);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -869,8 +882,8 @@ gdk_keyboard_grab (GdkWindow * window,
|
||||
if (_gdk_fb_pointer_grab_window)
|
||||
gdk_keyboard_ungrab (time);
|
||||
|
||||
if (!owner_events)
|
||||
_gdk_fb_keyboard_grab_window = gdk_window_ref (window);
|
||||
_gdk_fb_keyboard_grab_window = gdk_window_ref (window);
|
||||
_gdk_fb_keyboard_grab_owner_events = owner_events;
|
||||
|
||||
return GDK_GRAB_SUCCESS;
|
||||
}
|
||||
@ -1074,148 +1087,257 @@ gdk_beep (void)
|
||||
}
|
||||
|
||||
/* utils */
|
||||
static const guint type_masks[] = {
|
||||
GDK_SUBSTRUCTURE_MASK, /* GDK_DELETE = 0, */
|
||||
GDK_STRUCTURE_MASK, /* GDK_DESTROY = 1, */
|
||||
GDK_EXPOSURE_MASK, /* GDK_EXPOSE = 2, */
|
||||
GDK_POINTER_MOTION_MASK, /* GDK_MOTION_NOTIFY = 3, */
|
||||
GDK_BUTTON_PRESS_MASK, /* GDK_BUTTON_PRESS = 4, */
|
||||
GDK_BUTTON_PRESS_MASK, /* GDK_2BUTTON_PRESS = 5, */
|
||||
GDK_BUTTON_PRESS_MASK, /* GDK_3BUTTON_PRESS = 6, */
|
||||
GDK_BUTTON_RELEASE_MASK, /* GDK_BUTTON_RELEASE = 7, */
|
||||
GDK_KEY_PRESS_MASK, /* GDK_KEY_PRESS = 8, */
|
||||
GDK_KEY_RELEASE_MASK, /* GDK_KEY_RELEASE = 9, */
|
||||
GDK_ENTER_NOTIFY_MASK, /* GDK_ENTER_NOTIFY = 10, */
|
||||
GDK_LEAVE_NOTIFY_MASK, /* GDK_LEAVE_NOTIFY = 11, */
|
||||
GDK_FOCUS_CHANGE_MASK, /* GDK_FOCUS_CHANGE = 12, */
|
||||
GDK_STRUCTURE_MASK, /* GDK_CONFIGURE = 13, */
|
||||
GDK_VISIBILITY_NOTIFY_MASK, /* GDK_MAP = 14, */
|
||||
GDK_VISIBILITY_NOTIFY_MASK, /* GDK_UNMAP = 15, */
|
||||
GDK_PROPERTY_CHANGE_MASK, /* GDK_PROPERTY_NOTIFY = 16, */
|
||||
GDK_PROPERTY_CHANGE_MASK, /* GDK_SELECTION_CLEAR = 17, */
|
||||
GDK_PROPERTY_CHANGE_MASK, /* GDK_SELECTION_REQUEST = 18, */
|
||||
GDK_PROPERTY_CHANGE_MASK, /* GDK_SELECTION_NOTIFY = 19, */
|
||||
GDK_PROXIMITY_IN_MASK, /* GDK_PROXIMITY_IN = 20, */
|
||||
GDK_PROXIMITY_OUT_MASK, /* GDK_PROXIMITY_OUT = 21, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_DRAG_ENTER = 22, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_DRAG_LEAVE = 23, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_DRAG_MOTION = 24, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_DRAG_STATUS = 25, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_DROP_START = 26, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_DROP_FINISHED = 27, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_CLIENT_EVENT = 28, */
|
||||
GDK_VISIBILITY_NOTIFY_MASK, /* GDK_VISIBILITY_NOTIFY = 29, */
|
||||
GDK_EXPOSURE_MASK, /* GDK_NO_EXPOSE = 30, */
|
||||
GDK_SCROLL_MASK /* GDK_SCROLL = 31 */
|
||||
};
|
||||
|
||||
GdkWindow *
|
||||
gdk_fb_other_event_window (GdkWindow *window,
|
||||
GdkEventType type)
|
||||
{
|
||||
guint32 evmask;
|
||||
GdkWindow *w;
|
||||
|
||||
w = window;
|
||||
while (w != gdk_parent_root)
|
||||
{
|
||||
/* Huge hack, so that we don't propagate events to GtkWindow->frame */
|
||||
if ((w != window) &&
|
||||
(GDK_WINDOW_P (w)->window_type != GDK_WINDOW_CHILD) &&
|
||||
(g_object_get_data (G_OBJECT (w), "gdk-window-child-handler")))
|
||||
break;
|
||||
|
||||
evmask = GDK_WINDOW_IMPL_FBDATA(window)->event_mask;
|
||||
|
||||
if (evmask & type_masks[type])
|
||||
return w;
|
||||
|
||||
w = gdk_window_get_parent (w);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GdkWindow *
|
||||
gdk_fb_pointer_event_window (GdkWindow *window,
|
||||
GdkEventType type)
|
||||
{
|
||||
guint evmask;
|
||||
GdkModifierType mask;
|
||||
GdkWindow *w;
|
||||
|
||||
gdk_fb_mouse_get_info (NULL, NULL, &mask);
|
||||
|
||||
if (_gdk_fb_pointer_grab_window &&
|
||||
!_gdk_fb_pointer_grab_owner_events)
|
||||
{
|
||||
evmask = _gdk_fb_pointer_grab_events;
|
||||
|
||||
if (evmask & (GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK))
|
||||
{
|
||||
if (((mask & GDK_BUTTON1_MASK) && (evmask & GDK_BUTTON1_MOTION_MASK)) ||
|
||||
((mask & GDK_BUTTON2_MASK) && (evmask & GDK_BUTTON2_MOTION_MASK)) ||
|
||||
((mask & GDK_BUTTON3_MASK) && (evmask & GDK_BUTTON3_MOTION_MASK)))
|
||||
evmask |= GDK_POINTER_MOTION_MASK;
|
||||
}
|
||||
|
||||
if (evmask & type_masks[type])
|
||||
return _gdk_fb_pointer_grab_window;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
w = window;
|
||||
while (w != gdk_parent_root)
|
||||
{
|
||||
/* Huge hack, so that we don't propagate events to GtkWindow->frame */
|
||||
if ((w != window) &&
|
||||
(GDK_WINDOW_P (w)->window_type != GDK_WINDOW_CHILD) &&
|
||||
(g_object_get_data (G_OBJECT (w), "gdk-window-child-handler")))
|
||||
break;
|
||||
|
||||
evmask = GDK_WINDOW_IMPL_FBDATA(window)->event_mask;
|
||||
|
||||
if (evmask & (GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK))
|
||||
{
|
||||
if (((mask & GDK_BUTTON1_MASK) && (evmask & GDK_BUTTON1_MOTION_MASK)) ||
|
||||
((mask & GDK_BUTTON2_MASK) && (evmask & GDK_BUTTON2_MOTION_MASK)) ||
|
||||
((mask & GDK_BUTTON3_MASK) && (evmask & GDK_BUTTON3_MOTION_MASK)))
|
||||
evmask |= GDK_POINTER_MOTION_MASK;
|
||||
}
|
||||
|
||||
if (evmask & type_masks[type])
|
||||
return w;
|
||||
|
||||
w = gdk_window_get_parent (w);
|
||||
}
|
||||
|
||||
if (_gdk_fb_pointer_grab_window &&
|
||||
_gdk_fb_pointer_grab_owner_events)
|
||||
{
|
||||
evmask = _gdk_fb_pointer_grab_events;
|
||||
|
||||
if (evmask & (GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK))
|
||||
{
|
||||
if (((mask & GDK_BUTTON1_MASK) && (evmask & GDK_BUTTON1_MOTION_MASK)) ||
|
||||
((mask & GDK_BUTTON2_MASK) && (evmask & GDK_BUTTON2_MOTION_MASK)) ||
|
||||
((mask & GDK_BUTTON3_MASK) && (evmask & GDK_BUTTON3_MOTION_MASK)))
|
||||
evmask |= GDK_POINTER_MOTION_MASK;
|
||||
}
|
||||
|
||||
if (evmask & type_masks[type])
|
||||
return _gdk_fb_pointer_grab_window;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GdkWindow *
|
||||
gdk_fb_keyboard_event_window (GdkWindow *window,
|
||||
GdkEventType type)
|
||||
{
|
||||
guint32 evmask;
|
||||
GdkWindow *w;
|
||||
|
||||
if (_gdk_fb_keyboard_grab_window &&
|
||||
!_gdk_fb_keyboard_grab_owner_events)
|
||||
{
|
||||
return _gdk_fb_keyboard_grab_window;
|
||||
}
|
||||
|
||||
w = window;
|
||||
while (w != gdk_parent_root)
|
||||
{
|
||||
/* Huge hack, so that we don't propagate events to GtkWindow->frame */
|
||||
if ((w != window) &&
|
||||
(GDK_WINDOW_P (w)->window_type != GDK_WINDOW_CHILD) &&
|
||||
(g_object_get_data (G_OBJECT (w), "gdk-window-child-handler")))
|
||||
break;
|
||||
|
||||
evmask = GDK_WINDOW_IMPL_FBDATA(window)->event_mask;
|
||||
|
||||
if (evmask & type_masks[type])
|
||||
return w;
|
||||
|
||||
w = gdk_window_get_parent (w);
|
||||
}
|
||||
|
||||
if (_gdk_fb_keyboard_grab_window &&
|
||||
_gdk_fb_keyboard_grab_owner_events)
|
||||
{
|
||||
return _gdk_fb_keyboard_grab_window;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GdkEvent *
|
||||
gdk_event_make (GdkWindow *window,
|
||||
GdkEventType type,
|
||||
gboolean append_to_queue)
|
||||
{
|
||||
static const guint type_masks[] = {
|
||||
GDK_SUBSTRUCTURE_MASK, /* GDK_DELETE = 0, */
|
||||
GDK_STRUCTURE_MASK, /* GDK_DESTROY = 1, */
|
||||
GDK_EXPOSURE_MASK, /* GDK_EXPOSE = 2, */
|
||||
GDK_POINTER_MOTION_MASK, /* GDK_MOTION_NOTIFY = 3, */
|
||||
GDK_BUTTON_PRESS_MASK, /* GDK_BUTTON_PRESS = 4, */
|
||||
GDK_BUTTON_PRESS_MASK, /* GDK_2BUTTON_PRESS = 5, */
|
||||
GDK_BUTTON_PRESS_MASK, /* GDK_3BUTTON_PRESS = 6, */
|
||||
GDK_BUTTON_RELEASE_MASK, /* GDK_BUTTON_RELEASE = 7, */
|
||||
GDK_KEY_PRESS_MASK, /* GDK_KEY_PRESS = 8, */
|
||||
GDK_KEY_RELEASE_MASK, /* GDK_KEY_RELEASE = 9, */
|
||||
GDK_ENTER_NOTIFY_MASK, /* GDK_ENTER_NOTIFY = 10, */
|
||||
GDK_LEAVE_NOTIFY_MASK, /* GDK_LEAVE_NOTIFY = 11, */
|
||||
GDK_FOCUS_CHANGE_MASK, /* GDK_FOCUS_CHANGE = 12, */
|
||||
GDK_STRUCTURE_MASK, /* GDK_CONFIGURE = 13, */
|
||||
GDK_VISIBILITY_NOTIFY_MASK, /* GDK_MAP = 14, */
|
||||
GDK_VISIBILITY_NOTIFY_MASK, /* GDK_UNMAP = 15, */
|
||||
GDK_PROPERTY_CHANGE_MASK, /* GDK_PROPERTY_NOTIFY = 16, */
|
||||
GDK_PROPERTY_CHANGE_MASK, /* GDK_SELECTION_CLEAR = 17, */
|
||||
GDK_PROPERTY_CHANGE_MASK, /* GDK_SELECTION_REQUEST = 18, */
|
||||
GDK_PROPERTY_CHANGE_MASK, /* GDK_SELECTION_NOTIFY = 19, */
|
||||
GDK_PROXIMITY_IN_MASK, /* GDK_PROXIMITY_IN = 20, */
|
||||
GDK_PROXIMITY_OUT_MASK, /* GDK_PROXIMITY_OUT = 21, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_DRAG_ENTER = 22, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_DRAG_LEAVE = 23, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_DRAG_MOTION = 24, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_DRAG_STATUS = 25, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_DROP_START = 26, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_DROP_FINISHED = 27, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_CLIENT_EVENT = 28, */
|
||||
GDK_VISIBILITY_NOTIFY_MASK, /* GDK_VISIBILITY_NOTIFY = 29, */
|
||||
GDK_EXPOSURE_MASK, /* GDK_NO_EXPOSE = 30, */
|
||||
GDK_SCROLL_MASK /* GDK_SCROLL = 31 */
|
||||
};
|
||||
guint evmask;
|
||||
|
||||
evmask = GDK_WINDOW_IMPL_FBDATA(window)->event_mask;
|
||||
|
||||
/* Bad hack to make sure that things work semi-properly with owner_events */
|
||||
if (_gdk_fb_pointer_grab_window)
|
||||
evmask |= _gdk_fb_pointer_grab_events;
|
||||
if (_gdk_fb_keyboard_grab_window)
|
||||
evmask |= _gdk_fb_keyboard_grab_events;
|
||||
|
||||
if (evmask & GDK_BUTTON_MOTION_MASK)
|
||||
GdkEvent *event = gdk_event_new ();
|
||||
guint32 the_time;
|
||||
|
||||
the_time = gdk_fb_get_time ();
|
||||
|
||||
event->any.type = type;
|
||||
event->any.window = gdk_window_ref (window);
|
||||
event->any.send_event = FALSE;
|
||||
switch (type)
|
||||
{
|
||||
evmask |= GDK_BUTTON1_MOTION_MASK|GDK_BUTTON2_MOTION_MASK|GDK_BUTTON3_MOTION_MASK;
|
||||
case GDK_MOTION_NOTIFY:
|
||||
event->motion.time = the_time;
|
||||
event->motion.axes = NULL;
|
||||
break;
|
||||
case GDK_BUTTON_PRESS:
|
||||
case GDK_2BUTTON_PRESS:
|
||||
case GDK_3BUTTON_PRESS:
|
||||
case GDK_BUTTON_RELEASE:
|
||||
event->button.time = the_time;
|
||||
event->button.axes = NULL;
|
||||
break;
|
||||
case GDK_KEY_PRESS:
|
||||
case GDK_KEY_RELEASE:
|
||||
event->key.time = the_time;
|
||||
break;
|
||||
case GDK_ENTER_NOTIFY:
|
||||
case GDK_LEAVE_NOTIFY:
|
||||
event->crossing.time = the_time;
|
||||
break;
|
||||
|
||||
case GDK_PROPERTY_NOTIFY:
|
||||
event->property.time = the_time;
|
||||
break;
|
||||
|
||||
case GDK_SELECTION_CLEAR:
|
||||
case GDK_SELECTION_REQUEST:
|
||||
case GDK_SELECTION_NOTIFY:
|
||||
event->selection.time = the_time;
|
||||
break;
|
||||
case GDK_PROXIMITY_IN:
|
||||
case GDK_PROXIMITY_OUT:
|
||||
event->proximity.time = the_time;
|
||||
break;
|
||||
case GDK_DRAG_ENTER:
|
||||
case GDK_DRAG_LEAVE:
|
||||
case GDK_DRAG_MOTION:
|
||||
case GDK_DRAG_STATUS:
|
||||
case GDK_DROP_START:
|
||||
case GDK_DROP_FINISHED:
|
||||
event->dnd.time = the_time;
|
||||
break;
|
||||
|
||||
case GDK_FOCUS_CHANGE:
|
||||
case GDK_CONFIGURE:
|
||||
case GDK_MAP:
|
||||
case GDK_UNMAP:
|
||||
case GDK_CLIENT_EVENT:
|
||||
case GDK_VISIBILITY_NOTIFY:
|
||||
case GDK_NO_EXPOSE:
|
||||
case GDK_SCROLL:
|
||||
case GDK_DELETE:
|
||||
case GDK_DESTROY:
|
||||
case GDK_EXPOSE:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (evmask & (GDK_BUTTON1_MOTION_MASK|GDK_BUTTON2_MOTION_MASK|GDK_BUTTON3_MOTION_MASK))
|
||||
{
|
||||
GdkModifierType mask;
|
||||
|
||||
gdk_fb_mouse_get_info (NULL, NULL, &mask);
|
||||
|
||||
if (((mask & GDK_BUTTON1_MASK) && (evmask & GDK_BUTTON1_MOTION_MASK)) ||
|
||||
((mask & GDK_BUTTON2_MASK) && (evmask & GDK_BUTTON2_MOTION_MASK)) ||
|
||||
((mask & GDK_BUTTON3_MASK) && (evmask & GDK_BUTTON3_MOTION_MASK)))
|
||||
evmask |= GDK_POINTER_MOTION_MASK;
|
||||
}
|
||||
|
||||
if (evmask & type_masks[type])
|
||||
{
|
||||
GdkEvent *event = gdk_event_new ();
|
||||
guint32 the_time;
|
||||
|
||||
the_time = gdk_fb_get_time ();
|
||||
|
||||
event->any.type = type;
|
||||
event->any.window = gdk_window_ref (window);
|
||||
event->any.send_event = FALSE;
|
||||
switch (type)
|
||||
{
|
||||
case GDK_MOTION_NOTIFY:
|
||||
event->motion.time = the_time;
|
||||
event->motion.axes = NULL;
|
||||
break;
|
||||
case GDK_BUTTON_PRESS:
|
||||
case GDK_2BUTTON_PRESS:
|
||||
case GDK_3BUTTON_PRESS:
|
||||
case GDK_BUTTON_RELEASE:
|
||||
event->button.time = the_time;
|
||||
event->button.axes = NULL;
|
||||
break;
|
||||
case GDK_KEY_PRESS:
|
||||
case GDK_KEY_RELEASE:
|
||||
event->key.time = the_time;
|
||||
break;
|
||||
case GDK_ENTER_NOTIFY:
|
||||
case GDK_LEAVE_NOTIFY:
|
||||
event->crossing.time = the_time;
|
||||
break;
|
||||
|
||||
case GDK_PROPERTY_NOTIFY:
|
||||
event->property.time = the_time;
|
||||
break;
|
||||
|
||||
case GDK_SELECTION_CLEAR:
|
||||
case GDK_SELECTION_REQUEST:
|
||||
case GDK_SELECTION_NOTIFY:
|
||||
event->selection.time = the_time;
|
||||
break;
|
||||
case GDK_PROXIMITY_IN:
|
||||
case GDK_PROXIMITY_OUT:
|
||||
event->proximity.time = the_time;
|
||||
break;
|
||||
case GDK_DRAG_ENTER:
|
||||
case GDK_DRAG_LEAVE:
|
||||
case GDK_DRAG_MOTION:
|
||||
case GDK_DRAG_STATUS:
|
||||
case GDK_DROP_START:
|
||||
case GDK_DROP_FINISHED:
|
||||
event->dnd.time = the_time;
|
||||
break;
|
||||
|
||||
case GDK_FOCUS_CHANGE:
|
||||
case GDK_CONFIGURE:
|
||||
case GDK_MAP:
|
||||
case GDK_UNMAP:
|
||||
case GDK_CLIENT_EVENT:
|
||||
case GDK_VISIBILITY_NOTIFY:
|
||||
case GDK_NO_EXPOSE:
|
||||
case GDK_SCROLL:
|
||||
case GDK_DELETE:
|
||||
case GDK_DESTROY:
|
||||
case GDK_EXPOSE:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (append_to_queue)
|
||||
gdk_event_queue_append (event);
|
||||
|
||||
return event;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
||||
if (append_to_queue)
|
||||
gdk_event_queue_append (event);
|
||||
|
||||
return event;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -73,10 +73,12 @@ handle_mouse_movement(GdkFBMouse *mouse)
|
||||
GdkWindow *mousewin;
|
||||
GdkEvent *event;
|
||||
gint x, y;
|
||||
GdkWindow *win, *grabwin;
|
||||
GdkWindow *old_win, *win, *event_win, *cursor_win;
|
||||
guint state;
|
||||
GdkDrawableFBData *mousewin_private;
|
||||
|
||||
old_win = gdk_window_at_pointer (NULL, NULL);
|
||||
|
||||
if (_gdk_fb_pointer_grab_confine)
|
||||
mousewin = _gdk_fb_pointer_grab_confine;
|
||||
else
|
||||
@ -95,25 +97,42 @@ handle_mouse_movement(GdkFBMouse *mouse)
|
||||
mouse->y = mousewin_private->lim_y - 1;
|
||||
|
||||
win = gdk_window_at_pointer (NULL, NULL);
|
||||
if (_gdk_fb_pointer_grab_window_events)
|
||||
grabwin = _gdk_fb_pointer_grab_window_events;
|
||||
else
|
||||
grabwin = win;
|
||||
|
||||
gdk_fb_cursor_move (mouse->x, mouse->y, grabwin);
|
||||
|
||||
gdk_window_get_origin (grabwin, &x, &y);
|
||||
x = mouse->x - x;
|
||||
y = mouse->y - y;
|
||||
|
||||
state = (mouse->button_pressed[0]?GDK_BUTTON1_MASK:0) |
|
||||
(mouse->button_pressed[1]?GDK_BUTTON2_MASK:0) |
|
||||
(mouse->button_pressed[2]?GDK_BUTTON3_MASK:0) |
|
||||
gdk_fb_keyboard_modifiers ();
|
||||
|
||||
event = gdk_event_make (grabwin, GDK_MOTION_NOTIFY, TRUE);
|
||||
if (event)
|
||||
cursor_win = win;
|
||||
if (_gdk_fb_pointer_grab_window)
|
||||
{
|
||||
GdkWindow *w;
|
||||
|
||||
cursor_win = _gdk_fb_pointer_grab_window;
|
||||
w = win;
|
||||
while (w != gdk_parent_root)
|
||||
{
|
||||
if (w == _gdk_fb_pointer_grab_window)
|
||||
{
|
||||
cursor_win = win;
|
||||
break;
|
||||
}
|
||||
w = gdk_window_get_parent (w);
|
||||
}
|
||||
}
|
||||
|
||||
gdk_fb_cursor_move (mouse->x, mouse->y, cursor_win);
|
||||
|
||||
event_win = gdk_fb_pointer_event_window (win, GDK_MOTION_NOTIFY);
|
||||
|
||||
if (event_win && (win == old_win))
|
||||
{
|
||||
/* Only send motion events in the same window */
|
||||
gdk_window_get_origin (event_win, &x, &y);
|
||||
x = mouse->x - x;
|
||||
y = mouse->y - y;
|
||||
|
||||
state = (mouse->button_pressed[0]?GDK_BUTTON1_MASK:0) |
|
||||
(mouse->button_pressed[1]?GDK_BUTTON2_MASK:0) |
|
||||
(mouse->button_pressed[2]?GDK_BUTTON3_MASK:0) |
|
||||
gdk_fb_keyboard_modifiers ();
|
||||
|
||||
event = gdk_event_make (event_win, GDK_MOTION_NOTIFY, TRUE);
|
||||
event->motion.x = x;
|
||||
event->motion.y = y;
|
||||
event->motion.state = state;
|
||||
@ -122,8 +141,8 @@ handle_mouse_movement(GdkFBMouse *mouse)
|
||||
event->motion.x_root = mouse->x;
|
||||
event->motion.y_root = mouse->y;
|
||||
}
|
||||
|
||||
gdk_fb_window_send_crossing_events (win, GDK_CROSSING_NORMAL);
|
||||
|
||||
gdk_fb_window_send_crossing_events (NULL, win, GDK_CROSSING_NORMAL);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -133,19 +152,20 @@ send_button_event (GdkFBMouse *mouse,
|
||||
{
|
||||
GdkEvent *event;
|
||||
gint x, y, i;
|
||||
GdkWindow *window;
|
||||
GdkWindow *mouse_win;
|
||||
GdkWindow *event_win;
|
||||
int nbuttons;
|
||||
|
||||
if (_gdk_fb_pointer_grab_window_events)
|
||||
window = _gdk_fb_pointer_grab_window_events;
|
||||
else
|
||||
window = gdk_window_at_pointer(NULL, NULL);
|
||||
|
||||
event = gdk_event_make (window, press_event ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE, FALSE);
|
||||
|
||||
if (event)
|
||||
|
||||
mouse_win = gdk_window_at_pointer(NULL, NULL);
|
||||
event_win = gdk_fb_pointer_event_window (mouse_win,
|
||||
press_event ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE);
|
||||
|
||||
if (event_win)
|
||||
{
|
||||
gdk_window_get_origin (window, &x, &y);
|
||||
event = gdk_event_make (event_win, press_event ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE, FALSE);
|
||||
|
||||
gdk_window_get_origin (event_win, &x, &y);
|
||||
x = mouse->x - x;
|
||||
y = mouse->y - y;
|
||||
|
||||
@ -176,8 +196,8 @@ send_button_event (GdkFBMouse *mouse,
|
||||
/* Handle implicit button grabs: */
|
||||
if (press_event && nbuttons == 1)
|
||||
{
|
||||
gdk_fb_pointer_grab (window, FALSE,
|
||||
gdk_window_get_events (window),
|
||||
gdk_fb_pointer_grab (mouse_win, FALSE,
|
||||
gdk_window_get_events (mouse_win),
|
||||
NULL, NULL,
|
||||
GDK_CURRENT_TIME, TRUE);
|
||||
mouse->click_grab = TRUE;
|
||||
|
@ -262,7 +262,8 @@ void gdk_window_invalidate_region_clear (GdkWindow *window,
|
||||
GdkRegion *region);
|
||||
void gdk_window_invalidate_rect_clear (GdkWindow *window,
|
||||
GdkRectangle *rect);
|
||||
void gdk_fb_window_send_crossing_events (GdkWindow *dest,
|
||||
void gdk_fb_window_send_crossing_events (GdkWindow *src,
|
||||
GdkWindow *dest,
|
||||
GdkCrossingMode mode);
|
||||
void gdk_fb_window_move_resize (GdkWindow *window,
|
||||
gint x,
|
||||
@ -384,14 +385,29 @@ void gdk_fb_recompute_all (void);
|
||||
|
||||
extern GdkFBAngle _gdk_fb_screen_angle;
|
||||
|
||||
extern GdkWindow *_gdk_fb_pointer_grab_window, *_gdk_fb_pointer_grab_window_events, *_gdk_fb_keyboard_grab_window, *_gdk_fb_pointer_grab_confine;
|
||||
extern GdkEventMask _gdk_fb_pointer_grab_events, _gdk_fb_keyboard_grab_events;
|
||||
/* Pointer grab info */
|
||||
extern GdkWindow *_gdk_fb_pointer_grab_window;
|
||||
extern gboolean _gdk_fb_pointer_grab_owner_events;
|
||||
extern GdkWindow *_gdk_fb_pointer_grab_confine;
|
||||
extern GdkEventMask _gdk_fb_pointer_grab_events;
|
||||
extern GdkCursor *_gdk_fb_pointer_grab_cursor;
|
||||
/* Keyboard grab info */
|
||||
extern GdkWindow *_gdk_fb_keyboard_grab_window;
|
||||
extern GdkEventMask _gdk_fb_keyboard_grab_events;
|
||||
extern gboolean _gdk_fb_keyboard_grab_owner_events;
|
||||
|
||||
extern GdkFBDisplay *gdk_display;
|
||||
extern GdkDrawableClass _gdk_fb_drawable_class;
|
||||
extern FILE *debug_out;
|
||||
GdkEvent *gdk_event_make(GdkWindow *window, GdkEventType type, gboolean append_to_queue);
|
||||
GdkEvent *gdk_event_make_2(GdkWindow *window, GdkEventType type, gboolean append_to_queue, gint button_press_num);
|
||||
GdkEvent *gdk_event_make(GdkWindow *window,
|
||||
GdkEventType type,
|
||||
gboolean append_to_queue);
|
||||
GdkWindow * gdk_fb_pointer_event_window (GdkWindow *window,
|
||||
GdkEventType type);
|
||||
GdkWindow *gdk_fb_keyboard_event_window (GdkWindow *window,
|
||||
GdkEventType type);
|
||||
GdkWindow *gdk_fb_other_event_window (GdkWindow *window,
|
||||
GdkEventType type);
|
||||
|
||||
void gdk_fb_get_cursor_rect(GdkRectangle *rect);
|
||||
gboolean gdk_fb_cursor_need_hide(GdkRectangle *rect);
|
||||
|
@ -54,13 +54,15 @@ gdk_property_delete_2 (GdkWindow *window,
|
||||
{
|
||||
GdkWindowFBData *fbd = GDK_WINDOW_IMPL_FBDATA(window);
|
||||
GdkEvent *event;
|
||||
GdkWindow *event_window;
|
||||
|
||||
g_hash_table_remove (fbd->properties, GUINT_TO_POINTER (property));
|
||||
g_free (prop);
|
||||
|
||||
event = gdk_event_make (window, GDK_PROPERTY_NOTIFY, TRUE);
|
||||
if (event)
|
||||
event_window = gdk_fb_other_event_window (window, GDK_PROPERTY_NOTIFY);
|
||||
if (event_window)
|
||||
{
|
||||
event = gdk_event_make (event_window, GDK_PROPERTY_NOTIFY, TRUE);
|
||||
event->property.atom = property;
|
||||
event->property.state = GDK_PROPERTY_DELETE;
|
||||
}
|
||||
@ -147,6 +149,7 @@ gdk_property_change (GdkWindow *window,
|
||||
GdkWindowProperty *prop, *new_prop;
|
||||
int new_size = 0;
|
||||
GdkEvent *event;
|
||||
GdkWindow *event_window;
|
||||
|
||||
g_return_if_fail (window != NULL);
|
||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||
@ -195,9 +198,10 @@ gdk_property_change (GdkWindow *window,
|
||||
g_hash_table_insert (fbd->properties, GUINT_TO_POINTER (property), new_prop);
|
||||
g_free (prop);
|
||||
|
||||
event = gdk_event_make (window, GDK_PROPERTY_NOTIFY, TRUE);
|
||||
if (event)
|
||||
event_window = gdk_fb_other_event_window (window, GDK_PROPERTY_NOTIFY);
|
||||
if (event_window)
|
||||
{
|
||||
event = gdk_event_make (event_window, GDK_PROPERTY_NOTIFY, TRUE);
|
||||
event->property.atom = property;
|
||||
event->property.state = GDK_PROPERTY_NEW_VALUE;
|
||||
}
|
||||
|
@ -125,14 +125,16 @@ gdk_selection_convert (GdkWindow *requestor,
|
||||
{
|
||||
GdkEvent *event;
|
||||
GdkWindow *owner;
|
||||
GdkWindow *event_window;
|
||||
|
||||
owner = gdk_selection_owner_get (selection);
|
||||
|
||||
if (owner)
|
||||
{
|
||||
event = gdk_event_make (owner, GDK_SELECTION_REQUEST, TRUE);
|
||||
if (event)
|
||||
event_window = gdk_fb_other_event_window (owner, GDK_SELECTION_REQUEST);
|
||||
if (event_window)
|
||||
{
|
||||
event = gdk_event_make (event_window, GDK_SELECTION_REQUEST, TRUE);
|
||||
event->selection.requestor = requestor;
|
||||
event->selection.selection = selection;
|
||||
event->selection.target = target;
|
||||
@ -209,10 +211,12 @@ gdk_selection_send_notify (guint32 requestor,
|
||||
guint32 time)
|
||||
{
|
||||
GdkEvent *event;
|
||||
GdkWindow *event_window;
|
||||
|
||||
event = gdk_event_make (gdk_window_lookup (requestor), GDK_SELECTION_NOTIFY, TRUE);
|
||||
if (event)
|
||||
event_window = gdk_fb_other_event_window (gdk_window_lookup (requestor), GDK_SELECTION_NOTIFY);
|
||||
if (event_window)
|
||||
{
|
||||
event = gdk_event_make (event_window, GDK_SELECTION_NOTIFY, TRUE);
|
||||
event->selection.selection = selection;
|
||||
event->selection.target = target;
|
||||
event->selection.property = property;
|
||||
|
@ -36,6 +36,7 @@
|
||||
|
||||
/* Global variables: */
|
||||
static GdkWindow *gdk_fb_window_containing_pointer = NULL;
|
||||
static GdkWindow *gdk_fb_focused_window = NULL;
|
||||
static gpointer parent_class = NULL;
|
||||
|
||||
static void recompute_drawable (GdkDrawable *drawable);
|
||||
@ -315,15 +316,19 @@ send_map_events (GdkWindowObject *private, gboolean is_map)
|
||||
{
|
||||
GList *l;
|
||||
GdkWindow *parent = (GdkWindow *)private->parent;
|
||||
|
||||
GdkWindow *event_win;
|
||||
|
||||
g_assert (is_map);
|
||||
|
||||
if (!private->mapped)
|
||||
return;
|
||||
|
||||
if (is_map)
|
||||
gdk_event_make ((GdkWindow *)private, GDK_MAP, TRUE);
|
||||
|
||||
{
|
||||
event_win = gdk_fb_other_event_window ((GdkWindow *)private, GDK_MAP);
|
||||
if (event_win)
|
||||
gdk_event_make (event_win, GDK_MAP, TRUE);
|
||||
}
|
||||
if (private->input_only)
|
||||
return;
|
||||
|
||||
@ -462,20 +467,15 @@ gdk_fb_redraw_all (void)
|
||||
|
||||
|
||||
/* Focus follows pointer */
|
||||
GdkWindow *
|
||||
_gdk_fb_window_find_focus (GdkWindow *window_with_mouse)
|
||||
static GdkWindow *
|
||||
gdk_fb_window_find_toplevel (GdkWindow *window)
|
||||
{
|
||||
if (_gdk_fb_keyboard_grab_window)
|
||||
return _gdk_fb_keyboard_grab_window;
|
||||
else if (window_with_mouse)
|
||||
GdkWindowObject *priv = (GdkWindowObject *)window;
|
||||
while (priv != (GdkWindowObject *)gdk_parent_root)
|
||||
{
|
||||
GdkWindowObject *priv = (GdkWindowObject *)window_with_mouse;
|
||||
while (priv != (GdkWindowObject *)gdk_parent_root)
|
||||
{
|
||||
if ((priv->parent == (GdkWindowObject *)gdk_parent_root) && priv->mapped)
|
||||
return (GdkWindow *)priv;
|
||||
priv = priv->parent;
|
||||
}
|
||||
if ((priv->parent == (GdkWindowObject *)gdk_parent_root) && priv->mapped)
|
||||
return (GdkWindow *)priv;
|
||||
priv = priv->parent;
|
||||
}
|
||||
|
||||
return gdk_parent_root;
|
||||
@ -484,28 +484,49 @@ _gdk_fb_window_find_focus (GdkWindow *window_with_mouse)
|
||||
GdkWindow *
|
||||
gdk_fb_window_find_focus (void)
|
||||
{
|
||||
return _gdk_fb_window_find_focus (gdk_fb_window_containing_pointer);
|
||||
if (_gdk_fb_keyboard_grab_window)
|
||||
return _gdk_fb_keyboard_grab_window;
|
||||
|
||||
if (!gdk_fb_focused_window)
|
||||
gdk_fb_focused_window = gdk_parent_root;
|
||||
|
||||
return gdk_fb_focused_window;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
gdk_fb_send_focus_change (GdkWindow *old_window_containing_pointer,
|
||||
GdkWindow *new_window_containing_pointer)
|
||||
gdk_fb_change_focus (GdkWindow *new_focus_window)
|
||||
{
|
||||
GdkEventFocus *event;
|
||||
GdkWindow *old_win, *new_win;
|
||||
old_win = _gdk_fb_window_find_focus (old_window_containing_pointer);
|
||||
new_win = _gdk_fb_window_find_focus (new_window_containing_pointer);
|
||||
GdkWindow *event_win;
|
||||
|
||||
/* No focus changes while the pointer is grabbed */
|
||||
if (_gdk_fb_pointer_grab_window)
|
||||
return;
|
||||
|
||||
old_win = gdk_fb_focused_window;
|
||||
new_win = gdk_fb_window_find_toplevel (new_focus_window);
|
||||
|
||||
if (old_win != new_win)
|
||||
{
|
||||
event = (GdkEventFocus *)gdk_event_make (old_win, GDK_FOCUS_CHANGE, TRUE);
|
||||
if (event)
|
||||
event->in = FALSE;
|
||||
event = (GdkEventFocus *)gdk_event_make (new_win, GDK_FOCUS_CHANGE, TRUE);
|
||||
if (event)
|
||||
event->in = TRUE;
|
||||
if (old_win)
|
||||
{
|
||||
event_win = gdk_fb_keyboard_event_window (old_win, GDK_FOCUS_CHANGE);
|
||||
if (event_win)
|
||||
{
|
||||
event = (GdkEventFocus *)gdk_event_make (event_win, GDK_FOCUS_CHANGE, TRUE);
|
||||
event->in = FALSE;
|
||||
}
|
||||
}
|
||||
event_win = gdk_fb_keyboard_event_window (new_win, GDK_FOCUS_CHANGE);
|
||||
if (event_win)
|
||||
{
|
||||
event = (GdkEventFocus *)gdk_event_make (event_win, GDK_FOCUS_CHANGE, TRUE);
|
||||
event->in = TRUE;
|
||||
}
|
||||
}
|
||||
gdk_fb_focused_window = new_win;
|
||||
}
|
||||
|
||||
static GdkWindow *
|
||||
@ -545,7 +566,8 @@ gdk_fb_find_common_ancestor (GdkWindow *win1,
|
||||
}
|
||||
|
||||
void
|
||||
gdk_fb_window_send_crossing_events (GdkWindow *dest,
|
||||
gdk_fb_window_send_crossing_events (GdkWindow *src,
|
||||
GdkWindow *dest,
|
||||
GdkCrossingMode mode)
|
||||
{
|
||||
GdkWindow *c;
|
||||
@ -555,9 +577,9 @@ gdk_fb_window_send_crossing_events (GdkWindow *dest,
|
||||
GdkModifierType my_mask;
|
||||
GList *path, *list;
|
||||
gboolean non_linear;
|
||||
gboolean only_grabbed_window;
|
||||
GdkWindow *a;
|
||||
GdkWindow *b;
|
||||
GdkWindow *event_win;
|
||||
|
||||
if ((mode == GDK_CROSSING_NORMAL) &&
|
||||
(dest == gdk_fb_window_containing_pointer))
|
||||
@ -566,18 +588,12 @@ gdk_fb_window_send_crossing_events (GdkWindow *dest,
|
||||
if (gdk_fb_window_containing_pointer == NULL)
|
||||
gdk_fb_window_containing_pointer = gdk_window_ref (gdk_parent_root);
|
||||
|
||||
if (mode == GDK_CROSSING_UNGRAB)
|
||||
a = _gdk_fb_pointer_grab_window;
|
||||
if (src)
|
||||
a = src;
|
||||
else
|
||||
a = gdk_fb_window_containing_pointer;
|
||||
b = dest;
|
||||
|
||||
/* When grab in progress only send normal crossing events about
|
||||
* the grabbed window.
|
||||
*/
|
||||
only_grabbed_window = (_gdk_fb_pointer_grab_window_events != NULL) &&
|
||||
(mode == GDK_CROSSING_NORMAL);
|
||||
|
||||
if (a==b)
|
||||
return;
|
||||
|
||||
@ -587,12 +603,10 @@ gdk_fb_window_send_crossing_events (GdkWindow *dest,
|
||||
|
||||
non_linear = (c != a) && (c != b);
|
||||
|
||||
if (!only_grabbed_window || (a == _gdk_fb_pointer_grab_window))
|
||||
event = gdk_event_make (a, GDK_LEAVE_NOTIFY, TRUE);
|
||||
else
|
||||
event = NULL;
|
||||
if (event)
|
||||
event_win = gdk_fb_pointer_event_window (a, GDK_LEAVE_NOTIFY);
|
||||
if (event_win)
|
||||
{
|
||||
event = gdk_event_make (event_win, GDK_LEAVE_NOTIFY, TRUE);
|
||||
event->crossing.subwindow = NULL;
|
||||
gdk_window_get_root_origin (a, &x_int, &y_int);
|
||||
event->crossing.x = x - x_int;
|
||||
@ -617,12 +631,10 @@ gdk_fb_window_send_crossing_events (GdkWindow *dest,
|
||||
win = GDK_WINDOW (GDK_WINDOW_OBJECT (a)->parent);
|
||||
while (win != c)
|
||||
{
|
||||
if (!only_grabbed_window || (win == _gdk_fb_pointer_grab_window))
|
||||
event = gdk_event_make (win, GDK_LEAVE_NOTIFY, TRUE);
|
||||
else
|
||||
event = NULL;
|
||||
if (event)
|
||||
event_win = gdk_fb_pointer_event_window (win, GDK_LEAVE_NOTIFY);
|
||||
if (event_win)
|
||||
{
|
||||
event = gdk_event_make (event_win, GDK_LEAVE_NOTIFY, TRUE);
|
||||
event->crossing.subwindow = gdk_window_ref (last);
|
||||
gdk_window_get_root_origin (win, &x_int, &y_int);
|
||||
event->crossing.x = x - x_int;
|
||||
@ -663,12 +675,10 @@ gdk_fb_window_send_crossing_events (GdkWindow *dest,
|
||||
else
|
||||
next = b;
|
||||
|
||||
if (!only_grabbed_window || (win == _gdk_fb_pointer_grab_window))
|
||||
event = gdk_event_make (win, GDK_ENTER_NOTIFY, TRUE);
|
||||
else
|
||||
event = NULL;
|
||||
if (event)
|
||||
event_win = gdk_fb_pointer_event_window (win, GDK_ENTER_NOTIFY);
|
||||
if (event_win)
|
||||
{
|
||||
event = gdk_event_make (event_win, GDK_ENTER_NOTIFY, TRUE);
|
||||
event->crossing.subwindow = gdk_window_ref (next);
|
||||
gdk_window_get_root_origin (win, &x_int, &y_int);
|
||||
event->crossing.x = x - x_int;
|
||||
@ -687,12 +697,10 @@ gdk_fb_window_send_crossing_events (GdkWindow *dest,
|
||||
g_list_free (path);
|
||||
}
|
||||
|
||||
if (!only_grabbed_window || (b == _gdk_fb_pointer_grab_window))
|
||||
event = gdk_event_make (b, GDK_ENTER_NOTIFY, TRUE);
|
||||
else
|
||||
event = NULL;
|
||||
if (event)
|
||||
event_win = gdk_fb_pointer_event_window (b, GDK_ENTER_NOTIFY);
|
||||
if (event_win)
|
||||
{
|
||||
event = gdk_event_make (event_win, GDK_ENTER_NOTIFY, TRUE);
|
||||
event->crossing.subwindow = NULL;
|
||||
gdk_window_get_root_origin (b, &x_int, &y_int);
|
||||
event->crossing.x = x - x_int;
|
||||
@ -710,13 +718,14 @@ gdk_fb_window_send_crossing_events (GdkWindow *dest,
|
||||
event->crossing.state = my_mask;
|
||||
}
|
||||
|
||||
if ((mode != GDK_CROSSING_GRAB) &&
|
||||
(b != gdk_fb_window_containing_pointer) &&
|
||||
!only_grabbed_window)
|
||||
if (mode != GDK_CROSSING_GRAB)
|
||||
{
|
||||
gdk_fb_send_focus_change (gdk_fb_window_containing_pointer, b);
|
||||
gdk_window_unref (gdk_fb_window_containing_pointer);
|
||||
gdk_fb_window_containing_pointer = gdk_window_ref (b);
|
||||
gdk_fb_change_focus (b);
|
||||
if (b != gdk_fb_window_containing_pointer)
|
||||
{
|
||||
gdk_window_unref (gdk_fb_window_containing_pointer);
|
||||
gdk_fb_window_containing_pointer = gdk_window_ref (b);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -744,7 +753,8 @@ gdk_window_show (GdkWindow *window)
|
||||
send_map_events (private, TRUE);
|
||||
|
||||
mousewin = gdk_window_at_pointer (NULL, NULL);
|
||||
gdk_fb_window_send_crossing_events (mousewin,
|
||||
gdk_fb_window_send_crossing_events (NULL,
|
||||
mousewin,
|
||||
GDK_CROSSING_NORMAL);
|
||||
|
||||
if (private->input_only)
|
||||
@ -764,6 +774,7 @@ gdk_window_hide (GdkWindow *window)
|
||||
{
|
||||
GdkWindowObject *private;
|
||||
GdkWindow *mousewin;
|
||||
GdkWindow *event_win;
|
||||
|
||||
g_return_if_fail (window != NULL);
|
||||
|
||||
@ -775,7 +786,9 @@ gdk_window_hide (GdkWindow *window)
|
||||
GdkRectangle r;
|
||||
gboolean do_hide;
|
||||
|
||||
event = gdk_event_make (window, GDK_UNMAP, TRUE);
|
||||
event_win = gdk_fb_other_event_window (window, GDK_UNMAP);
|
||||
if (event_win)
|
||||
event = gdk_event_make (event_win, GDK_UNMAP, TRUE);
|
||||
|
||||
r.x = GDK_DRAWABLE_IMPL_FBDATA (window)->llim_x;
|
||||
r.y = GDK_DRAWABLE_IMPL_FBDATA (window)->llim_y;
|
||||
@ -785,7 +798,8 @@ gdk_window_hide (GdkWindow *window)
|
||||
private->mapped = FALSE;
|
||||
|
||||
mousewin = gdk_window_at_pointer (NULL, NULL);
|
||||
gdk_fb_window_send_crossing_events (mousewin,
|
||||
gdk_fb_window_send_crossing_events (NULL,
|
||||
mousewin,
|
||||
GDK_CROSSING_NORMAL);
|
||||
|
||||
do_hide = gdk_fb_cursor_need_hide (&r);
|
||||
@ -1113,9 +1127,11 @@ gdk_fb_window_move_resize (GdkWindow *window,
|
||||
/* Send GdkEventConfigure for toplevel windows */
|
||||
if (private->window_type != GDK_WINDOW_CHILD)
|
||||
{
|
||||
event = gdk_event_make (window, GDK_CONFIGURE, TRUE);
|
||||
if (event)
|
||||
GdkWindow *event_win;
|
||||
event_win = gdk_fb_other_event_window (window, GDK_CONFIGURE);
|
||||
if (event_win)
|
||||
{
|
||||
event = gdk_event_make (event_win, GDK_CONFIGURE, TRUE);
|
||||
event->configure.x = private->x;
|
||||
event->configure.y = private->y;
|
||||
event->configure.width = GDK_DRAWABLE_IMPL_FBDATA (private)->width;
|
||||
@ -1125,7 +1141,8 @@ gdk_fb_window_move_resize (GdkWindow *window,
|
||||
|
||||
/* The window the pointer is in might have changed */
|
||||
mousewin = gdk_window_at_pointer (NULL, NULL);
|
||||
gdk_fb_window_send_crossing_events (mousewin,
|
||||
gdk_fb_window_send_crossing_events (NULL,
|
||||
mousewin,
|
||||
GDK_CROSSING_NORMAL);
|
||||
}
|
||||
}
|
||||
@ -1682,6 +1699,11 @@ gdk_window_set_events (GdkWindow *window,
|
||||
|
||||
g_return_if_fail (window != NULL);
|
||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||
|
||||
if (event_mask & GDK_BUTTON_MOTION_MASK)
|
||||
event_mask |=
|
||||
GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK |
|
||||
GDK_BUTTON3_MOTION_MASK;
|
||||
|
||||
if (!GDK_WINDOW_DESTROYED (window))
|
||||
GDK_WINDOW_IMPL_FBDATA (window)->event_mask = event_mask;
|
||||
|
20
gtk/gtkdnd.c
20
gtk/gtkdnd.c
@ -2658,12 +2658,22 @@ gtk_drag_update (GtkDragSourceInfo *info,
|
||||
possible_actions,
|
||||
time))
|
||||
{
|
||||
if (info->last_event)
|
||||
gdk_event_free ((GdkEvent *)info->last_event);
|
||||
|
||||
info->last_event = gdk_event_copy ((GdkEvent *)event);
|
||||
if (info->last_event != event) /* Paranoia, should not happen */
|
||||
{
|
||||
if (info->last_event)
|
||||
gdk_event_free ((GdkEvent *)info->last_event);
|
||||
info->last_event = gdk_event_copy ((GdkEvent *)event);
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
if (info->last_event)
|
||||
{
|
||||
gdk_event_free ((GdkEvent *)info->last_event);
|
||||
info->last_event = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (dest_window)
|
||||
gdk_window_unref (dest_window);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user