forked from AuroraMiddleware/gtk
New file containing the abstracted keyboard driver. Most code taken from
2000-12-08 Alexander Larsson <alla@lysator.liu.se> * gdk/linux-fb/gdkkeyboard-fb.c: New file containing the abstracted keyboard driver. Most code taken from gdkinput-ps2.c * gdk/linux-fb/gdkinput-ps2.c: Removed file. * gdk/linux-fb/Makefile.am: Added gdkkeyboard-fb.c, removed gdkinput-ps2.c. * gdk/linux-fb/gdkcolor-fb.c: display->fb was renamed to display->fb_fd. * gdk/linux-fb/gdkcursor-fb.c: gdk_mouse_get_info -> gdk_fb_mouse_get_info * gdk/linux-fb/gdkinput.c: Moved gdk_input_init here from gdkinput-ps2.c * gdk/linux-fb/gdkmain-fb.c: display->fb was renamed to display->fb_fd. Now the tty and the console is opened here instead of in the keyboard driver. Also check GDK_VT to see what tty to open. Move gdk_beep () here from gdkinput-ps2.c gdk_mouse_get_info -> gdk_fb_mouse_get_info * gdk/linux-fb/gdkmouse-fb.c: Add header. gdk_mouse_get_info -> gdk_fb_mouse_get_info Return correct keyboard modifiers. GDK_MOUSETYPE -> GDK_MOUSE_TYPE for consistancy * gdk/linux-fb/gdkprivate-fb.h: Add tty and vt info to display. Add orignal modeinfo storage to display Update global functions * gdk/linux-fb/gdkwindow-fb.c: Added gdk_fb_window_find_focus(). gdk_mouse_get_info -> gdk_fb_mouse_get_info
This commit is contained in:
parent
73773718b0
commit
6d0c6b792e
44
ChangeLog
44
ChangeLog
@ -1,3 +1,47 @@
|
||||
2000-12-08 Alexander Larsson <alla@lysator.liu.se>
|
||||
|
||||
* gdk/linux-fb/gdkkeyboard-fb.c:
|
||||
New file containing the abstracted keyboard driver. Most code
|
||||
taken from gdkinput-ps2.c
|
||||
|
||||
* gdk/linux-fb/gdkinput-ps2.c:
|
||||
Removed file.
|
||||
|
||||
* gdk/linux-fb/Makefile.am:
|
||||
Added gdkkeyboard-fb.c, removed gdkinput-ps2.c.
|
||||
|
||||
* gdk/linux-fb/gdkcolor-fb.c:
|
||||
display->fb was renamed to display->fb_fd.
|
||||
|
||||
* gdk/linux-fb/gdkcursor-fb.c:
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
* gdk/linux-fb/gdkinput.c:
|
||||
Moved gdk_input_init here from gdkinput-ps2.c
|
||||
|
||||
* gdk/linux-fb/gdkmain-fb.c:
|
||||
display->fb was renamed to display->fb_fd.
|
||||
Now the tty and the console is opened here instead
|
||||
of in the keyboard driver. Also check GDK_VT to see what
|
||||
tty to open.
|
||||
Move gdk_beep () here from gdkinput-ps2.c
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
* gdk/linux-fb/gdkmouse-fb.c:
|
||||
Add header.
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
Return correct keyboard modifiers.
|
||||
GDK_MOUSETYPE -> GDK_MOUSE_TYPE for consistancy
|
||||
|
||||
* gdk/linux-fb/gdkprivate-fb.h:
|
||||
Add tty and vt info to display.
|
||||
Add orignal modeinfo storage to display
|
||||
Update global functions
|
||||
|
||||
* gdk/linux-fb/gdkwindow-fb.c:
|
||||
Added gdk_fb_window_find_focus().
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
2000-12-07 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gdk/x11/gdkkeys-x11.c (gdk_keymap_lookup_key): fix name of
|
||||
|
@ -1,3 +1,47 @@
|
||||
2000-12-08 Alexander Larsson <alla@lysator.liu.se>
|
||||
|
||||
* gdk/linux-fb/gdkkeyboard-fb.c:
|
||||
New file containing the abstracted keyboard driver. Most code
|
||||
taken from gdkinput-ps2.c
|
||||
|
||||
* gdk/linux-fb/gdkinput-ps2.c:
|
||||
Removed file.
|
||||
|
||||
* gdk/linux-fb/Makefile.am:
|
||||
Added gdkkeyboard-fb.c, removed gdkinput-ps2.c.
|
||||
|
||||
* gdk/linux-fb/gdkcolor-fb.c:
|
||||
display->fb was renamed to display->fb_fd.
|
||||
|
||||
* gdk/linux-fb/gdkcursor-fb.c:
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
* gdk/linux-fb/gdkinput.c:
|
||||
Moved gdk_input_init here from gdkinput-ps2.c
|
||||
|
||||
* gdk/linux-fb/gdkmain-fb.c:
|
||||
display->fb was renamed to display->fb_fd.
|
||||
Now the tty and the console is opened here instead
|
||||
of in the keyboard driver. Also check GDK_VT to see what
|
||||
tty to open.
|
||||
Move gdk_beep () here from gdkinput-ps2.c
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
* gdk/linux-fb/gdkmouse-fb.c:
|
||||
Add header.
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
Return correct keyboard modifiers.
|
||||
GDK_MOUSETYPE -> GDK_MOUSE_TYPE for consistancy
|
||||
|
||||
* gdk/linux-fb/gdkprivate-fb.h:
|
||||
Add tty and vt info to display.
|
||||
Add orignal modeinfo storage to display
|
||||
Update global functions
|
||||
|
||||
* gdk/linux-fb/gdkwindow-fb.c:
|
||||
Added gdk_fb_window_find_focus().
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
2000-12-07 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gdk/x11/gdkkeys-x11.c (gdk_keymap_lookup_key): fix name of
|
||||
|
@ -1,3 +1,47 @@
|
||||
2000-12-08 Alexander Larsson <alla@lysator.liu.se>
|
||||
|
||||
* gdk/linux-fb/gdkkeyboard-fb.c:
|
||||
New file containing the abstracted keyboard driver. Most code
|
||||
taken from gdkinput-ps2.c
|
||||
|
||||
* gdk/linux-fb/gdkinput-ps2.c:
|
||||
Removed file.
|
||||
|
||||
* gdk/linux-fb/Makefile.am:
|
||||
Added gdkkeyboard-fb.c, removed gdkinput-ps2.c.
|
||||
|
||||
* gdk/linux-fb/gdkcolor-fb.c:
|
||||
display->fb was renamed to display->fb_fd.
|
||||
|
||||
* gdk/linux-fb/gdkcursor-fb.c:
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
* gdk/linux-fb/gdkinput.c:
|
||||
Moved gdk_input_init here from gdkinput-ps2.c
|
||||
|
||||
* gdk/linux-fb/gdkmain-fb.c:
|
||||
display->fb was renamed to display->fb_fd.
|
||||
Now the tty and the console is opened here instead
|
||||
of in the keyboard driver. Also check GDK_VT to see what
|
||||
tty to open.
|
||||
Move gdk_beep () here from gdkinput-ps2.c
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
* gdk/linux-fb/gdkmouse-fb.c:
|
||||
Add header.
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
Return correct keyboard modifiers.
|
||||
GDK_MOUSETYPE -> GDK_MOUSE_TYPE for consistancy
|
||||
|
||||
* gdk/linux-fb/gdkprivate-fb.h:
|
||||
Add tty and vt info to display.
|
||||
Add orignal modeinfo storage to display
|
||||
Update global functions
|
||||
|
||||
* gdk/linux-fb/gdkwindow-fb.c:
|
||||
Added gdk_fb_window_find_focus().
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
2000-12-07 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gdk/x11/gdkkeys-x11.c (gdk_keymap_lookup_key): fix name of
|
||||
|
@ -1,3 +1,47 @@
|
||||
2000-12-08 Alexander Larsson <alla@lysator.liu.se>
|
||||
|
||||
* gdk/linux-fb/gdkkeyboard-fb.c:
|
||||
New file containing the abstracted keyboard driver. Most code
|
||||
taken from gdkinput-ps2.c
|
||||
|
||||
* gdk/linux-fb/gdkinput-ps2.c:
|
||||
Removed file.
|
||||
|
||||
* gdk/linux-fb/Makefile.am:
|
||||
Added gdkkeyboard-fb.c, removed gdkinput-ps2.c.
|
||||
|
||||
* gdk/linux-fb/gdkcolor-fb.c:
|
||||
display->fb was renamed to display->fb_fd.
|
||||
|
||||
* gdk/linux-fb/gdkcursor-fb.c:
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
* gdk/linux-fb/gdkinput.c:
|
||||
Moved gdk_input_init here from gdkinput-ps2.c
|
||||
|
||||
* gdk/linux-fb/gdkmain-fb.c:
|
||||
display->fb was renamed to display->fb_fd.
|
||||
Now the tty and the console is opened here instead
|
||||
of in the keyboard driver. Also check GDK_VT to see what
|
||||
tty to open.
|
||||
Move gdk_beep () here from gdkinput-ps2.c
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
* gdk/linux-fb/gdkmouse-fb.c:
|
||||
Add header.
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
Return correct keyboard modifiers.
|
||||
GDK_MOUSETYPE -> GDK_MOUSE_TYPE for consistancy
|
||||
|
||||
* gdk/linux-fb/gdkprivate-fb.h:
|
||||
Add tty and vt info to display.
|
||||
Add orignal modeinfo storage to display
|
||||
Update global functions
|
||||
|
||||
* gdk/linux-fb/gdkwindow-fb.c:
|
||||
Added gdk_fb_window_find_focus().
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
2000-12-07 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gdk/x11/gdkkeys-x11.c (gdk_keymap_lookup_key): fix name of
|
||||
|
@ -1,3 +1,47 @@
|
||||
2000-12-08 Alexander Larsson <alla@lysator.liu.se>
|
||||
|
||||
* gdk/linux-fb/gdkkeyboard-fb.c:
|
||||
New file containing the abstracted keyboard driver. Most code
|
||||
taken from gdkinput-ps2.c
|
||||
|
||||
* gdk/linux-fb/gdkinput-ps2.c:
|
||||
Removed file.
|
||||
|
||||
* gdk/linux-fb/Makefile.am:
|
||||
Added gdkkeyboard-fb.c, removed gdkinput-ps2.c.
|
||||
|
||||
* gdk/linux-fb/gdkcolor-fb.c:
|
||||
display->fb was renamed to display->fb_fd.
|
||||
|
||||
* gdk/linux-fb/gdkcursor-fb.c:
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
* gdk/linux-fb/gdkinput.c:
|
||||
Moved gdk_input_init here from gdkinput-ps2.c
|
||||
|
||||
* gdk/linux-fb/gdkmain-fb.c:
|
||||
display->fb was renamed to display->fb_fd.
|
||||
Now the tty and the console is opened here instead
|
||||
of in the keyboard driver. Also check GDK_VT to see what
|
||||
tty to open.
|
||||
Move gdk_beep () here from gdkinput-ps2.c
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
* gdk/linux-fb/gdkmouse-fb.c:
|
||||
Add header.
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
Return correct keyboard modifiers.
|
||||
GDK_MOUSETYPE -> GDK_MOUSE_TYPE for consistancy
|
||||
|
||||
* gdk/linux-fb/gdkprivate-fb.h:
|
||||
Add tty and vt info to display.
|
||||
Add orignal modeinfo storage to display
|
||||
Update global functions
|
||||
|
||||
* gdk/linux-fb/gdkwindow-fb.c:
|
||||
Added gdk_fb_window_find_focus().
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
2000-12-07 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gdk/x11/gdkkeys-x11.c (gdk_keymap_lookup_key): fix name of
|
||||
|
@ -1,3 +1,47 @@
|
||||
2000-12-08 Alexander Larsson <alla@lysator.liu.se>
|
||||
|
||||
* gdk/linux-fb/gdkkeyboard-fb.c:
|
||||
New file containing the abstracted keyboard driver. Most code
|
||||
taken from gdkinput-ps2.c
|
||||
|
||||
* gdk/linux-fb/gdkinput-ps2.c:
|
||||
Removed file.
|
||||
|
||||
* gdk/linux-fb/Makefile.am:
|
||||
Added gdkkeyboard-fb.c, removed gdkinput-ps2.c.
|
||||
|
||||
* gdk/linux-fb/gdkcolor-fb.c:
|
||||
display->fb was renamed to display->fb_fd.
|
||||
|
||||
* gdk/linux-fb/gdkcursor-fb.c:
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
* gdk/linux-fb/gdkinput.c:
|
||||
Moved gdk_input_init here from gdkinput-ps2.c
|
||||
|
||||
* gdk/linux-fb/gdkmain-fb.c:
|
||||
display->fb was renamed to display->fb_fd.
|
||||
Now the tty and the console is opened here instead
|
||||
of in the keyboard driver. Also check GDK_VT to see what
|
||||
tty to open.
|
||||
Move gdk_beep () here from gdkinput-ps2.c
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
* gdk/linux-fb/gdkmouse-fb.c:
|
||||
Add header.
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
Return correct keyboard modifiers.
|
||||
GDK_MOUSETYPE -> GDK_MOUSE_TYPE for consistancy
|
||||
|
||||
* gdk/linux-fb/gdkprivate-fb.h:
|
||||
Add tty and vt info to display.
|
||||
Add orignal modeinfo storage to display
|
||||
Update global functions
|
||||
|
||||
* gdk/linux-fb/gdkwindow-fb.c:
|
||||
Added gdk_fb_window_find_focus().
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
2000-12-07 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gdk/x11/gdkkeys-x11.c (gdk_keymap_lookup_key): fix name of
|
||||
|
@ -1,3 +1,47 @@
|
||||
2000-12-08 Alexander Larsson <alla@lysator.liu.se>
|
||||
|
||||
* gdk/linux-fb/gdkkeyboard-fb.c:
|
||||
New file containing the abstracted keyboard driver. Most code
|
||||
taken from gdkinput-ps2.c
|
||||
|
||||
* gdk/linux-fb/gdkinput-ps2.c:
|
||||
Removed file.
|
||||
|
||||
* gdk/linux-fb/Makefile.am:
|
||||
Added gdkkeyboard-fb.c, removed gdkinput-ps2.c.
|
||||
|
||||
* gdk/linux-fb/gdkcolor-fb.c:
|
||||
display->fb was renamed to display->fb_fd.
|
||||
|
||||
* gdk/linux-fb/gdkcursor-fb.c:
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
* gdk/linux-fb/gdkinput.c:
|
||||
Moved gdk_input_init here from gdkinput-ps2.c
|
||||
|
||||
* gdk/linux-fb/gdkmain-fb.c:
|
||||
display->fb was renamed to display->fb_fd.
|
||||
Now the tty and the console is opened here instead
|
||||
of in the keyboard driver. Also check GDK_VT to see what
|
||||
tty to open.
|
||||
Move gdk_beep () here from gdkinput-ps2.c
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
* gdk/linux-fb/gdkmouse-fb.c:
|
||||
Add header.
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
Return correct keyboard modifiers.
|
||||
GDK_MOUSETYPE -> GDK_MOUSE_TYPE for consistancy
|
||||
|
||||
* gdk/linux-fb/gdkprivate-fb.h:
|
||||
Add tty and vt info to display.
|
||||
Add orignal modeinfo storage to display
|
||||
Update global functions
|
||||
|
||||
* gdk/linux-fb/gdkwindow-fb.c:
|
||||
Added gdk_fb_window_find_focus().
|
||||
gdk_mouse_get_info -> gdk_fb_mouse_get_info
|
||||
|
||||
2000-12-07 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* gdk/x11/gdkkeys-x11.c (gdk_keymap_lookup_key): fix name of
|
||||
|
@ -49,7 +49,7 @@ libgdk_linux_fb_la_SOURCES = \
|
||||
gdkwindow-fb.c \
|
||||
gdkprivate-fb.h \
|
||||
gdkinputprivate.h \
|
||||
gdkinput-ps2.c \
|
||||
gdkkeyboard-fb.c \
|
||||
gdkmouse-fb.c \
|
||||
gdkevents-fb.c \
|
||||
gdkrender-fb.c \
|
||||
|
@ -155,7 +155,7 @@ gdk_colormap_new (GdkVisual *visual,
|
||||
fbc.green = green;
|
||||
fbc.blue = blue;
|
||||
|
||||
if (ioctl (fbd->fd, FBIOGETCMAP, &fbc))
|
||||
if (ioctl (fbd->fb_fd, FBIOGETCMAP, &fbc))
|
||||
g_error("ioctl(FBIOGETCMAP) failed");
|
||||
|
||||
for (i = 0; i < colormap->size; i++)
|
||||
@ -351,7 +351,7 @@ gdk_colormap_change (GdkColormap *colormap,
|
||||
colormap->colors[i].green +
|
||||
colormap->colors[i].blue)/3;
|
||||
}
|
||||
ioctl (gdk_display->fd, FBIOPUTCMAP, &fbc);
|
||||
ioctl (gdk_display->fb_fd, FBIOPUTCMAP, &fbc);
|
||||
break;
|
||||
|
||||
case GDK_VISUAL_PSEUDO_COLOR:
|
||||
@ -361,7 +361,7 @@ gdk_colormap_change (GdkColormap *colormap,
|
||||
green[i] = colormap->colors[i].green;
|
||||
blue[i] = colormap->colors[i].blue;
|
||||
}
|
||||
ioctl (gdk_display->fd, FBIOPUTCMAP, &fbc);
|
||||
ioctl (gdk_display->fb_fd, FBIOPUTCMAP, &fbc);
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -565,7 +565,7 @@ gdk_colormap_alloc1 (GdkColormap *colormap,
|
||||
fbc.green = &green;
|
||||
fbc.blue = &blue;
|
||||
|
||||
ioctl (gdk_display->fd, FBIOPUTCMAP, &fbc);
|
||||
ioctl (gdk_display->fb_fd, FBIOPUTCMAP, &fbc);
|
||||
|
||||
ret->pixel = i;
|
||||
colormap->colors[ret->pixel] = *ret;
|
||||
@ -785,7 +785,7 @@ gdk_color_change (GdkColormap *colormap,
|
||||
fbc.red = &color->red;
|
||||
fbc.green = &color->green;
|
||||
fbc.blue = &color->blue;
|
||||
ioctl (gdk_display->fd, FBIOPUTCMAP, &fbc);
|
||||
ioctl (gdk_display->fb_fd, FBIOPUTCMAP, &fbc);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -517,6 +517,6 @@ gdk_fb_cursor_reset(void)
|
||||
GdkWindow *win = gdk_window_at_pointer (NULL, NULL);
|
||||
gint x, y;
|
||||
|
||||
gdk_mouse_get_info (&x, &y, NULL);
|
||||
gdk_fb_mouse_get_info (&x, &y, NULL);
|
||||
gdk_fb_cursor_move (x, y, win);
|
||||
}
|
||||
|
@ -1,781 +0,0 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <gdk/gdk.h>
|
||||
#include <gdk/gdkinternals.h>
|
||||
#include "gdkinputprivate.h"
|
||||
#include "gdkkeysyms.h"
|
||||
#include "gdkprivate-fb.h"
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
#include <time.h>
|
||||
#include <termios.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/vt.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/kd.h>
|
||||
#include <sys/types.h>
|
||||
#include <ctype.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include <linux/fb.h>
|
||||
|
||||
/* Two minutes */
|
||||
#define BLANKING_TIMEOUT 120*1000
|
||||
|
||||
/*
|
||||
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
||||
* file for a list of people on the GTK+ Team. See the ChangeLog
|
||||
* files for a list of changes. These files are distributed with
|
||||
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
gint fd, fd_tag, consfd;
|
||||
|
||||
int vtnum, prev_vtnum;
|
||||
guint modifier_state;
|
||||
gboolean caps_lock : 1;
|
||||
} Keyboard;
|
||||
|
||||
static guint blanking_timer = 0;
|
||||
|
||||
static Keyboard * tty_keyboard_open(void);
|
||||
|
||||
static Keyboard *keyboard = NULL;
|
||||
|
||||
#ifndef VESA_NO_BLANKING
|
||||
#define VESA_NO_BLANKING 0
|
||||
#define VESA_VSYNC_SUSPEND 1
|
||||
#define VESA_HSYNC_SUSPEND 2
|
||||
#define VESA_POWERDOWN 3
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
static gboolean
|
||||
input_activity_timeout(gpointer p)
|
||||
{
|
||||
blanking_timer = 0;
|
||||
ioctl(gdk_display->fd, FBIOBLANK, VESA_POWERDOWN);
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* This is all very broken :( */
|
||||
static void
|
||||
input_activity (void)
|
||||
{
|
||||
#if 0
|
||||
if (blanking_timer)
|
||||
g_source_remove (blanking_timer);
|
||||
else
|
||||
gdk_fb_redraw_all ();
|
||||
|
||||
blanking_timer = g_timeout_add (BLANKING_TIMEOUT, input_activity_timeout, NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
gdk_input_init (void)
|
||||
{
|
||||
gdk_input_devices = g_list_append (NULL, gdk_core_pointer);
|
||||
|
||||
gdk_input_ignore_core = FALSE;
|
||||
|
||||
gdk_fb_mouse_open ();
|
||||
}
|
||||
|
||||
GdkWindow *
|
||||
gdk_window_find_focus (void)
|
||||
{
|
||||
if (_gdk_fb_keyboard_grab_window)
|
||||
return _gdk_fb_keyboard_grab_window;
|
||||
else if (GDK_WINDOW_P (gdk_parent_root)->children)
|
||||
{
|
||||
GList *item;
|
||||
for (item = GDK_WINDOW_P (gdk_parent_root)->children; item; item = item->next)
|
||||
{
|
||||
GdkWindowObject *priv = item->data;
|
||||
|
||||
if (priv->mapped)
|
||||
return item->data;
|
||||
}
|
||||
}
|
||||
|
||||
return gdk_parent_root;
|
||||
}
|
||||
|
||||
/* Bogus implementation */
|
||||
gboolean
|
||||
gdk_keymap_get_entries_for_keycode (GdkKeymap *keymap,
|
||||
guint hardware_keycode,
|
||||
GdkKeymapKey **keys,
|
||||
guint **keyvals,
|
||||
gint *n_entries)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static const guint trans_table[256][3] = {
|
||||
/* 0x00 */
|
||||
{0, 0, 0},
|
||||
{GDK_Escape, 0, 0},
|
||||
{'1', '!', 0},
|
||||
{'2', '@', 0},
|
||||
{'3', '#', 0},
|
||||
{'4', '$', 0},
|
||||
{'5', '%', 0},
|
||||
{'6', '^', 0},
|
||||
{'7', '&', 0},
|
||||
{'8', '*', 0},
|
||||
{'9', '(', 0},
|
||||
{'0', ')', 0},
|
||||
{'-', '_', 0},
|
||||
{'=', '+', 0},
|
||||
{GDK_BackSpace, 0, 0},
|
||||
{GDK_Tab, 0, 0},
|
||||
|
||||
/* 0x10 */
|
||||
{'q', 'Q', 0},
|
||||
{'w', 'W', 0},
|
||||
{'e', 'E', 0},
|
||||
{'r', 'R', 0},
|
||||
{'t', 'T', 0},
|
||||
{'y', 'Y', 0},
|
||||
{'u', 'U', 0},
|
||||
{'i', 'I', 0},
|
||||
{'o', 'O', 0},
|
||||
{'p', 'P', 0},
|
||||
{'[', '{', 0},
|
||||
{']', '}', 0},
|
||||
{GDK_Return, 0, 0},
|
||||
{GDK_Control_L, 0, 0}, /* mod */
|
||||
{'a', 'A', 0},
|
||||
{'s', 'S', 0},
|
||||
|
||||
/* 0x20 */
|
||||
{'d', 'D', 0},
|
||||
{'f', 'F', 0},
|
||||
{'g', 'G', 0},
|
||||
{'h', 'H', 0},
|
||||
{'j', 'J', 0},
|
||||
{'k', 'K', 0},
|
||||
{'l', 'L', 0},
|
||||
{';', ':', 0},
|
||||
{'\'', '"', 0},
|
||||
{'`', '~', 0},
|
||||
{GDK_Shift_L, 0, 0}, /* mod */
|
||||
{'\\', 0, 0},
|
||||
{'z', 0, 0},
|
||||
{'x', 0, 0},
|
||||
{'c', 0, 0},
|
||||
|
||||
{'v', 'V', 0},
|
||||
|
||||
/* 0x30 */
|
||||
{'b', 'B', 0},
|
||||
{'n', 'N', 0},
|
||||
{'m', 'M', 0},
|
||||
{',', 0, 0},
|
||||
{'.', 0, 0},
|
||||
{'/', 0, 0},
|
||||
{GDK_Shift_R, 0, 0}, /* mod */
|
||||
{GDK_KP_Multiply, 0, 0},
|
||||
{0, 0, 0},
|
||||
{GDK_space, 0, 0},
|
||||
{0, 0, 0},
|
||||
{GDK_F1, 0, 0},
|
||||
{GDK_F2, 0, 0},
|
||||
{GDK_F3, 0, 0},
|
||||
{GDK_F4, 0, 0},
|
||||
{GDK_F5, 0, 0},
|
||||
|
||||
/* 0x40 */
|
||||
{GDK_F6, 0, 0},
|
||||
{GDK_F7, 0, 0},
|
||||
{GDK_F8, 0, 0},
|
||||
{GDK_F9, 0, 0},
|
||||
{GDK_F10, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{'7', 0, 0},
|
||||
{'8', 0, 0},
|
||||
{'9', 0, 0},
|
||||
{'-', 0, 0},
|
||||
{'4', 0, 0},
|
||||
{'5', 0, 0},
|
||||
{'6', 0, 0},
|
||||
{'+', 0, 0},
|
||||
{'1', 0, 0},
|
||||
|
||||
/* 0x50 */
|
||||
{'2', 0, 0},
|
||||
{'3', 0, 0},
|
||||
{'0', 0, 0},
|
||||
{'.', 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{GDK_F11, 0, 0},
|
||||
{GDK_F12, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
|
||||
/* 0x60 */
|
||||
{GDK_Return, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
|
||||
/* 0x70 */
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
|
||||
/* 0x80 */
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
|
||||
/* 0x90 */
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
|
||||
/* 0xA0 */
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
|
||||
/* 0xB0 */
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
|
||||
/* 0xC0 */
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{GDK_Up, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{GDK_Left, 0, 0},
|
||||
{0, 0, 0},
|
||||
{GDK_Right, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
|
||||
/* 0xD0 */
|
||||
{GDK_Down, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
|
||||
/* 0xE0 */
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
|
||||
/* 0xF0 */
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0},
|
||||
};
|
||||
|
||||
#define TRANS_TABLE_SIZE (sizeof(trans_table)/sizeof(trans_table[0]))
|
||||
|
||||
static gboolean
|
||||
handle_mediumraw_keyboard_input (GIOChannel *gioc,
|
||||
GIOCondition cond,
|
||||
gpointer data)
|
||||
{
|
||||
guchar buf[128];
|
||||
int i, n;
|
||||
Keyboard *k = data;
|
||||
guint32 now;
|
||||
|
||||
n = read (k->fd, buf, sizeof(buf));
|
||||
if (n <= 0)
|
||||
g_error("Nothing from keyboard!");
|
||||
|
||||
/* Now turn this into a keyboard event */
|
||||
now = gdk_fb_get_time ();
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
guchar keycode;
|
||||
gboolean key_up;
|
||||
GdkEvent *event;
|
||||
GdkWindow *win;
|
||||
char dummy[2];
|
||||
int mod;
|
||||
guint keyval;
|
||||
|
||||
keycode = buf[i] & 0x7F;
|
||||
key_up = buf[i] & 0x80;
|
||||
|
||||
if (keycode > TRANS_TABLE_SIZE)
|
||||
{
|
||||
g_warning ("Unknown keycode\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( (keycode == 0x1D) /* left Ctrl */
|
||||
|| (keycode == 0x9D) /* right Ctrl */
|
||||
|| (keycode == 0x38) /* left Alt */
|
||||
|| (keycode == 0xB8) /* right Alt */
|
||||
|| (keycode == 0x2A) /* left Shift */
|
||||
|| (keycode == 0x36) /* right Shift */)
|
||||
{
|
||||
switch (keycode)
|
||||
{
|
||||
case 0x1D: /* Left Ctrl */
|
||||
case 0x9D: /* Right Ctrl */
|
||||
if (key_up)
|
||||
k->modifier_state &= ~GDK_CONTROL_MASK;
|
||||
else
|
||||
k->modifier_state |= GDK_CONTROL_MASK;
|
||||
break;
|
||||
case 0x38: /* Left Alt */
|
||||
case 0xB8: /* Right Alt */
|
||||
if (key_up)
|
||||
k->modifier_state &= ~GDK_MOD1_MASK;
|
||||
else
|
||||
k->modifier_state |= GDK_MOD1_MASK;
|
||||
break;
|
||||
case 0x2A: /* Left Shift */
|
||||
case 0x36: /* Right Shift */
|
||||
if (key_up)
|
||||
k->modifier_state &= ~GDK_SHIFT_MASK;
|
||||
else
|
||||
k->modifier_state |= GDK_SHIFT_MASK;
|
||||
break;
|
||||
}
|
||||
continue; /* Don't generate events for modifiers */
|
||||
}
|
||||
|
||||
if (keycode == 0x3A /* Caps lock */)
|
||||
{
|
||||
if (!key_up)
|
||||
k->caps_lock = !k->caps_lock;
|
||||
|
||||
ioctl (k->fd, KDSETLED, k->caps_lock ? LED_CAP : 0);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (trans_table[keycode][0] >= GDK_F1 &&
|
||||
trans_table[keycode][0] <= GDK_F35 &&
|
||||
(k->modifier_state & GDK_MOD1_MASK))
|
||||
{
|
||||
if (key_up) /* Only switch on release */
|
||||
{
|
||||
gint vtnum = trans_table[keycode][0] - GDK_F1 + 1;
|
||||
|
||||
/* Do the whole funky VT switch thing */
|
||||
ioctl (k->consfd, VT_ACTIVATE, vtnum);
|
||||
ioctl (k->consfd, VT_WAITACTIVE, k->vtnum);
|
||||
gdk_fb_redraw_all ();
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
keyval = 0;
|
||||
mod = 0;
|
||||
if (k->modifier_state & GDK_CONTROL_MASK)
|
||||
mod = 2;
|
||||
else if (k->modifier_state & GDK_SHIFT_MASK)
|
||||
mod = 1;
|
||||
do {
|
||||
keyval = trans_table[keycode][mod--];
|
||||
} while (!keyval && (mod >= 0));
|
||||
|
||||
if (k->caps_lock && (keyval >= 'a') && (keyval <= 'z'))
|
||||
keyval = toupper (keyval);
|
||||
|
||||
/* handle some magic keys */
|
||||
if (k->modifier_state & (GDK_CONTROL_MASK|GDK_MOD1_MASK))
|
||||
{
|
||||
if (key_up)
|
||||
{
|
||||
if (keyval == GDK_BackSpace)
|
||||
exit (1);
|
||||
|
||||
if (keyval == GDK_Return)
|
||||
gdk_fb_redraw_all ();
|
||||
}
|
||||
|
||||
keyval = 0;
|
||||
}
|
||||
|
||||
if (!keyval)
|
||||
continue;
|
||||
|
||||
win = gdk_window_find_focus ();
|
||||
event = gdk_event_make (win,
|
||||
key_up ? GDK_KEY_RELEASE : GDK_KEY_PRESS,
|
||||
TRUE);
|
||||
if (event)
|
||||
{
|
||||
/* Find focused window */
|
||||
event->key.time = now;
|
||||
event->key.state = k->modifier_state;
|
||||
event->key.keyval = keyval;
|
||||
event->key.length = isprint (event->key.keyval) ? 1 : 0;
|
||||
dummy[0] = event->key.keyval;
|
||||
dummy[1] = 0;
|
||||
event->key.string = event->key.length ? g_strdup(dummy) : NULL;
|
||||
}
|
||||
}
|
||||
|
||||
input_activity ();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
handle_xlate_keyboard_input (GIOChannel *gioc,
|
||||
GIOCondition cond,
|
||||
gpointer data)
|
||||
{
|
||||
guchar buf[128];
|
||||
int i, n;
|
||||
Keyboard *k = data;
|
||||
guint32 now;
|
||||
|
||||
n = read (k->fd, buf, sizeof(buf));
|
||||
if (n <= 0)
|
||||
g_error ("Nothing from keyboard!");
|
||||
|
||||
/* Now turn this into a keyboard event */
|
||||
now = gdk_fb_get_time ();
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
GdkEvent *event;
|
||||
GdkWindow *win;
|
||||
char dummy[2];
|
||||
guint keyval;
|
||||
|
||||
keyval = buf[i];
|
||||
|
||||
switch (keyval) {
|
||||
case '\n':
|
||||
keyval = GDK_Return;
|
||||
break;
|
||||
case '\t':
|
||||
keyval = GDK_Tab;
|
||||
break;
|
||||
case 127:
|
||||
keyval = GDK_BackSpace;
|
||||
break;
|
||||
case 27:
|
||||
keyval = GDK_Escape;
|
||||
break;
|
||||
}
|
||||
|
||||
win = gdk_window_find_focus ();
|
||||
|
||||
/* Send key down: */
|
||||
event = gdk_event_make (win, GDK_KEY_PRESS, TRUE);
|
||||
if (event)
|
||||
{
|
||||
/* Find focused window */
|
||||
event->key.time = now;
|
||||
event->key.state = k->modifier_state;
|
||||
event->key.keyval = keyval;
|
||||
event->key.length = isprint (event->key.keyval) ? 1 : 0;
|
||||
dummy[0] = event->key.keyval;
|
||||
dummy[1] = 0;
|
||||
event->key.string = event->key.length ? g_strdup(dummy) : NULL;
|
||||
}
|
||||
|
||||
/* Send key up: */
|
||||
event = gdk_event_make (win, GDK_KEY_RELEASE, TRUE);
|
||||
if (event)
|
||||
{
|
||||
/* Find focused window */
|
||||
event->key.time = now;
|
||||
event->key.state = k->modifier_state;
|
||||
event->key.keyval = keyval;
|
||||
event->key.length = isprint (event->key.keyval) ? 1 : 0;
|
||||
dummy[0] = event->key.keyval;
|
||||
dummy[1] = 0;
|
||||
event->key.string = event->key.length ? g_strdup(dummy) : NULL;
|
||||
}
|
||||
}
|
||||
|
||||
input_activity ();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static Keyboard *
|
||||
tty_keyboard_open (void)
|
||||
{
|
||||
Keyboard *retval = g_new0 (Keyboard, 1);
|
||||
GIOChannel *gioc;
|
||||
const char cursoroff_str[] = "\033[?1;0;0c";
|
||||
int n;
|
||||
struct vt_stat vs;
|
||||
char buf[32];
|
||||
struct termios ts;
|
||||
gboolean raw_keyboard;
|
||||
|
||||
retval->modifier_state = 0;
|
||||
retval->caps_lock = 0;
|
||||
|
||||
setsid();
|
||||
retval->consfd = open ("/dev/console", O_RDWR);
|
||||
ioctl (retval->consfd, VT_GETSTATE, &vs);
|
||||
retval->prev_vtnum = vs.v_active;
|
||||
g_snprintf (buf, sizeof(buf), "/dev/tty%d", retval->prev_vtnum);
|
||||
ioctl (retval->consfd, KDSKBMODE, K_XLATE);
|
||||
|
||||
n = ioctl (retval->consfd, VT_OPENQRY, &retval->vtnum);
|
||||
if (n < 0 || retval->vtnum == -1)
|
||||
g_error("Cannot allocate VT");
|
||||
|
||||
ioctl (retval->consfd, VT_ACTIVATE, retval->vtnum);
|
||||
ioctl (retval->consfd, VT_WAITACTIVE, retval->vtnum);
|
||||
|
||||
#if 0
|
||||
close (0);
|
||||
close (1);
|
||||
close (2);
|
||||
#endif
|
||||
|
||||
g_snprintf (buf, sizeof(buf), "/dev/tty%d", retval->vtnum);
|
||||
retval->fd = open (buf, O_RDWR|O_NONBLOCK);
|
||||
if (retval->fd < 0)
|
||||
return NULL;
|
||||
raw_keyboard = TRUE;
|
||||
if (ioctl (retval->fd, KDSKBMODE, K_MEDIUMRAW) < 0)
|
||||
{
|
||||
raw_keyboard = FALSE;
|
||||
g_warning ("K_MEDIUMRAW failed, using broken XLATE keyboard driver");
|
||||
}
|
||||
|
||||
/* Disable normal text on the console */
|
||||
ioctl (retval->fd, KDSETMODE, KD_GRAPHICS);
|
||||
|
||||
/* Set controlling tty */
|
||||
ioctl (0, TIOCNOTTY, 0);
|
||||
ioctl (retval->fd, TIOCSCTTY, 0);
|
||||
tcgetattr (retval->fd, &ts);
|
||||
ts.c_cc[VTIME] = 0;
|
||||
ts.c_cc[VMIN] = 1;
|
||||
ts.c_lflag &= ~(ICANON|ECHO|ISIG);
|
||||
ts.c_iflag = 0;
|
||||
tcsetattr (retval->fd, TCSAFLUSH, &ts);
|
||||
|
||||
tcsetpgrp (retval->fd, getpgrp());
|
||||
|
||||
write (retval->fd, cursoroff_str, strlen (cursoroff_str));
|
||||
|
||||
#if 0
|
||||
if (retval->fd != 0)
|
||||
dup2 (retval->fd, 0);
|
||||
if (retval->fd != 1)
|
||||
dup2 (retval->fd, 1);
|
||||
if (retval->fd != 2)
|
||||
dup2 (retval->fd, 2);
|
||||
#endif
|
||||
|
||||
gioc = g_io_channel_unix_new (retval->fd);
|
||||
retval->fd_tag = g_io_add_watch (gioc,
|
||||
G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL,
|
||||
(raw_keyboard) ? handle_mediumraw_keyboard_input : handle_xlate_keyboard_input,
|
||||
retval);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_beep (void)
|
||||
{
|
||||
static int pitch = 600, duration = 100;
|
||||
gulong arg;
|
||||
|
||||
if (!keyboard)
|
||||
return;
|
||||
|
||||
/* Thank you XFree86 */
|
||||
arg = ((1193190 / pitch) & 0xffff) |
|
||||
(((unsigned long)duration) << 16);
|
||||
|
||||
ioctl (keyboard->fd, KDMKTONE, arg);
|
||||
}
|
||||
|
||||
void
|
||||
keyboard_init (void)
|
||||
{
|
||||
keyboard = tty_keyboard_open ();
|
||||
}
|
||||
|
||||
void
|
||||
keyboard_shutdown (void)
|
||||
{
|
||||
int tmpfd;
|
||||
|
||||
ioctl (keyboard->fd, KDSETMODE, KD_TEXT);
|
||||
ioctl (keyboard->fd, KDSKBMODE, K_XLATE);
|
||||
close (keyboard->fd);
|
||||
g_source_remove (keyboard->fd_tag);
|
||||
|
||||
tmpfd = keyboard->consfd;
|
||||
ioctl (tmpfd, VT_ACTIVATE, keyboard->prev_vtnum);
|
||||
ioctl (tmpfd, VT_WAITACTIVE, keyboard->prev_vtnum);
|
||||
ioctl (tmpfd, VT_DISALLOCATE, keyboard->vtnum);
|
||||
close (tmpfd);
|
||||
|
||||
g_free (keyboard);
|
||||
keyboard = NULL;
|
||||
}
|
||||
|
||||
|
@ -277,6 +277,13 @@ gdk_input_window_destroy (GdkWindow *window)
|
||||
g_free (input_window);
|
||||
}
|
||||
|
||||
void
|
||||
gdk_input_init (void)
|
||||
{
|
||||
gdk_input_devices = g_list_append (NULL, gdk_core_pointer);
|
||||
gdk_input_ignore_core = FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_input_exit (void)
|
||||
{
|
||||
|
1431
gdk/linux-fb/gdkkeyboard-fb.c
Normal file
1431
gdk/linux-fb/gdkkeyboard-fb.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -35,6 +35,8 @@
|
||||
#include <time.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/vt.h>
|
||||
#include <sys/kd.h>
|
||||
|
||||
#include "gdk.h"
|
||||
|
||||
@ -308,7 +310,7 @@ fb_modes_parse_mode (GScanner *scanner,
|
||||
|
||||
if (strcmp (modename, specified_modename)== 0) {
|
||||
if (!found_geometry)
|
||||
g_warning ("Geometry not specified\n");
|
||||
g_warning ("Geometry not specified");
|
||||
|
||||
if (found_geometry)
|
||||
{
|
||||
@ -320,7 +322,7 @@ fb_modes_parse_mode (GScanner *scanner,
|
||||
}
|
||||
|
||||
if (!found_timings)
|
||||
g_warning ("Timing not specified\n");
|
||||
g_warning ("Timing not specified");
|
||||
|
||||
if (found_timings)
|
||||
{
|
||||
@ -371,7 +373,7 @@ gdk_fb_setup_mode_from_name (struct fb_var_screeninfo *modeinfo,
|
||||
fd = open (filename, O_RDONLY);
|
||||
if (fd < 0)
|
||||
{
|
||||
g_warning ("Cannot read %s\n", filename);
|
||||
g_warning ("Cannot read %s", filename);
|
||||
return retval;
|
||||
}
|
||||
|
||||
@ -390,7 +392,7 @@ gdk_fb_setup_mode_from_name (struct fb_var_screeninfo *modeinfo,
|
||||
result = fb_modes_parse_mode (scanner, modeinfo, modename);
|
||||
|
||||
if (result < 0) {
|
||||
g_warning ("parse error in %s at line %d\n", filename, scanner->line);
|
||||
g_warning ("parse error in %s at line %d", filename, scanner->line);
|
||||
break;
|
||||
}
|
||||
if (result > 0)
|
||||
@ -413,15 +415,22 @@ gdk_fb_set_mode (GdkFBDisplay *display)
|
||||
{
|
||||
char *env, *end;
|
||||
int depth, height, width;
|
||||
gboolean changed;
|
||||
|
||||
if (ioctl (display->fd, FBIOGET_VSCREENINFO, &display->modeinfo) < 0)
|
||||
if (ioctl (display->fb_fd, FBIOGET_VSCREENINFO, &display->modeinfo) < 0)
|
||||
return -1;
|
||||
|
||||
display->orig_modeinfo = display->modeinfo;
|
||||
|
||||
changed = FALSE;
|
||||
|
||||
env = getenv ("GDK_DISPLAY_MODE");
|
||||
if (env)
|
||||
{
|
||||
if (!gdk_fb_setup_mode_from_name (&display->modeinfo, env))
|
||||
g_warning ("Couldn't find mode named '%s'\n", env);
|
||||
if (gdk_fb_setup_mode_from_name (&display->modeinfo, env))
|
||||
changed = TRUE;
|
||||
else
|
||||
g_warning ("Couldn't find mode named '%s'", env);
|
||||
}
|
||||
|
||||
env = getenv ("GDK_DISPLAY_DEPTH");
|
||||
@ -429,7 +438,10 @@ gdk_fb_set_mode (GdkFBDisplay *display)
|
||||
{
|
||||
depth = strtol (env, &end, 10);
|
||||
if (env != end)
|
||||
display->modeinfo.bits_per_pixel = depth;
|
||||
{
|
||||
changed = TRUE;
|
||||
display->modeinfo.bits_per_pixel = depth;
|
||||
}
|
||||
}
|
||||
|
||||
env = getenv ("GDK_DISPLAY_WIDTH");
|
||||
@ -438,6 +450,7 @@ gdk_fb_set_mode (GdkFBDisplay *display)
|
||||
width = strtol (env, &end, 10);
|
||||
if (env != end)
|
||||
{
|
||||
changed = TRUE;
|
||||
display->modeinfo.xres = width;
|
||||
display->modeinfo.xres_virtual = width;
|
||||
}
|
||||
@ -449,74 +462,163 @@ gdk_fb_set_mode (GdkFBDisplay *display)
|
||||
height = strtol (env, &end, 10);
|
||||
if (env != end)
|
||||
{
|
||||
changed = TRUE;
|
||||
display->modeinfo.yres = height;
|
||||
display->modeinfo.yres_virtual = height;
|
||||
}
|
||||
}
|
||||
|
||||
if (ioctl (display->fd, FBIOPUT_VSCREENINFO, &display->modeinfo) < 0)
|
||||
if (changed &&
|
||||
(ioctl (display->fb_fd, FBIOPUT_VSCREENINFO, &display->modeinfo) < 0))
|
||||
{
|
||||
g_warning ("Couldn't set specified mode\n");
|
||||
g_warning ("Couldn't set specified mode");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (ioctl (display->fd, FBIOGET_FSCREENINFO, &display->sinfo) < 0)
|
||||
if (ioctl (display->fb_fd, FBIOGET_FSCREENINFO, &display->sinfo) < 0)
|
||||
{
|
||||
g_warning ("Error getting fixed screen info\n");
|
||||
g_warning ("Error getting fixed screen info");
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static GdkFBDisplay *
|
||||
gdk_fb_display_new (const char *filename)
|
||||
gdk_fb_display_new ()
|
||||
{
|
||||
int fd;
|
||||
GdkFBDisplay *retval;
|
||||
GdkFBDisplay *display;
|
||||
gchar *fb_filename;
|
||||
struct vt_stat vs;
|
||||
int vt, n;
|
||||
gchar *s, *send;
|
||||
char buf[32];
|
||||
|
||||
fd = open (filename, O_RDWR);
|
||||
if (fd < 0)
|
||||
return NULL;
|
||||
display = g_new0 (GdkFBDisplay, 1);
|
||||
|
||||
retval = g_new0 (GdkFBDisplay, 1);
|
||||
retval->fd = fd;
|
||||
|
||||
if (gdk_fb_set_mode (retval) < 0)
|
||||
display->console_fd = open ("/dev/console", O_RDWR);
|
||||
if (display->console_fd < 0)
|
||||
{
|
||||
g_free (retval);
|
||||
g_warning ("Can't open /dev/console");
|
||||
g_free (display);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ioctl (display->console_fd, VT_GETSTATE, &vs);
|
||||
display->start_vt = vs.v_active;
|
||||
|
||||
vt = display->start_vt;
|
||||
s = getenv("GDK_VT");
|
||||
if (s)
|
||||
{
|
||||
if (g_strcasecmp ("new", s)==0)
|
||||
{
|
||||
n = ioctl (display->console_fd, VT_OPENQRY, &vt);
|
||||
if (n < 0 || vt == -1)
|
||||
g_error("Cannot allocate new VT");
|
||||
}
|
||||
else
|
||||
{
|
||||
vt = strtol (s, &send, 10);
|
||||
if (s==send)
|
||||
{
|
||||
g_warning ("Cannot parse GDK_TTY");
|
||||
vt = display->start_vt;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
display->vt = vt;
|
||||
|
||||
/* Switch to the new VT */
|
||||
if (vt != display->start_vt)
|
||||
{
|
||||
ioctl (display->console_fd, VT_ACTIVATE, vt);
|
||||
ioctl (display->console_fd, VT_WAITACTIVE, vt);
|
||||
}
|
||||
|
||||
/* Open the tty */
|
||||
g_snprintf (buf, sizeof(buf), "/dev/tty%d", vt);
|
||||
display->tty_fd = open (buf, O_RDWR|O_NONBLOCK);
|
||||
if (display->tty_fd < 0)
|
||||
{
|
||||
g_warning ("Can't open %s", buf);
|
||||
close (display->console_fd);
|
||||
g_free (display);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ioctl (retval->fd, FBIOBLANK, 0);
|
||||
|
||||
/* We used to use sinfo.smem_len, but that seemed to be broken in many cases */
|
||||
retval->fbmem = mmap (NULL,
|
||||
retval->modeinfo.yres * retval->sinfo.line_length,
|
||||
PROT_READ|PROT_WRITE,
|
||||
MAP_SHARED,
|
||||
fd,
|
||||
0);
|
||||
g_assert (retval->fbmem != MAP_FAILED);
|
||||
|
||||
if (retval->sinfo.visual == FB_VISUAL_TRUECOLOR)
|
||||
/* Set controlling tty */
|
||||
ioctl (0, TIOCNOTTY, 0);
|
||||
ioctl (display->tty_fd, TIOCSCTTY, 0);
|
||||
|
||||
fb_filename = gdk_get_display ();
|
||||
display->fb_fd = open (fb_filename, O_RDWR);
|
||||
if (display->fb_fd < 0)
|
||||
{
|
||||
retval->red_byte = retval->modeinfo.red.offset >> 3;
|
||||
retval->green_byte = retval->modeinfo.green.offset >> 3;
|
||||
retval->blue_byte = retval->modeinfo.blue.offset >> 3;
|
||||
g_warning ("Can't open %s", fb_filename);
|
||||
g_free (fb_filename);
|
||||
close (display->tty_fd);
|
||||
close (display->console_fd);
|
||||
g_free (display);
|
||||
return NULL;
|
||||
}
|
||||
g_free (fb_filename);
|
||||
|
||||
if (gdk_fb_set_mode (display) < 0)
|
||||
{
|
||||
close (display->fb_fd);
|
||||
close (display->tty_fd);
|
||||
close (display->console_fd);
|
||||
g_free (display);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return retval;
|
||||
/* Disable normal text on the console */
|
||||
ioctl (display->fb_fd, KDSETMODE, KD_GRAPHICS);
|
||||
|
||||
ioctl (display->fb_fd, FBIOBLANK, 0);
|
||||
|
||||
/* We used to use sinfo.smem_len, but that seemed to be broken in many cases */
|
||||
display->fbmem = mmap (NULL,
|
||||
display->modeinfo.yres * display->sinfo.line_length,
|
||||
PROT_READ|PROT_WRITE,
|
||||
MAP_SHARED,
|
||||
display->fb_fd,
|
||||
0);
|
||||
g_assert (display->fbmem != MAP_FAILED);
|
||||
|
||||
if (display->sinfo.visual == FB_VISUAL_TRUECOLOR)
|
||||
{
|
||||
display->red_byte = display->modeinfo.red.offset >> 3;
|
||||
display->green_byte = display->modeinfo.green.offset >> 3;
|
||||
display->blue_byte = display->modeinfo.blue.offset >> 3;
|
||||
}
|
||||
|
||||
return display;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_fb_display_destroy (GdkFBDisplay *fbd)
|
||||
gdk_fb_display_destroy (GdkFBDisplay *display)
|
||||
{
|
||||
munmap (fbd->fbmem, fbd->modeinfo.yres * fbd->sinfo.line_length);
|
||||
close (fbd->fd);
|
||||
g_free (fbd);
|
||||
}
|
||||
/* Restore old framebuffer mode */
|
||||
ioctl (display->fb_fd, FBIOPUT_VSCREENINFO, &display->orig_modeinfo);
|
||||
|
||||
/* Enable normal text on the console */
|
||||
ioctl (display->fb_fd, KDSETMODE, KD_TEXT);
|
||||
|
||||
munmap (display->fbmem, display->modeinfo.yres * display->sinfo.line_length);
|
||||
close (display->fb_fd);
|
||||
|
||||
extern void keyboard_init(void);
|
||||
ioctl (display->console_fd, VT_ACTIVATE, display->start_vt);
|
||||
ioctl (display->console_fd, VT_WAITACTIVE, display->start_vt);
|
||||
if (display->vt != display->start_vt)
|
||||
ioctl (display->console_fd, VT_DISALLOCATE, display->vt);
|
||||
|
||||
close (display->tty_fd);
|
||||
close (display->console_fd);
|
||||
g_free (display);
|
||||
}
|
||||
|
||||
gboolean
|
||||
_gdk_windowing_init_check (int argc, char **argv)
|
||||
@ -524,14 +626,33 @@ _gdk_windowing_init_check (int argc, char **argv)
|
||||
if (gdk_initialized)
|
||||
return TRUE;
|
||||
|
||||
keyboard_init ();
|
||||
gdk_display = gdk_fb_display_new ("/dev/fb");
|
||||
/* Create new session and become session leader */
|
||||
setsid();
|
||||
|
||||
gdk_display = gdk_fb_display_new ();
|
||||
|
||||
if (!gdk_display)
|
||||
return FALSE;
|
||||
|
||||
gdk_fb_font_init ();
|
||||
|
||||
if (!gdk_fb_keyboard_open ())
|
||||
{
|
||||
g_warning ("Failed to initialize keyboard");
|
||||
gdk_fb_display_destroy (gdk_display);
|
||||
gdk_display = NULL;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!gdk_fb_mouse_open ())
|
||||
{
|
||||
g_warning ("Failed to initialize mouse");
|
||||
gdk_fb_keyboard_close ();
|
||||
gdk_fb_display_destroy (gdk_display);
|
||||
gdk_display = NULL;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gdk_initialized = TRUE;
|
||||
|
||||
gdk_selection_property = gdk_atom_intern ("GDK_SELECTION", FALSE);
|
||||
@ -883,12 +1004,16 @@ extern void keyboard_shutdown(void);
|
||||
void
|
||||
gdk_windowing_exit (void)
|
||||
{
|
||||
gdk_fb_display_destroy (gdk_display);
|
||||
gdk_display = NULL;
|
||||
|
||||
gdk_fb_mouse_close ();
|
||||
|
||||
gdk_fb_keyboard_close ();
|
||||
|
||||
gdk_fb_font_fini ();
|
||||
|
||||
keyboard_shutdown ();
|
||||
gdk_fb_display_destroy (gdk_display);
|
||||
|
||||
gdk_display = NULL;
|
||||
}
|
||||
|
||||
gchar*
|
||||
@ -906,7 +1031,27 @@ gdk_keyval_from_name (const gchar *keyval_name)
|
||||
gchar *
|
||||
gdk_get_display(void)
|
||||
{
|
||||
return g_strdup ("/dev/fb0");
|
||||
gchar *s;
|
||||
|
||||
s = getenv ("GDK_DISPLAY");
|
||||
if (s==0)
|
||||
s = "/dev/fb";
|
||||
|
||||
return g_strdup (s);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
gdk_beep (void)
|
||||
{
|
||||
static int pitch = 600, duration = 100;
|
||||
gulong arg;
|
||||
|
||||
/* Thank you XFree86 */
|
||||
arg = ((1193190 / pitch) & 0xffff) |
|
||||
(((unsigned long)duration) << 16);
|
||||
|
||||
ioctl (gdk_display->tty_fd, KDMKTONE, arg);
|
||||
}
|
||||
|
||||
/* utils */
|
||||
@ -968,7 +1113,7 @@ gdk_event_make (GdkWindow *window,
|
||||
{
|
||||
GdkModifierType mask;
|
||||
|
||||
gdk_mouse_get_info (NULL, NULL, &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)) ||
|
||||
|
@ -1,3 +1,22 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <gdk/gdk.h>
|
||||
#include <gdk/gdkinternals.h>
|
||||
#include "gdkprivate-fb.h"
|
||||
@ -32,9 +51,9 @@ struct _GdkFBMouse {
|
||||
static GdkFBMouse *gdk_fb_mouse = NULL;
|
||||
|
||||
void
|
||||
gdk_mouse_get_info (gint *x,
|
||||
gint *y,
|
||||
GdkModifierType *mask)
|
||||
gdk_fb_mouse_get_info (gint *x,
|
||||
gint *y,
|
||||
GdkModifierType *mask)
|
||||
{
|
||||
if (x)
|
||||
*x = gdk_fb_mouse->x;
|
||||
@ -45,7 +64,7 @@ gdk_mouse_get_info (gint *x,
|
||||
(gdk_fb_mouse->button_pressed[0]?GDK_BUTTON1_MASK:0) |
|
||||
(gdk_fb_mouse->button_pressed[1]?GDK_BUTTON2_MASK:0) |
|
||||
(gdk_fb_mouse->button_pressed[2]?GDK_BUTTON3_MASK:0) |
|
||||
/*keyboard->modifier_state*/0; //TODO
|
||||
gdk_fb_keyboard_modifiers ();
|
||||
}
|
||||
|
||||
static void
|
||||
@ -90,7 +109,7 @@ handle_mouse_movement(GdkFBMouse *mouse)
|
||||
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) |
|
||||
/*keyboard->modifier_state*/0; // TODO
|
||||
gdk_fb_keyboard_modifiers ();
|
||||
|
||||
event = gdk_event_make (grabwin, GDK_MOTION_NOTIFY, TRUE);
|
||||
if (event)
|
||||
@ -137,7 +156,7 @@ send_button_event (GdkFBMouse *mouse,
|
||||
(mouse->button_pressed[1] ? GDK_BUTTON2_MASK : 0) |
|
||||
(mouse->button_pressed[2] ? GDK_BUTTON3_MASK : 0) |
|
||||
(1 << (button + 8)) /* badhack */ |
|
||||
/*keyboard->modifier_state*/0; // TODO
|
||||
gdk_fb_keyboard_modifiers ();
|
||||
event->button.device = gdk_core_pointer;
|
||||
event->button.x_root = mouse->x;
|
||||
event->button.y_root = mouse->y;
|
||||
@ -231,7 +250,7 @@ gdk_fb_mouse_open (void)
|
||||
|
||||
mouse = g_new0 (GdkFBMouse, 1);
|
||||
mouse->fd = -1;
|
||||
mouse_type = getenv ("GDK_MOUSETYPE");
|
||||
mouse_type = getenv ("GDK_MOUSE_TYPE");
|
||||
if (!mouse_type)
|
||||
mouse_type = "ps2";
|
||||
|
||||
@ -243,7 +262,7 @@ gdk_fb_mouse_open (void)
|
||||
|
||||
if (i == G_N_ELEMENTS(mouse_devs))
|
||||
{
|
||||
g_warning ("No mouse driver of type %s found\n", mouse_type);
|
||||
g_warning ("No mouse driver of type %s found", mouse_type);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -256,7 +275,7 @@ gdk_fb_mouse_open (void)
|
||||
|
||||
if (!device->open(mouse))
|
||||
{
|
||||
g_warning ("Mouse driver open failed\n");
|
||||
g_warning ("Mouse driver open failed");
|
||||
g_free (mouse);
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -123,12 +123,17 @@ typedef struct {
|
||||
|
||||
struct _GdkFBDisplay
|
||||
{
|
||||
int fd;
|
||||
int tty_fd;
|
||||
int console_fd;
|
||||
int vt, start_vt;
|
||||
|
||||
int fb_fd;
|
||||
guchar *fbmem;
|
||||
gpointer active_cmap;
|
||||
gulong mem_len;
|
||||
struct fb_fix_screeninfo sinfo;
|
||||
struct fb_var_screeninfo modeinfo;
|
||||
struct fb_var_screeninfo orig_modeinfo;
|
||||
int red_byte, green_byte, blue_byte; /* For truecolor */
|
||||
};
|
||||
|
||||
@ -248,22 +253,21 @@ extern GdkGC *_gdk_fb_screen_gc;
|
||||
|
||||
GType gdk_gc_fb_get_type (void) G_GNUC_CONST;
|
||||
|
||||
/* Routines from gdkgeometry-fb.c */
|
||||
void _gdk_selection_window_destroyed (GdkWindow *window);
|
||||
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,
|
||||
GdkCrossingMode mode);
|
||||
void gdk_fb_window_move_resize (GdkWindow *window,
|
||||
gint x,
|
||||
gint y,
|
||||
gint width,
|
||||
gint height,
|
||||
gboolean send_expose_events);
|
||||
GdkWindow *gdk_fb_window_find_focus (void);
|
||||
|
||||
void _gdk_window_init_position (GdkWindow *window);
|
||||
void _gdk_selection_window_destroyed (GdkWindow *window);
|
||||
void _gdk_window_move_resize_child (GdkWindow *window,
|
||||
gint x,
|
||||
gint y,
|
||||
gint width,
|
||||
gint height);
|
||||
void _gdk_window_process_expose (GdkWindow *window,
|
||||
gulong serial,
|
||||
GdkRectangle *area);
|
||||
void gdk_window_invalidate_region_clear (GdkWindow *window,
|
||||
GdkRegion *region);
|
||||
void gdk_window_invalidate_rect_clear (GdkWindow *window,
|
||||
GdkRectangle *rect);
|
||||
|
||||
GdkGC * _gdk_fb_gc_new (GdkDrawable *drawable,
|
||||
GdkGCValues *values,
|
||||
@ -386,14 +390,14 @@ void gdk_fb_cursor_hide(void);
|
||||
void gdk_fb_redraw_all(void);
|
||||
void gdk_fb_cursor_move (gint x, gint y, GdkWindow *in_window);
|
||||
|
||||
void gdk_fb_window_send_crossing_events (GdkWindow *dest,
|
||||
GdkCrossingMode mode);
|
||||
|
||||
gboolean gdk_fb_mouse_open (void);
|
||||
void gdk_fb_mouse_close (void);
|
||||
void gdk_mouse_get_info (gint *x,
|
||||
gint *y,
|
||||
GdkModifierType *mask);
|
||||
guint gdk_fb_keyboard_modifiers (void);
|
||||
gboolean gdk_fb_keyboard_open (void);
|
||||
void gdk_fb_keyboard_close (void);
|
||||
gboolean gdk_fb_mouse_open (void);
|
||||
void gdk_fb_mouse_close (void);
|
||||
void gdk_fb_mouse_get_info (gint *x,
|
||||
gint *y,
|
||||
GdkModifierType *mask);
|
||||
|
||||
|
||||
#define PANGO_TYPE_FB_FONT (pango_fb_font_get_type ())
|
||||
@ -421,13 +425,6 @@ GType pango_fb_font_get_type (void) G_GNUC_CONST;
|
||||
PangoFBGlyphInfo *pango_fb_font_get_glyph_info (PangoFont *font,
|
||||
PangoGlyph glyph);
|
||||
|
||||
void gdk_fb_window_move_resize (GdkWindow *window,
|
||||
gint x,
|
||||
gint y,
|
||||
gint width,
|
||||
gint height,
|
||||
gboolean send_expose_events);
|
||||
|
||||
extern void CM(void); /* Check for general mem corruption */
|
||||
extern void RP(GdkDrawable *drawable); /* Same, for pixmaps */
|
||||
|
||||
|
@ -440,6 +440,28 @@ gdk_fb_redraw_all (void)
|
||||
gdk_window_process_all_updates ();
|
||||
}
|
||||
|
||||
|
||||
/* Focus follows pointer */
|
||||
GdkWindow *
|
||||
gdk_fb_window_find_focus (void)
|
||||
{
|
||||
if (_gdk_fb_keyboard_grab_window)
|
||||
return _gdk_fb_keyboard_grab_window;
|
||||
else if (gdk_fb_window_containing_pointer)
|
||||
{
|
||||
GdkWindowObject *priv = (GdkWindowObject *)gdk_fb_window_containing_pointer;
|
||||
while (priv != (GdkWindowObject *)gdk_parent_root)
|
||||
{
|
||||
if ((priv->parent == (GdkWindowObject *)gdk_parent_root) && priv->mapped)
|
||||
return (GdkWindow *)priv;
|
||||
priv = priv->parent;
|
||||
}
|
||||
}
|
||||
|
||||
return gdk_parent_root;
|
||||
}
|
||||
|
||||
|
||||
static GdkWindow *
|
||||
gdk_fb_find_common_ancestor (GdkWindow *win1,
|
||||
GdkWindow *win2)
|
||||
@ -513,7 +535,7 @@ gdk_fb_window_send_crossing_events (GdkWindow *dest,
|
||||
if (a==b)
|
||||
return;
|
||||
|
||||
gdk_mouse_get_info (&x, &y, &my_mask);
|
||||
gdk_fb_mouse_get_info (&x, &y, &my_mask);
|
||||
|
||||
c = gdk_fb_find_common_ancestor (a, b);
|
||||
|
||||
@ -1407,7 +1429,7 @@ gdk_window_get_pointer (GdkWindow *window,
|
||||
window = gdk_parent_root;
|
||||
|
||||
gdk_window_get_root_origin (window, &x_int, &y_int);
|
||||
gdk_mouse_get_info (&winx, &winy, &my_mask);
|
||||
gdk_fb_mouse_get_info (&winx, &winy, &my_mask);
|
||||
|
||||
winx -= x_int;
|
||||
winy -= y_int;
|
||||
|
Loading…
Reference in New Issue
Block a user