mirror of
https://github.com/Interlisp/maiko.git
synced 2026-01-27 20:27:45 +00:00
The code is being re-licensed under the MIT license. modified: bin/fixid modified: bin/launch.asm modified: bin/makefile-hpux.hp9000-x modified: bin/makefile-init.sgi modified: bin/makefile-init.sparc modified: bin/makefile-init.sparc-multi modified: bin/makefile-irix.sgi-x modified: bin/makefile-sunos4.sparc modified: bin/makefile-sunos4.sparc% modified: bin/makefile-sunos4.sparc-multi modified: bin/makefile-sunos5.386-x modified: bin/makefile-sunos5.i386-x modified: bin/makefile-sunos5.sparc-x modified: bin/makefile-tail modified: bin/makeisc modified: bin/makeright modified: inc/Check.h modified: inc/MyWindow.h modified: inc/Stipple.h modified: inc/XCursors.h modified: inc/XKeymap.h modified: inc/XVersion.h modified: inc/Xdeflt.h modified: inc/Xicon.h modified: inc/address.h modified: inc/arith.h modified: inc/arith2.h modified: inc/array.h modified: inc/bb.h modified: inc/cell.h modified: inc/cell.h% modified: inc/copyright modified: inc/dbprint.h modified: inc/debug.h modified: inc/devif.h modified: inc/display.h modified: inc/dspdata.h modified: inc/ether.h modified: inc/fast_dsp.h modified: inc/fp.h modified: inc/gc.h modified: inc/gc.h.save modified: inc/gcscan.h modified: inc/hdw_conf.h modified: inc/ifpage.h modified: inc/inlineC.h modified: inc/inlnMIPS.h modified: inc/inlnPS2.h modified: inc/inlndos.h modified: inc/iopage.h modified: inc/kbdif.h modified: inc/keyboard.h modified: inc/keyboard.h% modified: inc/keysym.h modified: inc/ldeXdefs.h modified: inc/lispemul.h modified: inc/lispemul.h.save modified: inc/lispmap.h modified: inc/lldsp.h modified: inc/lnk-Xdeflt.h modified: inc/lnk-debug.h modified: inc/lnk-fast_dsp.h modified: inc/lnk-inlineC.h modified: inc/lnk-lispmap.h modified: inc/lnk-tosfns.h modified: inc/lnk-tosret.h modified: inc/locfile.h modified: inc/lpdefs.h modified: inc/lpglobl.h modified: inc/lspglob.h modified: inc/lsptypes.h modified: inc/medleyfp.h modified: inc/mnxdefs.h modified: inc/my.h modified: inc/native.h modified: inc/ocr.h modified: inc/osmsg.h modified: inc/picture.h modified: inc/pilotbbt.h modified: inc/print.h modified: inc/profile.h modified: inc/rawrs232c.h modified: inc/return.h modified: inc/rs232c.h modified: inc/stack.h modified: inc/stream.h modified: inc/stream.h% modified: inc/stream.h2 modified: inc/sysatms.h modified: inc/timeout.h modified: inc/tos1defs.h modified: inc/tosfns.h modified: inc/tosret.h modified: inc/tty.h modified: inc/version.h modified: inc/vmemsave.h modified: inc/xbitmaps.h modified: inc/xdefs.h modified: src/Cldeetr.c modified: src/allocmds.c modified: src/arith2.c modified: src/arith3.c modified: src/arith4.c modified: src/array.c modified: src/array2.c modified: src/array3.c modified: src/array4.c modified: src/array5.c modified: src/array6.c modified: src/asmbbt.c modified: src/asmbitblt.c modified: src/atom.c modified: src/bbtSPARC.s modified: src/bbtsub.c modified: src/bin.c modified: src/binds.c modified: src/bitblt.c modified: src/blt.c modified: src/byteswap.c modified: src/call-c.c modified: src/car-cdr.c modified: src/cdaudio.c modified: src/cdrom.c modified: src/chardev.c modified: src/chatter.c modified: src/codeconv.c modified: src/codetbl.c modified: src/colorbltfns.c modified: src/common.c modified: src/conspage.c modified: src/cr modified: src/dbgtool.c modified: src/dir.c modified: src/doscomm.c modified: src/doskbd.c modified: src/dosmouse.c modified: src/draw.c modified: src/dsk.c modified: src/dspif.c modified: src/dspsubrs.c modified: src/ejlisp.c modified: src/eqf.c modified: src/ether.c modified: src/findkey.c modified: src/foreign.c modified: src/fp.c modified: src/fvar.c modified: src/gc.c modified: src/gc2.c modified: src/gcarray.c modified: src/gccode.c modified: src/gcfinal.c modified: src/gchtfind.c modified: src/gcmain3.c modified: src/gcoflow.c modified: src/gcr.c modified: src/gcrcell.c modified: src/gcscan.c modified: src/gvar2.c modified: src/hacks.c modified: src/hardrtn.c modified: src/imagefile.c modified: src/imagefile2.c modified: src/inet.c modified: src/initdsp.c modified: src/initkbd.c modified: src/initsout.c modified: src/intcall.c modified: src/kbdif.c modified: src/kbdsubrs.c modified: src/keyevent.c modified: src/keylib.c modified: src/keymaker.c modified: src/keytst.c modified: src/keytstno.c modified: src/kprint.c modified: src/launch.asm modified: src/ldeboot.c modified: src/ldeether.c modified: src/ldsout.c modified: src/lineblt8.c modified: src/lisp2c.c modified: src/llcolor.c modified: src/llstk.c modified: src/loader.c modified: src/loopsops.c modified: src/lowlev1.c modified: src/lowlev2.c modified: src/lpdual.c modified: src/lpkit.c modified: src/lplexyy.c modified: src/lpmain.c modified: src/lpread.c modified: src/lpsolve.c modified: src/lptran.c modified: src/lpwrite.c modified: src/lpytab.c modified: src/lsthandl.c modified: src/main.c modified: src/misc7.c modified: src/miscn.c modified: src/mkatom.c modified: src/mkcell.c modified: src/mkkey.c modified: src/mkvdate.c modified: src/mnwevent.c modified: src/mnxmeth.c modified: src/mouseif.c modified: src/mvs.c modified: src/ocr.c modified: src/ocrproc.c modified: src/oether.c modified: src/oldeether.c modified: src/optck.c modified: src/osmsg.c modified: src/perrno.c modified: src/picture.c modified: src/rawcolor.c modified: src/rawrs232c.c modified: src/return.c modified: src/rpc.c modified: src/rplcons.c modified: src/rs232c.c modified: src/setsout.c modified: src/shift.c modified: src/socdvr.c modified: src/storage.c modified: src/subr.c modified: src/subr0374.c modified: src/sxhash.c modified: src/testdsp.c modified: src/testtool.c modified: src/timeoday.c modified: src/timeofday.c modified: src/timer.c modified: src/truecolor.c modified: src/tstsout.c modified: src/tty.c modified: src/typeof.c modified: src/ubf1.c modified: src/ubf2.c modified: src/ubf3.c modified: src/ufn.c modified: src/ufs.c modified: src/unixcomm.c modified: src/unixfork.c modified: src/unwind.c modified: src/uraid.c modified: src/usrsubr.c modified: src/uutils.c modified: src/vars3.c modified: src/vesafns.asm modified: src/vesainit.c modified: src/vgainit.c modified: src/vmemsave.c modified: src/xbbt.c modified: src/xc.c modified: src/xc.c.orig modified: src/xcursor.c modified: src/xinit.c modified: src/xlspwin.c modified: src/xmkicon.c modified: src/xrdopt.c modified: src/xscroll.c modified: src/xwinman.c modified: src/z2.c
381 lines
16 KiB
C
381 lines
16 KiB
C
/* $Id: xlspwin.c,v 1.4 2001/12/26 22:17:07 sybalsky Exp $ (C) Copyright Venue, All Rights Reserved
|
|
*/
|
|
static char *id = "$Id: xlspwin.c,v 1.4 2001/12/26 22:17:07 sybalsky Exp $ Copyright (C) Venue";
|
|
|
|
/************************************************************************/
|
|
/* */
|
|
/* (C) Copyright 1989, 1990, 1990, 1991, 1992, 1993, */
|
|
/* 1994, 1995, 1999, 2000, 2001 Venue. */
|
|
/* All Rights Reserved. */
|
|
/* */
|
|
/* Manufactured in the United States of America. */
|
|
/* */
|
|
/************************************************************************/
|
|
|
|
#include "version.h"
|
|
|
|
#include <stdio.h>
|
|
#include <sys/time.h>
|
|
#include <X11/Xlib.h>
|
|
#include <X11/Xutil.h>
|
|
|
|
#include "lispemul.h"
|
|
|
|
#include "xdefs.h"
|
|
#include "xbitmaps.h"
|
|
|
|
#include "keyboard.h"
|
|
#include "devif.h"
|
|
#include "dbprint.h"
|
|
|
|
extern DLword *EmKbdAd068K, *EmKbdAd168K, *EmKbdAd268K, *EmKbdAd368K, *EmKbdAd468K, *EmKbdAd568K,
|
|
*EmRealUtilin68K;
|
|
extern DLword *CTopKeyevent;
|
|
extern LispPTR *KEYBUFFERING68k;
|
|
extern int URaid_req, KBDEventFlg;
|
|
|
|
extern DLword *DisplayRegion68k;
|
|
|
|
extern int Current_Hot_X, Current_Hot_Y; /* X Cursor hotspots */
|
|
|
|
extern char Window_Title[255];
|
|
extern char Icon_Title[255];
|
|
|
|
extern int save_argc;
|
|
extern char **save_argv;
|
|
|
|
extern DspInterface currentdsp;
|
|
|
|
Pixmap IconPixmap;
|
|
GC CopyInvert_GC;
|
|
extern GC cursor_source_gc;
|
|
XGCValues gcv;
|
|
XEvent report;
|
|
|
|
Cursor WaitCursor, DefaultCursor, VertScrollCursor, VertThumbCursor, ScrollUpCursor,
|
|
ScrollDownCursor, HorizScrollCursor, HorizThumbCursor, ScrollLeftCursor, ScrollRightCursor;
|
|
|
|
extern int LispWindowRequestedX, LispWindowRequestedY;
|
|
extern unsigned LispWindowRequestedWidth, LispWindowRequestedHeight;
|
|
|
|
/************************************************************************/
|
|
/* */
|
|
/* */
|
|
/* */
|
|
/* */
|
|
/* */
|
|
/************************************************************************/
|
|
|
|
void Create_LispWindow(DspInterface dsp)
|
|
{
|
|
XSizeHints szhint = {0};
|
|
XWMHints Lisp_WMhints = {0};
|
|
XClassHint xclasshint = {0};
|
|
XTextProperty IconText = {0}, WindowNameText = {0};
|
|
XSetWindowAttributes Lisp_SetWinAttributes = {0};
|
|
|
|
Screen *screen;
|
|
|
|
int Col2, Row2, Col3, Row3, GravSize;
|
|
char *WT, *IT;
|
|
|
|
WT = Window_Title;
|
|
IT = Icon_Title;
|
|
|
|
GravSize = (int)(dsp->ScrollBarWidth / 2) - (dsp->InternalBorderWidth);
|
|
Col2 = dsp->Visible.width;
|
|
Row2 = dsp->Visible.height;
|
|
Col3 = dsp->Visible.width + (int)(OUTER_SB_WIDTH(dsp) / 2);
|
|
Row3 = dsp->Visible.height + (int)(OUTER_SB_WIDTH(dsp) / 2);
|
|
|
|
screen = ScreenOfDisplay(dsp->display_id, DefaultScreen(dsp->display_id));
|
|
dsp->LispWindow = XCreateSimpleWindow(
|
|
dsp->display_id, RootWindowOfScreen(screen), LispWindowRequestedX, /* Default upper left */
|
|
LispWindowRequestedY, /* Default upper left */
|
|
dsp->Visible.width + OUTER_SB_WIDTH(dsp), /* Default width */
|
|
dsp->Visible.height + OUTER_SB_WIDTH(dsp), /* Default height */
|
|
0, /* Default border */
|
|
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
|
|
|
|
Lisp_SetWinAttributes.bit_gravity = dsp->BitGravity;
|
|
Lisp_SetWinAttributes.override_redirect = False;
|
|
Lisp_SetWinAttributes.backing_store = DoesBackingStore(screen);
|
|
|
|
XChangeWindowAttributes(dsp->display_id, dsp->LispWindow, CWBitGravity | CWOverrideRedirect,
|
|
&Lisp_SetWinAttributes);
|
|
|
|
dsp->DisableEventMask = NoEventMask;
|
|
dsp->EnableEventMask = ButtonPressMask | ButtonReleaseMask | EnterWindowMask | LeaveWindowMask |
|
|
StructureNotifyMask | PointerMotionMask | ExposureMask | KeyPressMask |
|
|
KeyReleaseMask;
|
|
|
|
/* Have to make the GC before we make the icon. */
|
|
gcv.function = GXcopy;
|
|
gcv.foreground =
|
|
BlackPixelOfScreen(ScreenOfDisplay(dsp->display_id, DefaultScreen(dsp->display_id)));
|
|
gcv.background =
|
|
WhitePixelOfScreen(ScreenOfDisplay(dsp->display_id, DefaultScreen(dsp->display_id)));
|
|
dsp->Copy_GC =
|
|
XCreateGC(dsp->display_id, dsp->LispWindow, GCForeground | GCBackground | GCFunction, &gcv);
|
|
|
|
szhint.max_width = dsp->Display.width + OUTER_SB_WIDTH(dsp);
|
|
szhint.max_height = dsp->Display.height + OUTER_SB_WIDTH(dsp);
|
|
szhint.min_width = OUTER_SB_WIDTH(dsp);
|
|
szhint.min_height = OUTER_SB_WIDTH(dsp);
|
|
szhint.win_gravity = dsp->BitGravity;
|
|
szhint.flags = PMaxSize | PWinGravity | PSize;
|
|
|
|
Lisp_WMhints.icon_pixmap = make_Xicon(dsp);
|
|
Lisp_WMhints.input = True;
|
|
Lisp_WMhints.flags = IconPixmapHint | InputHint;
|
|
|
|
xclasshint.res_name = *save_argv;
|
|
xclasshint.res_class = *save_argv;
|
|
|
|
XStringListToTextProperty(&WT, 1, &WindowNameText);
|
|
XStringListToTextProperty(&IT, 1, &IconText);
|
|
|
|
XSetWMProperties(dsp->display_id, dsp->LispWindow, &WindowNameText, &IconText, save_argv,
|
|
save_argc, &szhint, &Lisp_WMhints, &xclasshint);
|
|
|
|
XSelectInput(dsp->display_id, dsp->LispWindow, dsp->EnableEventMask);
|
|
init_Xcursor(dsp->display_id, dsp->LispWindow);
|
|
|
|
dsp->DisplayWindow = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, 0, 0,
|
|
dsp->Visible.width, dsp->Visible.height, 0,
|
|
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
|
|
XChangeWindowAttributes(dsp->display_id, dsp->DisplayWindow,
|
|
CWBitGravity | CWOverrideRedirect | CWBackingStore,
|
|
&Lisp_SetWinAttributes);
|
|
XSelectInput(dsp->display_id, dsp->DisplayWindow, dsp->EnableEventMask);
|
|
XMapWindow(dsp->display_id, dsp->DisplayWindow);
|
|
|
|
/*********************************************************************/
|
|
/* Create all the vanilla pixmaps and cursors for the display window */
|
|
/*********************************************************************/
|
|
|
|
dsp->ScrollBarPixmap = XCreatePixmapFromBitmapData(
|
|
dsp->display_id, dsp->LispWindow, check_bits, check_width, check_height,
|
|
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen), DefaultDepthOfScreen(screen));
|
|
dsp->GravityOnPixmap = XCreatePixmapFromBitmapData(
|
|
dsp->display_id, dsp->LispWindow, check_bits, 16, 16, BlackPixelOfScreen(screen),
|
|
WhitePixelOfScreen(screen), DefaultDepthOfScreen(screen));
|
|
|
|
dsp->GravityOffPixmap = XCreatePixmapFromBitmapData(
|
|
dsp->display_id, dsp->LispWindow, plain_bits, 16, 16, BlackPixelOfScreen(screen),
|
|
WhitePixelOfScreen(screen), DefaultDepthOfScreen(screen));
|
|
|
|
set_Xcursor(dsp, (char *)default_cursor.cuimage, (int)default_cursor.cuhotspotx,
|
|
(int)(15 - default_cursor.cuhotspoty), &DefaultCursor, 0);
|
|
set_Xcursor(dsp, (char *)wait_cursor.cuimage, (int)wait_cursor.cuhotspotx,
|
|
(int)(15 - wait_cursor.cuhotspoty), &WaitCursor, 0);
|
|
set_Xcursor(dsp, (char *)scrolldown_cursor.cuimage, (int)scrolldown_cursor.cuhotspotx,
|
|
(int)(15 - scrolldown_cursor.cuhotspoty), &ScrollDownCursor, 0);
|
|
set_Xcursor(dsp, (char *)scrollleft_cursor.cuimage, (int)scrollleft_cursor.cuhotspotx,
|
|
(int)(15 - scrollleft_cursor.cuhotspoty), &ScrollLeftCursor, 0);
|
|
set_Xcursor(dsp, (char *)vertscroll_cursor.cuimage, (int)vertscroll_cursor.cuhotspotx,
|
|
(int)(15 - vertscroll_cursor.cuhotspoty), &VertScrollCursor, 0);
|
|
set_Xcursor(dsp, (char *)vertthumb_cursor.cuimage, (int)vertthumb_cursor.cuhotspotx,
|
|
(int)(15 - vertthumb_cursor.cuhotspoty), &VertThumbCursor, 0);
|
|
set_Xcursor(dsp, (char *)horizscroll_cursor.cuimage, (int)horizscroll_cursor.cuhotspotx,
|
|
(int)(15 - horizscroll_cursor.cuhotspoty), &HorizScrollCursor, 0);
|
|
set_Xcursor(dsp, (char *)horizthumb_cursor.cuimage, (int)horizthumb_cursor.cuhotspotx,
|
|
(int)(15 - horizthumb_cursor.cuhotspoty), &HorizThumbCursor, 0);
|
|
set_Xcursor(dsp, (char *)scrollright_cursor.cuimage, (int)scrollright_cursor.cuhotspotx,
|
|
(int)(15 - scrollright_cursor.cuhotspoty), &ScrollRightCursor, 0);
|
|
set_Xcursor(dsp, (char *)scrollup_cursor.cuimage, (int)scrollup_cursor.cuhotspotx,
|
|
(int)(15 - scrollup_cursor.cuhotspoty), &ScrollUpCursor, 0);
|
|
|
|
/********************************/
|
|
/* Make all the toolkit windows */
|
|
/********************************/
|
|
dsp->VerScrollBar = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col2,
|
|
0 - dsp->InternalBorderWidth, /* y */
|
|
dsp->ScrollBarWidth, /* width */
|
|
dsp->Visible.height, dsp->InternalBorderWidth,
|
|
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
|
|
DefineCursor(dsp->display_id, dsp->VerScrollBar, &VertScrollCursor);
|
|
XMapWindow(dsp->display_id, dsp->VerScrollBar);
|
|
|
|
dsp->HorScrollBar = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow,
|
|
0 - dsp->InternalBorderWidth, Row2, /* y */
|
|
dsp->Visible.width, /* width */
|
|
dsp->ScrollBarWidth, dsp->InternalBorderWidth,
|
|
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
|
|
DefineCursor(dsp->display_id, dsp->HorScrollBar, &HorizScrollCursor);
|
|
XChangeWindowAttributes(dsp->display_id, dsp->HorScrollBar, CWOverrideRedirect,
|
|
&Lisp_SetWinAttributes);
|
|
XMapWindow(dsp->display_id, dsp->HorScrollBar);
|
|
|
|
dsp->VerScrollButton = XCreateSimpleWindow(
|
|
dsp->display_id, dsp->VerScrollBar, 0 - dsp->InternalBorderWidth, /* x */
|
|
(int)((dsp->Visible.y * dsp->Visible.height) / dsp->Display.height), /* y */
|
|
dsp->ScrollBarWidth, /* width */
|
|
(int)((dsp->Visible.height * dsp->Visible.height) / dsp->Display.height) + 1,
|
|
dsp->InternalBorderWidth, BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
|
|
XChangeWindowAttributes(dsp->display_id, dsp->VerScrollButton, CWOverrideRedirect,
|
|
&Lisp_SetWinAttributes);
|
|
XSetWindowBackgroundPixmap(dsp->display_id, dsp->VerScrollButton, dsp->ScrollBarPixmap);
|
|
XClearWindow(dsp->display_id, dsp->VerScrollButton);
|
|
XMapWindow(dsp->display_id, dsp->VerScrollButton);
|
|
|
|
dsp->HorScrollButton = XCreateSimpleWindow(
|
|
dsp->display_id, dsp->HorScrollBar,
|
|
(int)((dsp->Visible.x * dsp->Visible.width) / dsp->Display.width),
|
|
0 - dsp->InternalBorderWidth, /* y */
|
|
(int)((dsp->Visible.width * dsp->Visible.width) / dsp->Display.width) + 1,
|
|
dsp->ScrollBarWidth, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
|
|
WhitePixelOfScreen(screen));
|
|
XChangeWindowAttributes(dsp->display_id, dsp->HorScrollButton, CWOverrideRedirect,
|
|
&Lisp_SetWinAttributes);
|
|
XSetWindowBackgroundPixmap(dsp->display_id, dsp->HorScrollButton, dsp->ScrollBarPixmap);
|
|
XClearWindow(dsp->display_id, dsp->HorScrollButton);
|
|
XMapWindow(dsp->display_id, dsp->HorScrollButton);
|
|
|
|
dsp->NWGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col2, Row2, GravSize,
|
|
GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
|
|
WhitePixelOfScreen(screen));
|
|
XSetWindowBackgroundPixmap(dsp->display_id, dsp->NWGrav, dsp->GravityOnPixmap);
|
|
DefineCursor(dsp->display_id, dsp->NWGrav, &DefaultCursor);
|
|
XChangeWindowAttributes(dsp->display_id, dsp->NWGrav, CWOverrideRedirect, &Lisp_SetWinAttributes);
|
|
XClearWindow(dsp->display_id, dsp->NWGrav);
|
|
XMapWindow(dsp->display_id, dsp->NWGrav);
|
|
|
|
dsp->SEGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col3, Row3, GravSize,
|
|
GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
|
|
WhitePixelOfScreen(screen));
|
|
XSetWindowBackgroundPixmap(dsp->display_id, dsp->SEGrav, dsp->GravityOffPixmap);
|
|
DefineCursor(dsp->display_id, dsp->SEGrav, &DefaultCursor);
|
|
XChangeWindowAttributes(dsp->display_id, dsp->SEGrav, CWOverrideRedirect, &Lisp_SetWinAttributes);
|
|
XClearWindow(dsp->display_id, dsp->NWGrav);
|
|
XMapWindow(dsp->display_id, dsp->SEGrav);
|
|
|
|
dsp->SWGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col2, Row3, GravSize,
|
|
GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
|
|
WhitePixelOfScreen(screen));
|
|
XSetWindowBackgroundPixmap(dsp->display_id, dsp->SWGrav, dsp->GravityOffPixmap);
|
|
DefineCursor(dsp->display_id, dsp->SWGrav, &DefaultCursor);
|
|
XClearWindow(dsp->display_id, dsp->NWGrav);
|
|
XMapWindow(dsp->display_id, dsp->SWGrav);
|
|
|
|
dsp->NEGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col3, Row2, GravSize,
|
|
GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
|
|
WhitePixelOfScreen(screen));
|
|
XSetWindowBackgroundPixmap(dsp->display_id, dsp->NEGrav, dsp->GravityOffPixmap);
|
|
DefineCursor(dsp->display_id, dsp->NEGrav, &DefaultCursor);
|
|
XClearWindow(dsp->display_id, dsp->NWGrav);
|
|
XMapWindow(dsp->display_id, dsp->NEGrav);
|
|
|
|
/* DefineCursor( dsp->display_id, dsp->DisplayWindow, &WaitCursor ); */
|
|
|
|
XLOCK;
|
|
XMapWindow(dsp->display_id, dsp->LispWindow);
|
|
XFlush(dsp->display_id);
|
|
XUNLOCK;
|
|
}
|
|
|
|
void lisp_Xvideocolor(int flag)
|
|
{
|
|
XLOCK;
|
|
XCopyArea(currentdsp->display_id, currentdsp->DisplayWindow, currentdsp->DisplayWindow,
|
|
currentdsp->Copy_GC, 0, 0, currentdsp->Visible.width, currentdsp->Visible.height, 0,
|
|
0);
|
|
|
|
/* Cursor */
|
|
gcv.function = GXcopy;
|
|
XChangeGC(currentdsp->display_id, cursor_source_gc, GCFunction, &gcv);
|
|
/* JDS 011213: Remember set_xcursor does 15-y val, so do it here! */
|
|
Set_XCursor(Current_Hot_X, 15 - Current_Hot_Y);
|
|
|
|
XFlush(currentdsp->display_id);
|
|
XUNLOCK;
|
|
|
|
} /* end lisp_Xvideocolor */
|
|
|
|
extern int Current_Hot_X, Current_Hot_Y; /* Cursor hotspot */
|
|
|
|
void set_Xmouseposition(int x, int y)
|
|
{
|
|
int dest_x, dest_y;
|
|
|
|
TPRINT(("set_Xmouseposition(%d,%d)\n", x, y));
|
|
|
|
dest_x = (x & 0xFFFF) + Current_Hot_X - currentdsp->Visible.x;
|
|
dest_y = (y & 0xFFFF) + Current_Hot_Y - currentdsp->Visible.y;
|
|
|
|
if ((dest_x >= 0) && (dest_x <= currentdsp->Visible.width) && (dest_y >= 0) &&
|
|
(dest_y <= currentdsp->Visible.height)) {
|
|
XLOCK;
|
|
XWarpPointer(currentdsp->display_id, (Window)NULL, currentdsp->DisplayWindow, 0, 0, 0, 0,
|
|
dest_x, dest_y);
|
|
XFlush(currentdsp->display_id);
|
|
XUNLOCK;
|
|
}
|
|
} /* end set_Xmouseposition */
|
|
|
|
/************************************************************************/
|
|
/* */
|
|
/* D o R i n g */
|
|
/* */
|
|
/* Take keyboard events and turn them into Lisp event info */
|
|
/* (when running under X) */
|
|
/* */
|
|
/************************************************************************/
|
|
|
|
void DoRing() {
|
|
DLword w, r;
|
|
KBEVENT *kbevent;
|
|
|
|
TPRINT(("TRACE: DoRing()\n"));
|
|
|
|
do_ring:
|
|
if (((*EmKbdAd268K) & 2113) == 0) { /*Ctrl-shift-NEXT*/
|
|
error("****** EMERGENCY Interrupt ******");
|
|
*EmKbdAd268K = KB_ALLUP; /*reset*/
|
|
((RING *)CTopKeyevent)->read = 0; /* reset queue */
|
|
((RING *)CTopKeyevent)->write = MINKEYEVENT;
|
|
/*return(0);*/
|
|
} else if (((*EmKbdAd268K) & 2114) == 0) { /* Ctrl-Shift-DEL */
|
|
*EmKbdAd268K = KB_ALLUP; /*reset*/
|
|
URaid_req = T;
|
|
((RING *)CTopKeyevent)->read = 0; /* reset queue */
|
|
((RING *)CTopKeyevent)->write = MINKEYEVENT;
|
|
/*return(0);*/
|
|
}
|
|
|
|
#ifdef OS4_TYPE4BUG
|
|
else if (((*EmKbdAd268K) & 2120) == 0) { /* Ctrl-Shift-Return */
|
|
*EmKbdAd268K = KB_ALLUP; /*reset*/
|
|
URaid_req = T;
|
|
((RING *)CTopKeyevent)->read = 0; /* reset queue */
|
|
((RING *)CTopKeyevent)->write = MINKEYEVENT;
|
|
}
|
|
#endif
|
|
|
|
r = RING_READ(CTopKeyevent);
|
|
w = RING_WRITE(CTopKeyevent);
|
|
|
|
if (r == w) /* event queqe FULL */
|
|
goto KBnext;
|
|
|
|
kbevent = (KBEVENT *)(CTopKeyevent + w);
|
|
/* RCLK(kbevent->time); */
|
|
kbevent->W0 = *EmKbdAd068K;
|
|
kbevent->W1 = *EmKbdAd168K;
|
|
kbevent->W2 = *EmKbdAd268K;
|
|
kbevent->W3 = *EmKbdAd368K;
|
|
kbevent->W4 = *EmKbdAd468K;
|
|
kbevent->W5 = *EmKbdAd568K;
|
|
kbevent->WU = *EmRealUtilin68K;
|
|
|
|
if (r == 0) /* Queue was empty */
|
|
((RING *)CTopKeyevent)->read = w;
|
|
if (w >= MAXKEYEVENT)
|
|
((RING *)CTopKeyevent)->write = MINKEYEVENT;
|
|
else
|
|
((RING *)CTopKeyevent)->write = w + KEYEVENTSIZE;
|
|
|
|
KBnext:
|
|
if (*KEYBUFFERING68k == NIL) *KEYBUFFERING68k = ATOM_T;
|
|
}
|