forked from AuroraMiddleware/gtk
We really do need to include gdkfb.h in order to get the GDK_PARENT_ROOT()
* gtk/gtkcolorsel.c: We really do need to include gdkfb.h in order to get the GDK_PARENT_ROOT() macro to work. * gtk/gtkmarshal.list: Add NONE:STRING,POINTER * gdk/gdkwindow.c: Don't send expose events, or invalidate pieces of, windows that aren't shown. * gdk/linux-fb: Redraw-when-menu-hidden solved, plus a bunch of pointer grab stuff.
This commit is contained in:
parent
621639b754
commit
d9e05d7009
@ -1,3 +1,10 @@
|
|||||||
|
2000-07-31 Elliot Lee <sopwith@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkcolorsel.c: We really do need to include gdkfb.h in order to get the GDK_PARENT_ROOT() macro to work.
|
||||||
|
* gtk/gtkmarshal.list: Add NONE:STRING,POINTER
|
||||||
|
* gdk/gdkwindow.c: Don't send expose events, or invalidate pieces of, windows that aren't shown.
|
||||||
|
* gdk/linux-fb: Redraw-when-menu-hidden solved, plus a bunch of pointer grab stuff.
|
||||||
|
|
||||||
Mon Jul 31 13:53:16 BST 2000 Tony Gale <gale@gtk.org>
|
Mon Jul 31 13:53:16 BST 2000 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
* docs/gtkfaq.sgml docs/gtk-faq.sgml:
|
* docs/gtkfaq.sgml docs/gtk-faq.sgml:
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2000-07-31 Elliot Lee <sopwith@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkcolorsel.c: We really do need to include gdkfb.h in order to get the GDK_PARENT_ROOT() macro to work.
|
||||||
|
* gtk/gtkmarshal.list: Add NONE:STRING,POINTER
|
||||||
|
* gdk/gdkwindow.c: Don't send expose events, or invalidate pieces of, windows that aren't shown.
|
||||||
|
* gdk/linux-fb: Redraw-when-menu-hidden solved, plus a bunch of pointer grab stuff.
|
||||||
|
|
||||||
Mon Jul 31 13:53:16 BST 2000 Tony Gale <gale@gtk.org>
|
Mon Jul 31 13:53:16 BST 2000 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
* docs/gtkfaq.sgml docs/gtk-faq.sgml:
|
* docs/gtkfaq.sgml docs/gtk-faq.sgml:
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2000-07-31 Elliot Lee <sopwith@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkcolorsel.c: We really do need to include gdkfb.h in order to get the GDK_PARENT_ROOT() macro to work.
|
||||||
|
* gtk/gtkmarshal.list: Add NONE:STRING,POINTER
|
||||||
|
* gdk/gdkwindow.c: Don't send expose events, or invalidate pieces of, windows that aren't shown.
|
||||||
|
* gdk/linux-fb: Redraw-when-menu-hidden solved, plus a bunch of pointer grab stuff.
|
||||||
|
|
||||||
Mon Jul 31 13:53:16 BST 2000 Tony Gale <gale@gtk.org>
|
Mon Jul 31 13:53:16 BST 2000 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
* docs/gtkfaq.sgml docs/gtk-faq.sgml:
|
* docs/gtkfaq.sgml docs/gtk-faq.sgml:
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2000-07-31 Elliot Lee <sopwith@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkcolorsel.c: We really do need to include gdkfb.h in order to get the GDK_PARENT_ROOT() macro to work.
|
||||||
|
* gtk/gtkmarshal.list: Add NONE:STRING,POINTER
|
||||||
|
* gdk/gdkwindow.c: Don't send expose events, or invalidate pieces of, windows that aren't shown.
|
||||||
|
* gdk/linux-fb: Redraw-when-menu-hidden solved, plus a bunch of pointer grab stuff.
|
||||||
|
|
||||||
Mon Jul 31 13:53:16 BST 2000 Tony Gale <gale@gtk.org>
|
Mon Jul 31 13:53:16 BST 2000 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
* docs/gtkfaq.sgml docs/gtk-faq.sgml:
|
* docs/gtkfaq.sgml docs/gtk-faq.sgml:
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2000-07-31 Elliot Lee <sopwith@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkcolorsel.c: We really do need to include gdkfb.h in order to get the GDK_PARENT_ROOT() macro to work.
|
||||||
|
* gtk/gtkmarshal.list: Add NONE:STRING,POINTER
|
||||||
|
* gdk/gdkwindow.c: Don't send expose events, or invalidate pieces of, windows that aren't shown.
|
||||||
|
* gdk/linux-fb: Redraw-when-menu-hidden solved, plus a bunch of pointer grab stuff.
|
||||||
|
|
||||||
Mon Jul 31 13:53:16 BST 2000 Tony Gale <gale@gtk.org>
|
Mon Jul 31 13:53:16 BST 2000 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
* docs/gtkfaq.sgml docs/gtk-faq.sgml:
|
* docs/gtkfaq.sgml docs/gtk-faq.sgml:
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2000-07-31 Elliot Lee <sopwith@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkcolorsel.c: We really do need to include gdkfb.h in order to get the GDK_PARENT_ROOT() macro to work.
|
||||||
|
* gtk/gtkmarshal.list: Add NONE:STRING,POINTER
|
||||||
|
* gdk/gdkwindow.c: Don't send expose events, or invalidate pieces of, windows that aren't shown.
|
||||||
|
* gdk/linux-fb: Redraw-when-menu-hidden solved, plus a bunch of pointer grab stuff.
|
||||||
|
|
||||||
Mon Jul 31 13:53:16 BST 2000 Tony Gale <gale@gtk.org>
|
Mon Jul 31 13:53:16 BST 2000 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
* docs/gtkfaq.sgml docs/gtk-faq.sgml:
|
* docs/gtkfaq.sgml docs/gtk-faq.sgml:
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2000-07-31 Elliot Lee <sopwith@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkcolorsel.c: We really do need to include gdkfb.h in order to get the GDK_PARENT_ROOT() macro to work.
|
||||||
|
* gtk/gtkmarshal.list: Add NONE:STRING,POINTER
|
||||||
|
* gdk/gdkwindow.c: Don't send expose events, or invalidate pieces of, windows that aren't shown.
|
||||||
|
* gdk/linux-fb: Redraw-when-menu-hidden solved, plus a bunch of pointer grab stuff.
|
||||||
|
|
||||||
Mon Jul 31 13:53:16 BST 2000 Tony Gale <gale@gtk.org>
|
Mon Jul 31 13:53:16 BST 2000 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
* docs/gtkfaq.sgml docs/gtk-faq.sgml:
|
* docs/gtkfaq.sgml docs/gtk-faq.sgml:
|
||||||
|
@ -1413,9 +1413,15 @@ static guint update_idle = 0;
|
|||||||
static void
|
static void
|
||||||
gdk_window_process_updates_internal (GdkWindow *window)
|
gdk_window_process_updates_internal (GdkWindow *window)
|
||||||
{
|
{
|
||||||
GdkWindowObject *private = (GdkWindowObject *)window;
|
GdkWindowObject *private = (GdkWindowObject *)window, *cur;
|
||||||
gboolean save_region = FALSE;
|
gboolean save_region = FALSE;
|
||||||
|
|
||||||
|
for(cur = private; cur; cur = cur->parent)
|
||||||
|
{
|
||||||
|
if(!cur->mapped)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* If an update got queued during update processing, we can get a
|
/* If an update got queued during update processing, we can get a
|
||||||
* window in the update queue that has an empty update_area.
|
* window in the update queue that has an empty update_area.
|
||||||
* just ignore it.
|
* just ignore it.
|
||||||
@ -1529,6 +1535,9 @@ gdk_window_invalidate_rect (GdkWindow *window,
|
|||||||
if (GDK_WINDOW_DESTROYED (window))
|
if (GDK_WINDOW_DESTROYED (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (private->input_only || !private->mapped)
|
||||||
|
return;
|
||||||
|
|
||||||
if (!rect)
|
if (!rect)
|
||||||
{
|
{
|
||||||
window_rect.x = 0;
|
window_rect.x = 0;
|
||||||
@ -1602,7 +1611,7 @@ gdk_window_invalidate_region (GdkWindow *window,
|
|||||||
if (GDK_WINDOW_DESTROYED (window))
|
if (GDK_WINDOW_DESTROYED (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (private->input_only)
|
if (private->input_only || !private->mapped)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (private->update_area)
|
if (private->update_area)
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
## Process this file with automake to produce Makefile.in
|
## Process this file with automake to produce Makefile.in
|
||||||
|
|
||||||
|
libgdkincludedir = $(includedir)/gtk-2.0/gdk
|
||||||
|
libgdkfbincludedir = $(includedir)/gtk-2.0/gdk/linux-fb
|
||||||
|
|
||||||
INCLUDES = @STRIP_BEGIN@ \
|
INCLUDES = @STRIP_BEGIN@ \
|
||||||
-DG_LOG_DOMAIN=\"Gdk\" \
|
-DG_LOG_DOMAIN=\"Gdk\" \
|
||||||
-I$(top_srcdir) \
|
-I$(top_srcdir) \
|
||||||
@ -21,12 +24,14 @@ LDFLAGS = @STRIP_BEGIN@ \
|
|||||||
|
|
||||||
noinst_LTLIBRARIES = libgdk-linux-fb.la
|
noinst_LTLIBRARIES = libgdk-linux-fb.la
|
||||||
|
|
||||||
|
libgdkinclude_HEADERS= \
|
||||||
|
gdkfb.h
|
||||||
|
|
||||||
libgdk_linux_fb_la_SOURCES = \
|
libgdk_linux_fb_la_SOURCES = \
|
||||||
gdkcolor-fb.c \
|
gdkcolor-fb.c \
|
||||||
gdkcursor-fb.c \
|
gdkcursor-fb.c \
|
||||||
gdkdnd-fb.c \
|
gdkdnd-fb.c \
|
||||||
gdkdrawable-fb2.c \
|
gdkdrawable-fb2.c \
|
||||||
gdkfb.h \
|
|
||||||
gdkfont-fb.c \
|
gdkfont-fb.c \
|
||||||
gdkgc-fb.c \
|
gdkgc-fb.c \
|
||||||
gdkgeometry-fb.c \
|
gdkgeometry-fb.c \
|
||||||
|
@ -189,15 +189,25 @@ gdk_fb_clip_region(GdkDrawable *drawable, GdkGC *gc, gboolean do_clipping, gbool
|
|||||||
{
|
{
|
||||||
GdkRectangle draw_rect;
|
GdkRectangle draw_rect;
|
||||||
GdkRegion *real_clip_region, *tmpreg;
|
GdkRegion *real_clip_region, *tmpreg;
|
||||||
gboolean watchit = FALSE;
|
gboolean watchit = FALSE, skipit = FALSE;
|
||||||
|
|
||||||
g_assert(!GDK_IS_WINDOW(GDK_DRAWABLE_P(drawable)->wrapper) || !GDK_WINDOW_P(GDK_DRAWABLE_P(drawable)->wrapper)->input_only);
|
g_assert(!GDK_IS_WINDOW(GDK_DRAWABLE_P(drawable)->wrapper) || !GDK_WINDOW_P(GDK_DRAWABLE_P(drawable)->wrapper)->input_only);
|
||||||
|
|
||||||
draw_rect.x = GDK_DRAWABLE_FBDATA(drawable)->llim_x;
|
draw_rect.x = GDK_DRAWABLE_FBDATA(drawable)->llim_x;
|
||||||
draw_rect.y = GDK_DRAWABLE_FBDATA(drawable)->llim_y;
|
draw_rect.y = GDK_DRAWABLE_FBDATA(drawable)->llim_y;
|
||||||
draw_rect.width = GDK_DRAWABLE_FBDATA(drawable)->lim_x - draw_rect.x;
|
if(!GDK_IS_WINDOW(GDK_DRAWABLE_FBDATA(drawable)) || GDK_WINDOW_P(GDK_DRAWABLE_P(drawable)->wrapper)->mapped)
|
||||||
draw_rect.height = GDK_DRAWABLE_FBDATA(drawable)->lim_y - draw_rect.y;
|
{
|
||||||
|
draw_rect.width = GDK_DRAWABLE_FBDATA(drawable)->lim_x - draw_rect.x;
|
||||||
|
draw_rect.height = GDK_DRAWABLE_FBDATA(drawable)->lim_y - draw_rect.y;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
draw_rect.width = draw_rect.height = 0;
|
||||||
|
skipit = TRUE;
|
||||||
|
}
|
||||||
real_clip_region = gdk_region_rectangle(&draw_rect);
|
real_clip_region = gdk_region_rectangle(&draw_rect);
|
||||||
|
if(skipit)
|
||||||
|
return real_clip_region;
|
||||||
|
|
||||||
if(do_clipping && GDK_IS_WINDOW(GDK_DRAWABLE_FBDATA(drawable)->wrapper) && GDK_WINDOW_P(GDK_DRAWABLE_P(drawable)->wrapper)->mapped && !GDK_WINDOW_P(GDK_DRAWABLE_FBDATA(drawable)->wrapper)->input_only)
|
if(do_clipping && GDK_IS_WINDOW(GDK_DRAWABLE_FBDATA(drawable)->wrapper) && GDK_WINDOW_P(GDK_DRAWABLE_P(drawable)->wrapper)->mapped && !GDK_WINDOW_P(GDK_DRAWABLE_FBDATA(drawable)->wrapper)->input_only)
|
||||||
{
|
{
|
||||||
@ -547,8 +557,6 @@ gdk_fb_fill_spans(GdkDrawable *real_drawable,
|
|||||||
|
|
||||||
drawable = real_drawable;
|
drawable = real_drawable;
|
||||||
|
|
||||||
GDK_CHECK_IMPL(drawable);
|
|
||||||
|
|
||||||
if(GDK_IS_WINDOW(GDK_DRAWABLE_P(drawable)->wrapper) && !GDK_WINDOW_P(GDK_DRAWABLE_P(drawable)->wrapper)->mapped)
|
if(GDK_IS_WINDOW(GDK_DRAWABLE_P(drawable)->wrapper) && !GDK_WINDOW_P(GDK_DRAWABLE_P(drawable)->wrapper)->mapped)
|
||||||
return;
|
return;
|
||||||
if(GDK_IS_WINDOW(GDK_DRAWABLE_P(drawable)->wrapper) && GDK_WINDOW_P(GDK_DRAWABLE_P(drawable)->wrapper)->input_only)
|
if(GDK_IS_WINDOW(GDK_DRAWABLE_P(drawable)->wrapper) && GDK_WINDOW_P(GDK_DRAWABLE_P(drawable)->wrapper)->input_only)
|
||||||
@ -795,8 +803,6 @@ gdk_fb_drawing_context_init(GdkFBDrawingContext *dc,
|
|||||||
dc->bg_relto = GDK_DRAWABLE_P(drawable)->wrapper;
|
dc->bg_relto = GDK_DRAWABLE_P(drawable)->wrapper;
|
||||||
dc->draw_bg = draw_bg;
|
dc->draw_bg = draw_bg;
|
||||||
|
|
||||||
GDK_CHECK_IMPL(drawable);
|
|
||||||
|
|
||||||
if(GDK_IS_WINDOW(GDK_DRAWABLE_P(drawable)->wrapper))
|
if(GDK_IS_WINDOW(GDK_DRAWABLE_P(drawable)->wrapper))
|
||||||
{
|
{
|
||||||
dc->bgpm = GDK_WINDOW_P(GDK_DRAWABLE_P(drawable)->wrapper)->bg_pixmap;
|
dc->bgpm = GDK_WINDOW_P(GDK_DRAWABLE_P(drawable)->wrapper)->bg_pixmap;
|
||||||
@ -885,8 +891,6 @@ gdk_fb_draw_drawable_3 (GdkDrawable *drawable,
|
|||||||
int draw_direction = 1;
|
int draw_direction = 1;
|
||||||
gboolean do_quick_draw;
|
gboolean do_quick_draw;
|
||||||
|
|
||||||
GDK_CHECK_IMPL(drawable);
|
|
||||||
|
|
||||||
if(GDK_IS_WINDOW(GDK_DRAWABLE_P(drawable)->wrapper))
|
if(GDK_IS_WINDOW(GDK_DRAWABLE_P(drawable)->wrapper))
|
||||||
{
|
{
|
||||||
if(!GDK_WINDOW_P(GDK_DRAWABLE_P(drawable)->wrapper)->mapped)
|
if(!GDK_WINDOW_P(GDK_DRAWABLE_P(drawable)->wrapper)->mapped)
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
const gchar *gdk_progclass = "none";
|
const gchar *gdk_progclass = "none";
|
||||||
gboolean gdk_null_window_warnings = TRUE;
|
gboolean gdk_null_window_warnings = TRUE;
|
||||||
|
|
||||||
GdkWindow *_gdk_fb_pointer_grab_window, *_gdk_fb_keyboard_grab_window, *_gdk_fb_pointer_grab_confine = NULL;
|
GdkWindow *_gdk_fb_pointer_grab_window, *_gdk_fb_pointer_grab_window_events, *_gdk_fb_keyboard_grab_window, *_gdk_fb_pointer_grab_confine = NULL;
|
||||||
GdkEventMask _gdk_fb_pointer_grab_events, _gdk_fb_keyboard_grab_events;
|
GdkEventMask _gdk_fb_pointer_grab_events, _gdk_fb_keyboard_grab_events;
|
||||||
|
|
||||||
GdkFBWindow *gdk_root_window = NULL;
|
GdkFBWindow *gdk_root_window = NULL;
|
||||||
|
@ -97,8 +97,8 @@ send_button_event(PS2Mouse *mouse, guint button, gboolean press_event, time_t th
|
|||||||
GdkWindow *window;
|
GdkWindow *window;
|
||||||
int nbuttons = 0;
|
int nbuttons = 0;
|
||||||
|
|
||||||
if(_gdk_fb_pointer_grab_window)
|
if(_gdk_fb_pointer_grab_window_events)
|
||||||
window = _gdk_fb_pointer_grab_window;
|
window = _gdk_fb_pointer_grab_window_events;
|
||||||
else
|
else
|
||||||
window = gdk_window_get_pointer(NULL, NULL, NULL, NULL);
|
window = gdk_window_get_pointer(NULL, NULL, NULL, NULL);
|
||||||
|
|
||||||
@ -159,14 +159,14 @@ send_button_event(PS2Mouse *mouse, guint button, gboolean press_event, time_t th
|
|||||||
if(mouse->button3_pressed)
|
if(mouse->button3_pressed)
|
||||||
nbuttons++;
|
nbuttons++;
|
||||||
|
|
||||||
if(press_event && nbuttons == 1 && !_gdk_fb_pointer_grab_window)
|
if(press_event && nbuttons == 1)
|
||||||
{
|
{
|
||||||
gdk_pointer_grab(window, FALSE, gdk_window_get_events(window), NULL, NULL, GDK_CURRENT_TIME);
|
gdk_fb_pointer_grab(window, FALSE, gdk_window_get_events(window), NULL, NULL, GDK_CURRENT_TIME, TRUE);
|
||||||
mouse->click_grab = TRUE;
|
mouse->click_grab = TRUE;
|
||||||
}
|
}
|
||||||
else if(!press_event && nbuttons == 0 && mouse->click_grab)
|
else if(!press_event && nbuttons == 0 && mouse->click_grab)
|
||||||
{
|
{
|
||||||
gdk_pointer_ungrab(GDK_CURRENT_TIME);
|
gdk_fb_pointer_ungrab(GDK_CURRENT_TIME, TRUE);
|
||||||
mouse->click_grab = FALSE;
|
mouse->click_grab = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -368,7 +368,7 @@ move_pointer(PS2Mouse *mouse, GdkWindow *in_window)
|
|||||||
|
|
||||||
gdk_fb_cursor_hide();
|
gdk_fb_cursor_hide();
|
||||||
|
|
||||||
if(_gdk_fb_pointer_grab_cursor)
|
if(_gdk_fb_pointer_grab_window && _gdk_fb_pointer_grab_cursor)
|
||||||
the_cursor = _gdk_fb_pointer_grab_cursor;
|
the_cursor = _gdk_fb_pointer_grab_cursor;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -397,17 +397,19 @@ gdk_fb_cursor_reset(void)
|
|||||||
move_pointer(gdk_fb_ps2mouse, win);
|
move_pointer(gdk_fb_ps2mouse, win);
|
||||||
}
|
}
|
||||||
|
|
||||||
void gdk_fb_window_visibility_crossing(GdkWindow *window, gboolean is_show)
|
void gdk_fb_window_visibility_crossing(GdkWindow *window, gboolean is_show, gboolean is_grab)
|
||||||
{
|
{
|
||||||
gint winx, winy;
|
gint winx, winy;
|
||||||
GdkModifierType my_mask;
|
GdkModifierType my_mask;
|
||||||
|
|
||||||
gdk_input_ps2_get_mouseinfo(&winx, &winy, &my_mask);
|
gdk_input_ps2_get_mouseinfo(&winx, &winy, &my_mask);
|
||||||
|
|
||||||
if(winx >= GDK_DRAWABLE_IMPL_FBDATA(window)->llim_x
|
if(is_grab
|
||||||
&& winx < GDK_DRAWABLE_IMPL_FBDATA(window)->lim_x
|
|| (winx >= GDK_DRAWABLE_IMPL_FBDATA(window)->llim_x
|
||||||
&& winy >= GDK_DRAWABLE_IMPL_FBDATA(window)->llim_y
|
&& winx < GDK_DRAWABLE_IMPL_FBDATA(window)->lim_x
|
||||||
&& winy < GDK_DRAWABLE_IMPL_FBDATA(window)->lim_y)
|
&& winy >= GDK_DRAWABLE_IMPL_FBDATA(window)->llim_y
|
||||||
|
&& winy < GDK_DRAWABLE_IMPL_FBDATA(window)->lim_y)
|
||||||
|
)
|
||||||
{
|
{
|
||||||
GdkWindow *oldwin, *newwin, *curwin;
|
GdkWindow *oldwin, *newwin, *curwin;
|
||||||
GdkEvent *event;
|
GdkEvent *event;
|
||||||
@ -437,7 +439,15 @@ void gdk_fb_window_visibility_crossing(GdkWindow *window, gboolean is_show)
|
|||||||
event->crossing.y = winy - y_int;
|
event->crossing.y = winy - y_int;
|
||||||
event->crossing.x_root = winx;
|
event->crossing.x_root = winx;
|
||||||
event->crossing.y_root = winy;
|
event->crossing.y_root = winy;
|
||||||
event->crossing.mode = GDK_CROSSING_NORMAL;
|
if(is_grab)
|
||||||
|
{
|
||||||
|
if(is_show)
|
||||||
|
event->crossing.mode = GDK_CROSSING_GRAB;
|
||||||
|
else
|
||||||
|
event->crossing.mode = GDK_CROSSING_UNGRAB;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
event->crossing.mode = GDK_CROSSING_NORMAL;
|
||||||
event->crossing.detail = GDK_NOTIFY_UNKNOWN;
|
event->crossing.detail = GDK_NOTIFY_UNKNOWN;
|
||||||
event->crossing.focus = FALSE;
|
event->crossing.focus = FALSE;
|
||||||
event->crossing.state = my_mask;
|
event->crossing.state = my_mask;
|
||||||
@ -553,8 +563,8 @@ handle_input(GIOChannel *gioc, GIOCondition cond, gpointer data)
|
|||||||
|
|
||||||
win = gdk_window_get_pointer(NULL, NULL, NULL, NULL);
|
win = gdk_window_get_pointer(NULL, NULL, NULL, NULL);
|
||||||
move_pointer(mouse, win);
|
move_pointer(mouse, win);
|
||||||
if(_gdk_fb_pointer_grab_window)
|
if(_gdk_fb_pointer_grab_window_events)
|
||||||
win = _gdk_fb_pointer_grab_window;
|
win = _gdk_fb_pointer_grab_window_events;
|
||||||
|
|
||||||
gdk_window_get_origin(win, &x, &y);
|
gdk_window_get_origin(win, &x, &y);
|
||||||
x = mouse->x - x;
|
x = mouse->x - x;
|
||||||
|
@ -162,16 +162,42 @@ gdk_pointer_grab (GdkWindow * window,
|
|||||||
GdkWindow * confine_to,
|
GdkWindow * confine_to,
|
||||||
GdkCursor * cursor,
|
GdkCursor * cursor,
|
||||||
guint32 time)
|
guint32 time)
|
||||||
|
{
|
||||||
|
return gdk_fb_pointer_grab (window,
|
||||||
|
owner_events,
|
||||||
|
event_mask,
|
||||||
|
confine_to,
|
||||||
|
cursor,
|
||||||
|
time, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean _gdk_fb_pointer_implicit_grab = FALSE;
|
||||||
|
|
||||||
|
GdkGrabStatus
|
||||||
|
gdk_fb_pointer_grab (GdkWindow * window,
|
||||||
|
gint owner_events,
|
||||||
|
GdkEventMask event_mask,
|
||||||
|
GdkWindow * confine_to,
|
||||||
|
GdkCursor * cursor,
|
||||||
|
guint32 time,
|
||||||
|
gboolean implicit_grab)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (window != NULL, 0);
|
g_return_val_if_fail (window != NULL, 0);
|
||||||
g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
|
g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
|
||||||
g_return_val_if_fail (confine_to == NULL || GDK_IS_WINDOW (confine_to), 0);
|
g_return_val_if_fail (confine_to == NULL || GDK_IS_WINDOW (confine_to), 0);
|
||||||
|
|
||||||
if(_gdk_fb_pointer_grab_window)
|
if(_gdk_fb_pointer_grab_window)
|
||||||
gdk_pointer_ungrab(time);
|
{
|
||||||
|
if(implicit_grab && !_gdk_fb_pointer_implicit_grab)
|
||||||
|
return GDK_GRAB_ALREADY_GRABBED;
|
||||||
|
|
||||||
if(!owner_events)
|
gdk_pointer_ungrab(time);
|
||||||
_gdk_fb_pointer_grab_window = gdk_window_ref(window);
|
}
|
||||||
|
|
||||||
|
_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_confine = confine_to?gdk_window_ref(confine_to):NULL;
|
_gdk_fb_pointer_grab_confine = confine_to?gdk_window_ref(confine_to):NULL;
|
||||||
_gdk_fb_pointer_grab_events = event_mask;
|
_gdk_fb_pointer_grab_events = event_mask;
|
||||||
@ -179,6 +205,8 @@ gdk_pointer_grab (GdkWindow * window,
|
|||||||
|
|
||||||
if(cursor)
|
if(cursor)
|
||||||
gdk_fb_cursor_reset();
|
gdk_fb_cursor_reset();
|
||||||
|
|
||||||
|
gdk_fb_window_visibility_crossing(window, TRUE, TRUE);
|
||||||
|
|
||||||
return GDK_GRAB_SUCCESS;
|
return GDK_GRAB_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -200,12 +228,20 @@ gdk_pointer_grab (GdkWindow * window,
|
|||||||
|
|
||||||
void
|
void
|
||||||
gdk_pointer_ungrab (guint32 time)
|
gdk_pointer_ungrab (guint32 time)
|
||||||
|
{
|
||||||
|
gdk_fb_pointer_ungrab(time, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gdk_fb_pointer_ungrab (guint32 time, gboolean implicit_grab)
|
||||||
{
|
{
|
||||||
gboolean have_grab_cursor = _gdk_fb_pointer_grab_cursor && 1;
|
gboolean have_grab_cursor = _gdk_fb_pointer_grab_cursor && 1;
|
||||||
|
|
||||||
if(_gdk_fb_pointer_grab_window)
|
if(!_gdk_fb_pointer_grab_window)
|
||||||
gdk_window_unref(_gdk_fb_pointer_grab_window);
|
return;
|
||||||
_gdk_fb_pointer_grab_window = NULL;
|
|
||||||
|
if(implicit_grab && !_gdk_fb_pointer_implicit_grab)
|
||||||
|
return;
|
||||||
|
|
||||||
if(_gdk_fb_pointer_grab_confine)
|
if(_gdk_fb_pointer_grab_confine)
|
||||||
gdk_window_unref(_gdk_fb_pointer_grab_confine);
|
gdk_window_unref(_gdk_fb_pointer_grab_confine);
|
||||||
@ -217,6 +253,15 @@ gdk_pointer_ungrab (guint32 time)
|
|||||||
|
|
||||||
if(have_grab_cursor)
|
if(have_grab_cursor)
|
||||||
gdk_fb_cursor_reset();
|
gdk_fb_cursor_reset();
|
||||||
|
|
||||||
|
gdk_fb_window_visibility_crossing(_gdk_fb_pointer_grab_window, FALSE, TRUE);
|
||||||
|
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -496,8 +541,15 @@ gdk_event_make(GdkWindow *window, GdkEventType type, gboolean append_to_queue)
|
|||||||
GDK_SCROLL_MASK /* GDK_SCROLL = 31 */
|
GDK_SCROLL_MASK /* GDK_SCROLL = 31 */
|
||||||
};
|
};
|
||||||
guint evmask;
|
guint evmask;
|
||||||
|
|
||||||
evmask = GDK_WINDOW_IMPL_FBDATA(window)->event_mask;
|
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)
|
if(evmask & GDK_BUTTON_MOTION_MASK)
|
||||||
{
|
{
|
||||||
evmask |= GDK_BUTTON1_MOTION_MASK|GDK_BUTTON2_MOTION_MASK|GDK_BUTTON3_MOTION_MASK;
|
evmask |= GDK_BUTTON1_MOTION_MASK|GDK_BUTTON2_MOTION_MASK|GDK_BUTTON3_MOTION_MASK;
|
||||||
|
@ -271,7 +271,17 @@ void gdk_fb_draw_rectangle (GdkDrawable *drawable,
|
|||||||
void gdk_fb_fill_spans(GdkDrawable *real_drawable, GdkGC *gc, GdkRectangle *rects, int nrects);
|
void gdk_fb_fill_spans(GdkDrawable *real_drawable, GdkGC *gc, GdkRectangle *rects, int nrects);
|
||||||
GdkRegion *gdk_fb_clip_region(GdkDrawable *drawable, GdkGC *gc, gboolean do_clipping, gboolean do_children);
|
GdkRegion *gdk_fb_clip_region(GdkDrawable *drawable, GdkGC *gc, gboolean do_clipping, gboolean do_children);
|
||||||
|
|
||||||
extern GdkWindow *_gdk_fb_pointer_grab_window, *_gdk_fb_keyboard_grab_window, *_gdk_fb_pointer_grab_confine;
|
GdkGrabStatus
|
||||||
|
gdk_fb_pointer_grab (GdkWindow * window,
|
||||||
|
gint owner_events,
|
||||||
|
GdkEventMask event_mask,
|
||||||
|
GdkWindow * confine_to,
|
||||||
|
GdkCursor * cursor,
|
||||||
|
guint32 time,
|
||||||
|
gboolean implicit_grab);
|
||||||
|
void gdk_fb_pointer_ungrab (guint32 time, gboolean implicit_grab);
|
||||||
|
|
||||||
|
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;
|
extern GdkEventMask _gdk_fb_pointer_grab_events, _gdk_fb_keyboard_grab_events;
|
||||||
extern GdkCursor *_gdk_fb_pointer_grab_cursor;
|
extern GdkCursor *_gdk_fb_pointer_grab_cursor;
|
||||||
extern GdkFBDisplay *gdk_display;
|
extern GdkFBDisplay *gdk_display;
|
||||||
@ -289,7 +299,7 @@ void gdk_fb_cursor_hide(void);
|
|||||||
void gdk_fb_redraw_all(void);
|
void gdk_fb_redraw_all(void);
|
||||||
|
|
||||||
void gdk_input_ps2_get_mouseinfo(gint *x, gint *y, GdkModifierType *mask);
|
void gdk_input_ps2_get_mouseinfo(gint *x, gint *y, GdkModifierType *mask);
|
||||||
void gdk_fb_window_visibility_crossing(GdkWindow *window, gboolean is_show);
|
void gdk_fb_window_visibility_crossing(GdkWindow *window, gboolean is_show, gboolean is_grab);
|
||||||
|
|
||||||
#define PANGO_TYPE_FB_FONT (pango_fb_font_get_type ())
|
#define PANGO_TYPE_FB_FONT (pango_fb_font_get_type ())
|
||||||
#define PANGO_FB_FONT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FB_FONT, PangoFBFont))
|
#define PANGO_FB_FONT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FB_FONT, PangoFBFont))
|
||||||
|
@ -457,7 +457,7 @@ gdk_window_invalidate_region_clear(GdkWindow *window, GdkRegion *region)
|
|||||||
int i;
|
int i;
|
||||||
GdkWindowPrivate *private = GDK_WINDOW_P(window);
|
GdkWindowPrivate *private = GDK_WINDOW_P(window);
|
||||||
|
|
||||||
if (private->input_only)
|
if (private->input_only || !private->mapped)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(private->bg_pixmap != GDK_NO_BG)
|
if(private->bg_pixmap != GDK_NO_BG)
|
||||||
@ -513,7 +513,7 @@ gdk_window_invalidate_rect_clear(GdkWindow *window, GdkRectangle *rect)
|
|||||||
{
|
{
|
||||||
GdkWindowPrivate *private = GDK_WINDOW_P(window);
|
GdkWindowPrivate *private = GDK_WINDOW_P(window);
|
||||||
|
|
||||||
if (private->input_only)
|
if (private->input_only || !private->mapped)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(GDK_WINDOW_P(window)->bg_pixmap != GDK_NO_BG)
|
if(GDK_WINDOW_P(window)->bg_pixmap != GDK_NO_BG)
|
||||||
@ -562,7 +562,7 @@ gdk_fb_redraw_all(void)
|
|||||||
r.x = r.y = 0;
|
r.x = r.y = 0;
|
||||||
r.width = GDK_DRAWABLE_IMPL_FBDATA(gdk_parent_root)->width;
|
r.width = GDK_DRAWABLE_IMPL_FBDATA(gdk_parent_root)->width;
|
||||||
r.height = GDK_DRAWABLE_IMPL_FBDATA(gdk_parent_root)->height;
|
r.height = GDK_DRAWABLE_IMPL_FBDATA(gdk_parent_root)->height;
|
||||||
gdk_window_invalidate_rect(gdk_parent_root, &r, TRUE);
|
gdk_window_invalidate_rect_clear(gdk_parent_root, &r);
|
||||||
gdk_window_process_all_updates();
|
gdk_window_process_all_updates();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -588,7 +588,7 @@ gdk_window_show (GdkWindow *window)
|
|||||||
send_map_events(private, TRUE);
|
send_map_events(private, TRUE);
|
||||||
|
|
||||||
private->mapped = FALSE; /* a hack, ayup, to make gdk_window_get_pointer get the other window */
|
private->mapped = FALSE; /* a hack, ayup, to make gdk_window_get_pointer get the other window */
|
||||||
gdk_fb_window_visibility_crossing(window, TRUE);
|
gdk_fb_window_visibility_crossing(window, TRUE, FALSE);
|
||||||
private->mapped = TRUE;
|
private->mapped = TRUE;
|
||||||
|
|
||||||
if(private->input_only)
|
if(private->input_only)
|
||||||
@ -631,12 +631,16 @@ gdk_window_hide (GdkWindow *window)
|
|||||||
gdk_fb_drawable_clear(gdk_parent_root);
|
gdk_fb_drawable_clear(gdk_parent_root);
|
||||||
|
|
||||||
if(all_parents_shown((GdkWindowPrivate *)private->parent))
|
if(all_parents_shown((GdkWindowPrivate *)private->parent))
|
||||||
gdk_fb_window_visibility_crossing(window, FALSE);
|
gdk_fb_window_visibility_crossing(window, FALSE, FALSE);
|
||||||
|
|
||||||
do_hide = gdk_fb_cursor_need_hide(&r);
|
do_hide = gdk_fb_cursor_need_hide(&r);
|
||||||
|
|
||||||
if(do_hide)
|
if(do_hide)
|
||||||
gdk_fb_cursor_hide();
|
gdk_fb_cursor_hide();
|
||||||
|
if(window == _gdk_fb_pointer_grab_window)
|
||||||
|
gdk_pointer_ungrab(GDK_CURRENT_TIME);
|
||||||
|
if(window == _gdk_fb_keyboard_grab_window)
|
||||||
|
gdk_keyboard_ungrab(GDK_CURRENT_TIME);
|
||||||
gdk_window_invalidate_rect_clear(gdk_parent_root, &r);
|
gdk_window_invalidate_rect_clear(gdk_parent_root, &r);
|
||||||
if(do_hide)
|
if(do_hide)
|
||||||
gdk_fb_cursor_unhide();
|
gdk_fb_cursor_unhide();
|
||||||
|
@ -31,6 +31,8 @@
|
|||||||
#include "x11/gdkx.h"
|
#include "x11/gdkx.h"
|
||||||
#elif defined (GDK_WINDOWING_WIN32)
|
#elif defined (GDK_WINDOWING_WIN32)
|
||||||
#include "win32/gdkwin32.h"
|
#include "win32/gdkwin32.h"
|
||||||
|
#elif defined (GDK_WINDOWING_FB)
|
||||||
|
#include "linux-fb/gdkfb.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "gdk/gdkkeysyms.h"
|
#include "gdk/gdkkeysyms.h"
|
||||||
|
@ -32,6 +32,7 @@ NONE:POINTER,UINT,UINT
|
|||||||
NONE:POINTER,UINT,UINT
|
NONE:POINTER,UINT,UINT
|
||||||
NONE:STRING
|
NONE:STRING
|
||||||
NONE:STRING,INT,POINTER
|
NONE:STRING,INT,POINTER
|
||||||
|
NONE:STRING,POINTER
|
||||||
NONE:UINT
|
NONE:UINT
|
||||||
NONE:UINT,POINTER,UINT,ENUM,ENUM,POINTER
|
NONE:UINT,POINTER,UINT,ENUM,ENUM,POINTER
|
||||||
NONE:UINT,POINTER,UINT,UINT,ENUM
|
NONE:UINT,POINTER,UINT,UINT,ENUM
|
||||||
|
@ -32,6 +32,7 @@ NONE:POINTER,UINT,UINT
|
|||||||
NONE:POINTER,UINT,UINT
|
NONE:POINTER,UINT,UINT
|
||||||
NONE:STRING
|
NONE:STRING
|
||||||
NONE:STRING,INT,POINTER
|
NONE:STRING,INT,POINTER
|
||||||
|
NONE:STRING,POINTER
|
||||||
NONE:UINT
|
NONE:UINT
|
||||||
NONE:UINT,POINTER,UINT,ENUM,ENUM,POINTER
|
NONE:UINT,POINTER,UINT,ENUM,ENUM,POINTER
|
||||||
NONE:UINT,POINTER,UINT,UINT,ENUM
|
NONE:UINT,POINTER,UINT,UINT,ENUM
|
||||||
|
Loading…
Reference in New Issue
Block a user