Mon Oct 11 15:54:52 PDT 1999 Michael Jennings <mej@eterm.org>

Lots of cleanups here, including a couple fixes for bugs noticed by
	Tom Gilbert <gilbertt@tomgilbert.freeserve.co.uk> and Martin Tyler
	<martin@boo.org>.  Also removed the requirement of glibc 2.1 for using
	SVR4-style pty's (/dev/pts/*) under Linux.


SVN revision: 798
This commit is contained in:
Michael Jennings 1999-10-11 18:37:55 +00:00
parent 11b7b87dad
commit 332269133d
23 changed files with 187 additions and 534 deletions

View File

@ -2562,3 +2562,11 @@ Fri Oct 8 15:31:49 PDT 1999 Michael Jennings <mej@eterm.org>
I hope it does anyway). I hope it does anyway).
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Mon Oct 11 15:54:52 PDT 1999 Michael Jennings <mej@eterm.org>
Lots of cleanups here, including a couple fixes for bugs noticed by
Tom Gilbert <gilbertt@tomgilbert.freeserve.co.uk> and Martin Tyler
<martin@boo.org>. Also removed the requirement of glibc 2.1 for using
SVR4-style pty's (/dev/pts/*) under Linux.
-------------------------------------------------------------------------------

View File

@ -290,9 +290,9 @@
#undef HAVE_X_SHAPE_EXT #undef HAVE_X_SHAPE_EXT
/* Support for various features */ /* Support for various features */
#undef USE_ACTIVE_TAGS #undef HAVE_DEV_PTC
#undef USE_POSIX_THREADS #undef HAVE_DEV_PTMX
#undef MUTEX_SYNCH #undef HAVE_SCO_PTYS
#undef PIXMAP_SUPPORT #undef PIXMAP_SUPPORT
#undef PIXMAP_OFFSET #undef PIXMAP_OFFSET
#undef BACKING_STORE #undef BACKING_STORE

View File

@ -155,6 +155,9 @@ AC_CHECK_FUNC(logout,
)) ))
AC_CHECK_FUNC(getpwuid, , AC_CHECK_LIB(sun, getpwuid, LIBS="$LIBS -lsun")) AC_CHECK_FUNC(getpwuid, , AC_CHECK_LIB(sun, getpwuid, LIBS="$LIBS -lsun"))
dnl#
dnl# Utility stuff
dnl#
dnl# Did they want debugging? dnl# Did they want debugging?
AC_MSG_CHECKING(for debugging level) AC_MSG_CHECKING(for debugging level)
AC_ARG_WITH(debugging, [ --with-debugging[=num] enable debugging output, num is an optional level], AC_ARG_WITH(debugging, [ --with-debugging[=num] enable debugging output, num is an optional level],
@ -172,6 +175,27 @@ AC_ARG_WITH(debugging, [ --with-debugging[=num] enable debugging output, num i
AC_DEFINE_UNQUOTED(DEBUG, 4) AC_DEFINE_UNQUOTED(DEBUG, 4)
) )
dnl# Check for the appropriate pty mechanism
AC_MSG_CHECKING(for pty mechanism)
PTY_MECH=""
if test -e /dev/ptc ; then
AC_DEFINE(HAVE_DEV_PTC)
PTY_MECH="AIX $PTY_MECH"
fi
if test -e /dev/ptmx ; then
AC_DEFINE(HAVE_DEV_PTMX)
PTY_MECH="SVR4 $PTY_MECH"
fi
if test -e /dev/ptyp128 ; then
AC_DEFINE(HAVE_SCO_PTYS)
PTY_MECH="SCO $PTY_MECH"
fi
if test "X$PTY_MECH" = "X"; then
AC_MSG_RESULT(generic pty's only)
else
AC_MSG_RESULT($PTY_MECH)
fi
dnl# dnl#
dnl# FEATURES dnl# FEATURES
dnl# dnl#
@ -184,7 +208,6 @@ AC_ARG_WITH(imlib,
GRLIBS="-lImlib" GRLIBS="-lImlib"
AC_DEFINE(PIXMAP_SUPPORT) AC_DEFINE(PIXMAP_SUPPORT)
AC_DEFINE(PIXMAP_SCROLLBAR) AC_DEFINE(PIXMAP_SCROLLBAR)
AC_DEFINE(PIXMAP_MENUBAR)
AC_DEFINE(BACKING_STORE) AC_DEFINE(BACKING_STORE)
else else
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
@ -193,7 +216,6 @@ AC_ARG_WITH(imlib,
GRLIBS="-lImlib" GRLIBS="-lImlib"
AC_DEFINE(PIXMAP_SUPPORT) AC_DEFINE(PIXMAP_SUPPORT)
AC_DEFINE(PIXMAP_SCROLLBAR) AC_DEFINE(PIXMAP_SCROLLBAR)
AC_DEFINE(PIXMAP_MENUBAR)
AC_DEFINE(BACKING_STORE) AC_DEFINE(BACKING_STORE)
) )
AC_MSG_CHECKING(for transparency support) AC_MSG_CHECKING(for transparency support)

View File

@ -3,7 +3,7 @@
lib_LTLIBRARIES = libEterm.la lib_LTLIBRARIES = libEterm.la
libEterm_la_SOURCES = actions.c command.c e.c events.c font.c graphics.c grkelot.c menus.c misc.c netdisp.c \ libEterm_la_SOURCES = actions.c command.c e.c events.c font.c graphics.c grkelot.c menus.c misc.c netdisp.c \
options.c pixmap.c screen.c scrollbar.c startup.c system.c term.c threads.c timer.c utmp.c windows.c options.c pixmap.c screen.c scrollbar.c startup.c system.c term.c timer.c utmp.c windows.c
libEterm_la_DEPENDENCIES = $(top_builddir)/libmej/libmej.la feature.h libEterm_la_DEPENDENCIES = $(top_builddir)/libmej/libmej.la feature.h
libEterm_la_LDFLAGS = -version-info 9:0:9 libEterm_la_LDFLAGS = -version-info 9:0:9
@ -16,5 +16,5 @@ INCLUDES = -I. -I$(top_srcdir) -I$(top_srcdir)/libmej -I.. -I$(includedir) -I$(p
LDADD = libEterm.la $(top_builddir)/libmej/libmej.la -L$(libdir) -L$(prefix)/lib $(LIBS) $(GRLIBS) $(X_LIBS) LDADD = libEterm.la $(top_builddir)/libmej/libmej.la -L$(libdir) -L$(prefix)/lib $(LIBS) $(GRLIBS) $(X_LIBS)
EXTRA_DIST = actions.h command.h debug.h e.h eterm_utmp.h events.h feature.h font.h graphics.h grkelot.h grx.h menus.h misc.h options.h \ EXTRA_DIST = actions.h command.h debug.h e.h eterm_utmp.h events.h feature.h font.h graphics.h grkelot.h grx.h menus.h misc.h options.h \
pixmap.h profile.h screen.h scrollbar.h startup.h system.h term.h threads.h timer.h windows.h graphics/Makefile.am \ pixmap.h profile.h screen.h scrollbar.h startup.h system.h term.h timer.h windows.h graphics/Makefile.am \
graphics/Makefile.in graphics/README graphics/data graphics/grxlib.c graphics/grxlib.h graphics/qplot.c Eterm.xpm graphics/Makefile.in graphics/README graphics/data graphics/grxlib.c graphics/grxlib.h graphics/qplot.c Eterm.xpm

View File

@ -133,9 +133,6 @@ static const char cvs_ident[] = "$Id$";
#include "scrollbar.h" #include "scrollbar.h"
#include "string.h" #include "string.h"
#include "term.h" #include "term.h"
#ifdef USE_POSIX_THREADS
# include "threads.h"
#endif
#ifdef UTMP_SUPPORT #ifdef UTMP_SUPPORT
# include "eterm_utmp.h" # include "eterm_utmp.h"
#endif #endif
@ -1117,14 +1114,6 @@ clean_exit(void)
cleanutent(); cleanutent();
#endif #endif
privileges(REVERT); privileges(REVERT);
#ifdef USE_POSIX_THREADS
/* Get rid of threads if there are any running. Doesn't work yet. */
# if 0
D_THREADS(("pthread_kill_other_threads_np();\n"));
pthread_kill_other_threads_np();
D_THREADS(("pthread_exit();\n"));
# endif
#endif
} }
/* Acquire a pseudo-teletype from the system. */ /* Acquire a pseudo-teletype from the system. */
@ -1149,7 +1138,7 @@ sgi_get_pty(void)
} }
#endif #endif
#ifdef _AIX #ifdef HAVE_DEV_PTC
inline int inline int
aix_get_pty(void) aix_get_pty(void)
{ {
@ -1164,7 +1153,7 @@ aix_get_pty(void)
} }
#endif #endif
#ifdef ALL_NUMERIC_PTYS #ifdef HAVE_SCO_PTYS
inline int inline int
sco_get_pty(void) sco_get_pty(void)
{ {
@ -1196,7 +1185,7 @@ sco_get_pty(void)
} }
#endif #endif
#if defined (__svr4__) || defined(__CYGWIN32__) || ((__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 1)) #ifdef HAVE_DEV_PTMX
inline int inline int
svr_get_pty(void) svr_get_pty(void)
{ {
@ -1263,13 +1252,11 @@ get_pty(void)
#if defined(__sgi) #if defined(__sgi)
fd = sgi_get_pty(); fd = sgi_get_pty();
#elif defined(_AIX) #elif defined(HAVE_DEV_PTC)
fd = aix_get_pty(); fd = aix_get_pty();
#elif defined(__svr4__) || defined(__CYGWIN32__) #elif defined(HAVE_DEV_PTMX)
fd = svr_get_pty(); fd = svr_get_pty();
#elif ((__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 1)) #elif defined(HAVE_SCO_PTYS)
fd = svr_get_pty();
#elif defined(ALL_NUMERIC_PTYS) /* SCO OSr5 */
fd = sco_get_pty(); fd = sco_get_pty();
#endif #endif
@ -2192,11 +2179,6 @@ run_command(char *argv[])
privileges(IGNORE); privileges(IGNORE);
#endif #endif
#if 0
D_THREADS(("run_command(): pthread_join(resize_sub_thr)\n"));
pthread_join(resize_sub_thr, NULL);
#endif
D_CMD(("run_command() returning\n")); D_CMD(("run_command() returning\n"));
return (ptyfd); return (ptyfd);
} }
@ -2541,9 +2523,7 @@ tt_printf(const unsigned char *fmt,...)
tt_write(buf, strlen(buf)); tt_write(buf, strlen(buf));
} }
#ifndef USE_POSIX_THREADS
/* Read and process output from the application */ /* Read and process output from the application */
void void
main_loop(void) main_loop(void)
{ {
@ -2623,7 +2603,6 @@ main_loop(void)
} }
} while (ch != EOF); } while (ch != EOF);
} }
#endif
/* output a burst of any pending data from a paste... */ /* output a burst of any pending data from a paste... */
int int

View File

@ -328,15 +328,6 @@ extern char initial_dir[PATH_MAX+1];
extern unsigned long PrivateModes; extern unsigned long PrivateModes;
extern Atom wmDeleteWindow; extern Atom wmDeleteWindow;
extern int refresh_count, refresh_limit, refresh_type; extern int refresh_count, refresh_limit, refresh_type;
#ifdef USE_POSIX_THREADS
extern static void **retval;
extern static int join_value;
extern static pthread_t main_loop_thr;
extern static pthread_attr_t main_loop_attr;
# ifdef MUTEX_SYNCH
extern pthread_mutex_t mutex;
# endif
#endif
#ifdef USE_XIM #ifdef USE_XIM
extern XIC Input_Context; /* input context */ extern XIC Input_Context; /* input context */
#endif #endif

View File

@ -104,8 +104,6 @@ extern unsigned int debug_level;
# define D_ENL(x) DPRINTF2(x) # define D_ENL(x) DPRINTF2(x)
# define DEBUG_SCROLLBAR 2 # define DEBUG_SCROLLBAR 2
# define D_SCROLLBAR(x) DPRINTF2(x) # define D_SCROLLBAR(x) DPRINTF2(x)
# define DEBUG_THREADS 2
# define D_THREADS(x) DPRINTF2(x)
# define DEBUG_TIMER 2 # define DEBUG_TIMER 2
# define D_TIMER(x) DPRINTF2(x) # define D_TIMER(x) DPRINTF2(x)

View File

@ -410,7 +410,7 @@ handle_configure_notify(event_t * ev)
REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &primary_data), 0); REQUIRE_RVAL(XEVENT_IS_MYWIN(ev, &primary_data), 0);
while (XCheckTypedWindowEvent(Xdisplay, ev->xany.window, ConfigureNotify, &unused_xevent)); while (XCheckTypedWindowEvent(Xdisplay, ev->xany.window, ConfigureNotify, &unused_xevent));
resize_window(); handle_external_resize();
#ifdef USE_XIM #ifdef USE_XIM
xim_set_status_position(); xim_set_status_position();
#endif #endif

View File

@ -64,10 +64,6 @@
# undef HAVE_SYS_IOCTL_H # undef HAVE_SYS_IOCTL_H
# endif # endif
# ifdef _SCO_DS /* SCO Osr5 */
# define ALL_NUMERIC_PTYS /* Scos pty naming is /dev/[pt]typ0 - /dev/[pt]ty256 */
# endif
/********************* Debugging stuff *********************/ /********************* Debugging stuff *********************/
/* As Keith Bunge would say, don't crap with the debugging stuff below /* As Keith Bunge would say, don't crap with the debugging stuff below
* unless you develop this mess. :^) -- mej * unless you develop this mess. :^) -- mej

View File

@ -405,7 +405,7 @@ change_font(int init, const char *fontname)
if (!init) { if (!init) {
font_change_count++; font_change_count++;
resize(); parent_resize();
} }
return; return;
} }

View File

@ -525,9 +525,6 @@ version(void)
#if DEBUG >= DEBUG_SCROLLBAR #if DEBUG >= DEBUG_SCROLLBAR
printf(" +DEBUG_SCROLLBAR"); printf(" +DEBUG_SCROLLBAR");
#endif #endif
#if DEBUG >= DEBUG_THREADS
printf(" +DEBUG_THREADS");
#endif
#if DEBUG >= DEBUG_MENU #if DEBUG >= DEBUG_MENU
printf(" +DEBUG_MENU"); printf(" +DEBUG_MENU");
#endif #endif
@ -573,16 +570,6 @@ version(void)
#else #else
printf(" -PIXMAP_SUPPORT"); printf(" -PIXMAP_SUPPORT");
#endif #endif
#ifdef USE_POSIX_THREADS
printf(" +USE_POSIX_THREADS");
#else
printf(" -USE_POSIX_THREADS");
#endif
#ifdef MUTEX_SYNCH
printf(" +MUTEX_SYNCH");
#else
printf(" -MUTEX_SYNCH");
#endif
#ifdef PIXMAP_OFFSET #ifdef PIXMAP_OFFSET
printf(" +PIXMAP_OFFSET"); printf(" +PIXMAP_OFFSET");
#else #else

View File

@ -48,9 +48,6 @@ static const char cvs_ident[] = "$Id$";
# include "scrollbar.h" # include "scrollbar.h"
#endif #endif
#include "term.h" #include "term.h"
#ifdef USE_POSIX_THREADS
# include "threads.h"
#endif
#include "Eterm.xpm" /* Icon pixmap */ #include "Eterm.xpm" /* Icon pixmap */
#ifdef PIXMAP_SUPPORT #ifdef PIXMAP_SUPPORT

View File

@ -165,9 +165,6 @@ extern void reset_simage(simage_t *, unsigned long);
extern void paste_simage(simage_t *, unsigned char, Window, unsigned short, unsigned short, unsigned short, unsigned short); extern void paste_simage(simage_t *, unsigned char, Window, unsigned short, unsigned short, unsigned short, unsigned short);
extern void redraw_image(unsigned char); extern void redraw_image(unsigned char);
extern void render_simage(simage_t *, Window, unsigned short, unsigned short, unsigned char, renderop_t); extern void render_simage(simage_t *, Window, unsigned short, unsigned short, unsigned char, renderop_t);
#ifdef USE_POSIX_THREADS
extern void init_bg_pixmap_thread(void *);
#endif
extern const char *search_path(const char *, const char *, const char *); extern const char *search_path(const char *, const char *, const char *);
extern unsigned short load_image(const char *, short); extern unsigned short load_image(const char *, short);
extern void free_desktop_pixmap(void); extern void free_desktop_pixmap(void);

View File

@ -38,9 +38,6 @@ static const char cvs_ident[] = "$Id$";
# include "profile.h" # include "profile.h"
#endif #endif
#include "term.h" #include "term.h"
#ifdef USE_POSIX_THREADS
# include "threads.h"
#endif
/* This tells what's actually on the screen */ /* This tells what's actually on the screen */
static text_t **drawn_text = NULL; static text_t **drawn_text = NULL;
@ -1822,9 +1819,6 @@ scr_refresh(int type)
P_SETTIMEVAL(cnt.start); P_SETTIMEVAL(cnt.start);
#endif #endif
#ifdef USE_POSIX_THREADS
check_bg_pixmap();
#endif
row_offset = TermWin.saveLines - TermWin.view_start; row_offset = TermWin.saveLines - TermWin.view_start;
fprop = TermWin.fprop; fprop = TermWin.fprop;

View File

@ -670,6 +670,36 @@ scrollbar_reset(void)
scrollBar.init = 0; scrollBar.init = 0;
} }
void
scrollbar_resize(int width, int height)
{
if (!scrollbar_visible()) {
return;
}
D_SCROLLBAR(("scrollbar_resize(%d, %d)\n", width, height));
scrollBar.beg = 0;
scrollBar.end = height;
#ifdef MOTIF_SCROLLBAR
if (scrollBar.type == SCROLLBAR_MOTIF) {
/* arrows are as high as wide - leave 1 pixel gap */
scrollBar.beg += scrollbar_arrow_height() + scrollbar_get_shadow() + 1;
scrollBar.end -= scrollbar_arrow_height() + scrollbar_get_shadow() + 1;
}
#endif
#ifdef NEXT_SCROLLBAR
if (scrollBar.type == SCROLLBAR_NEXT) {
scrollBar.beg = scrollbar_get_shadow();
scrollBar.end -= (scrollBar.width * 2 + (scrollbar_get_shadow() ? scrollbar_get_shadow() : 1) + 2);
}
#endif
width -= scrollbar_trough_width();
XMoveResizeWindow(Xdisplay, scrollBar.win, ((Options & Opt_scrollBar_right) ? (width) : (0)), 0, scrollbar_trough_width(), height);
scrollBar.init = 0;
scrollbar_show(0);
}
unsigned char unsigned char
scrollbar_show(short mouseoffset) scrollbar_show(short mouseoffset)
{ {
@ -677,8 +707,9 @@ scrollbar_show(short mouseoffset)
unsigned char xsb = 0, force_update = 0; unsigned char xsb = 0, force_update = 0;
static int focus = -1; static int focus = -1;
if (!scrollbar_visible()) if (!scrollbar_visible()) {
return 0; return 0;
}
D_SCROLLBAR(("scrollbar_show(%d)\n", mouseoffset)); D_SCROLLBAR(("scrollbar_show(%d)\n", mouseoffset));
@ -733,20 +764,6 @@ scrollbar_show(short mouseoffset)
focus = TermWin.focus; focus = TermWin.focus;
gcvalue.foreground = PixColors[focus ? scrollColor : unfocusedScrollColor]; gcvalue.foreground = PixColors[focus ? scrollColor : unfocusedScrollColor];
#if 0
# ifdef PIXMAP_OFFSET
if (!((Options & Opt_scrollBar_floating) && image_mode_is(image_sb, (MODE_TRANS | MODE_VIEWPORT)))) {
# endif
if (scrollbar_is_pixmapped()) {
XSetWindowBackgroundPixmap(Xdisplay, scrollBar.win, images[image_sb].current->pmap->pixmap);
} else {
XSetWindowBackground(Xdisplay, scrollBar.win, gcvalue.foreground);
}
XClearWindow(Xdisplay, scrollBar.win);
# ifdef PIXMAP_OFFSET
}
# endif /* PIXMAP_OFFSET */
#endif
XChangeGC(Xdisplay, scrollbarGC, GCForeground, &gcvalue); XChangeGC(Xdisplay, scrollbarGC, GCForeground, &gcvalue);
gcvalue.foreground = PixColors[focus ? topShadowColor : unfocusedTopShadowColor]; gcvalue.foreground = PixColors[focus ? topShadowColor : unfocusedTopShadowColor];

View File

@ -102,7 +102,7 @@
: ((scrollBar.type == SCROLLBAR_NEXT) ? (scrollBar.end + scrollBar.width + 2) : (scrollBar.end + 1))) : ((scrollBar.type == SCROLLBAR_NEXT) ? (scrollBar.end + scrollBar.width + 2) : (scrollBar.end + 1)))
/* Scrollbar operations */ /* Scrollbar operations */
#define map_scrollbar(show) do {if (scrollbar_mapping(show)) {scr_touch(); resize();} PrivMode(show, PrivMode_scrollBar); } while (0) #define map_scrollbar(show) do {if (scrollbar_mapping(show)) {scr_touch(); parent_resize();} PrivMode(show, PrivMode_scrollBar); } while (0)
#define scrollbar_get_shadow() (scrollBar.shadow) #define scrollbar_get_shadow() (scrollBar.shadow)
#define scrollbar_set_shadow(s) do { scrollBar.shadow = (s); } while (0) #define scrollbar_set_shadow(s) do { scrollBar.shadow = (s); } while (0)
#define scrollbar_get_win() (scrollBar.win) #define scrollbar_get_win() (scrollBar.win)
@ -155,6 +155,7 @@ extern unsigned char sb_handle_motion_notify(event_t *);
extern unsigned char scrollbar_dispatch_event(event_t *); extern unsigned char scrollbar_dispatch_event(event_t *);
extern unsigned char scrollbar_mapping(unsigned char); extern unsigned char scrollbar_mapping(unsigned char);
extern void scrollbar_reset(void); extern void scrollbar_reset(void);
extern void scrollbar_resize(int, int);
extern unsigned char scrollbar_show(short); extern unsigned char scrollbar_show(short);
_XFUNCPROTOEND _XFUNCPROTOEND

View File

@ -58,9 +58,6 @@ static const char cvs_ident[] = "$Id$";
#include "screen.h" #include "screen.h"
#include "scrollbar.h" #include "scrollbar.h"
#include "term.h" #include "term.h"
#ifdef USE_POSIX_THREADS
# include "threads.h"
#endif
#include "windows.h" #include "windows.h"
char *orig_argv0; char *orig_argv0;
@ -71,15 +68,6 @@ char *orig_argv0;
Window Maker *cough*) -- mej */ Window Maker *cough*) -- mej */
short bg_needs_update = 1; short bg_needs_update = 1;
#endif #endif
#ifdef USE_POSIX_THREADS
static void **retval;
static int join_value;
static pthread_t main_loop_thr;
static pthread_attr_t main_loop_attr;
# ifdef MUTEX_SYNCH
pthread_mutex_t mutex;
# endif
#endif
TermWin_t TermWin; TermWin_t TermWin;
Display *Xdisplay; /* display */ Display *Xdisplay; /* display */
Colormap cmap; Colormap cmap;
@ -98,12 +86,6 @@ eterm_bootstrap(int argc, char *argv[])
orig_argv0 = argv[0]; orig_argv0 = argv[0];
#ifdef USE_POSIX_THREADS
# ifdef MUTEX_SYNCH
pthread_atfork((void *) &prepare, (void *) &parent, (void *) &child);
# endif
#endif
/* Security enhancements -- mej */ /* Security enhancements -- mej */
putenv("IFS= \t\n"); putenv("IFS= \t\n");
my_ruid = getuid(); my_ruid = getuid();
@ -121,14 +103,6 @@ eterm_bootstrap(int argc, char *argv[])
/* This MUST be called before any other Xlib functions */ /* This MUST be called before any other Xlib functions */
#ifdef USE_POSIX_THREADS
if (XInitThreads()) {
D_THREADS(("XInitThreads() succesful\n"));
} else {
D_THREADS(("XInitThreads() failed, I'm outta here\n"));
}
#endif
get_initial_options(argc, argv); get_initial_options(argc, argv);
#ifdef NEED_LINUX_HACK #ifdef NEED_LINUX_HACK
privileges(INVOKE); /* xdm in new Linux versions requires ruid != root to open the display -- mej */ privileges(INVOKE); /* xdm in new Linux versions requires ruid != root to open the display -- mej */
@ -304,24 +278,11 @@ eterm_bootstrap(int argc, char *argv[])
D_CMD(("init_command()\n")); D_CMD(("init_command()\n"));
init_command(rs_execArgs); init_command(rs_execArgs);
#ifndef USE_POSIX_THREADS
if (Options & Opt_borderless) { if (Options & Opt_borderless) {
resize_window(); handle_external_resize();
} }
#endif
#ifdef USE_POSIX_THREADS main_loop();
D_THREADS(("main_thread:"));
pthread_attr_init(&main_loop_attr);
pthread_create(&main_loop_thr, &main_loop_attr,
(void *) &main_thread, NULL);
D_THREADS(("done? :)\n"));
while (1);
/* main_loop(); */
#else
main_loop(); /* main processing loop */
#endif
return (EXIT_SUCCESS); return (EXIT_SUCCESS);
} }
/* EOF */

View File

@ -1579,33 +1579,36 @@ set_title(const char *str)
char *name; char *name;
if (XFetchName(Xdisplay, TermWin.parent, &name)) if (XFetchName(Xdisplay, TermWin.parent, &name) == 0) {
name = NULL; name = NULL;
if (name == NULL || strcmp(name, str)) }
if (name == NULL || strcmp(name, str)) {
XStoreName(Xdisplay, TermWin.parent, str); XStoreName(Xdisplay, TermWin.parent, str);
if (name) }
if (name) {
XFree(name); XFree(name);
}
} }
#else
# define set_title(str) XStoreName(Xdisplay, TermWin.parent, str)
#endif
#ifdef SMART_WINDOW_TITLE
static void static void
set_iconName(const char *str) set_icon_name(const char *str)
{ {
char *name; char *name;
if (XGetIconName(Xdisplay, TermWin.parent, &name)) if (XGetIconName(Xdisplay, TermWin.parent, &name) == 0) {
name = NULL; name = NULL;
if (name == NULL || strcmp(name, str)) }
if (name == NULL || strcmp(name, str)) {
XSetIconName(Xdisplay, TermWin.parent, str); XSetIconName(Xdisplay, TermWin.parent, str);
if (name) }
if (name) {
XFree(name); XFree(name);
}
} }
#else #else
# define set_iconName(str) XSetIconName(Xdisplay, TermWin.parent, str) # define set_title(str) XStoreName(Xdisplay, TermWin.parent, str)
# define set_icon_name(str) XSetIconName(Xdisplay, TermWin.parent, str)
#endif #endif
/* /*
@ -1659,7 +1662,7 @@ xterm_seq(int op, const char *str)
case XTerm_name: case XTerm_name:
set_title(str); /* drop */ set_title(str); /* drop */
case XTerm_iconName: case XTerm_iconName:
set_iconName(str); set_icon_name(str);
break; break;
case XTerm_Takeover: case XTerm_Takeover:
XSetInputFocus(Xdisplay, TermWin.parent, RevertToParent, CurrentTime); XSetInputFocus(Xdisplay, TermWin.parent, RevertToParent, CurrentTime);
@ -1673,8 +1676,8 @@ xterm_seq(int op, const char *str)
Syntax: ESC ] 6 ; <op> ; <arg> BEL Syntax: ESC ] 6 ; <op> ; <arg> BEL
where <op> is: 0 Set/toggle transparency where <op> is: 0 Set/toggle transparency
1 Set color modifiers 1 Set color modifiers
3 Force update of pseudo-transparent background 3 Force update of pseudo-transparent background
10 Set scrollbar type/width 10 Set scrollbar type/width
11 Set/toggle right-side scrollbar 11 Set/toggle right-side scrollbar
12 Set/toggle floating scrollbar 12 Set/toggle floating scrollbar

View File

@ -148,6 +148,11 @@ enum color_list {
default: PrivMode(state, bit); break; \ default: PrivMode(state, bit); break; \
}} while (0) }} while (0)
#ifndef SMART_WINDOW_TITLE
# define set_title(str) XStoreName(Xdisplay, TermWin.parent, str)
# define set_icon_name(str) XSetIconName(Xdisplay, TermWin.parent, str)
#endif
/************ Variables ************/ /************ Variables ************/
#ifdef META8_OPTION #ifdef META8_OPTION
extern unsigned char meta_char; /* Alt-key prefix */ extern unsigned char meta_char; /* Alt-key prefix */

View File

@ -1,221 +0,0 @@
/* threads.c for Eterm
* Feb 25 1998, vendu
*/
static const char cvs_ident[] = "$Id$";
#include "config.h"
#include "feature.h"
#include <stdio.h>
#ifdef USE_POSIX_THREADS
# include "startup.h"
# include "debug.h"
# include "screen.h"
# ifdef PIXMAP_SUPPORT
# include "pixmap.h"
# endif
/* extern char *sig_to_str(int sig); */
# ifdef USE_IMLIB
extern imlib_t imlib_bg;
# endif
# include "threads.h"
extern int refresh_count, refresh_limit;
extern unsigned char *cmdbuf_base, *cmdbuf_ptr, *cmdbuf_endp;
extern unsigned char cmd_getc(void);
# ifdef MUTEX_SYNCH
/* pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; */
# endif
short bg_set = 0;
pthread_t resize_sub_thr;
pthread_attr_t resize_sub_thr_attr;
# ifdef MUTEX_SYNCH
void
prepare(void *dummy)
{
D_THREADS(("prepare(): pthread_mutex_trylock(&mutex)\n"));
pthread_mutex_trylock(&mutex);
}
void
parent(void *dummy)
{
D_THREADS(("parent(): pthread_mutex_unlock(&mutex)\n"));
pthread_mutex_unlock(&mutex);
}
void
child(void *dummy)
{
D_THREADS(("child(): pthread_mutex_unlock(&mutex)\n"));
pthread_mutex_unlock(&mutex);
}
# endif
inline void
refresh_termwin(void)
{
scrollbar_show(0);
scr_touch();
}
void
render_bg_thread(void *dummy)
{
void *retval = NULL;
D_THREADS(("render_bg_thread() entered\n"));
if (bg_set) {
# ifdef AGGRESSIVE_THREADS
;
# else
D_THREADS(("Background already set\n"));
# endif
}
# ifdef MUTEX_SYNCH
if (pthread_mutex_trylock(&mutex) != EBUSY) {
D_THREADS(("pthread_mutex_trylock(&mutex): "));
} else {
D_THREADS(("mutex already locked\n"));
}
# endif
D_THREADS(("pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);\n"));
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);
D_THREADS(("pthread_detach();\n"));
pthread_detach(resize_sub_thr);
D_THREADS(("render_bg_thread(): render_pixmap()\n"));
render_pixmap(TermWin.vt, imlib_bg, bgPixmap, 0, 1);
D_THREADS(("refresh_termwin()\n"));
refresh_termwin();
bg_set = 1;
# ifdef MUTEX_SYNCH
D_THREADS(("pthread_mutex_unlock(&mutex);\n"));
pthread_mutex_unlock(&mutex);
# endif
D_THREADS(("pthread_exit()\n"));
pthread_exit(retval);
}
/* Read and process output from the application - threaded version. */
void
main_thread(void *ignored)
{
register int ch;
D_THREADS(("[%d] main_thread() entered\n", getpid()));
D_CMD(("bg_set = %d\n", bg_set));
do {
while ((ch = cmd_getc()) == 0); /* wait for something */
if (ch >= ' ' || ch == '\t' || ch == '\n' || ch == '\r') {
/* Read a text string from the input buffer */
int nlines = 0;
/* unsigned char * str; */
register unsigned char *str;
/*
* point to the start of the string,
* decrement first since already did get_com_char ()
*/
str = --cmdbuf_ptr;
while (cmdbuf_ptr < cmdbuf_endp) {
ch = *cmdbuf_ptr++;
if (ch >= ' ' || ch == '\t' || ch == '\r') {
/* nothing */
} else if (ch == '\n') {
nlines++;
if (++refresh_count >= (refresh_limit * (TermWin.nrow - 1)))
break;
} else { /* unprintable */
cmdbuf_ptr--;
break;
}
}
scr_add_lines(str, nlines, (cmdbuf_ptr - str));
} else {
switch (ch) {
# ifdef NO_VT100_ANS
case 005:
break;
# else
case 005:
tt_printf(VT100_ANS);
break; /* terminal Status */
# endif
case 007:
scr_bell();
break; /* bell */
case '\b':
scr_backspace();
break; /* backspace */
case 013:
case 014:
scr_index(UP);
break; /* vertical tab, form feed */
case 016:
scr_charset_choose(1);
break; /* shift out - acs */
case 017:
scr_charset_choose(0);
break; /* shift in - acs */
case 033:
process_escape_seq();
break;
}
}
} while (ch != EOF);
}
inline void
check_bg_pixmap(void)
{
if (bg_set) {
# ifdef MUTEX_SYNCH
if (pthread_mutex_trylock(&mutex) == EBUSY) {
D_THREADS(("cmd_getc(): mutex locked, bbl\n"));
} else
# endif
{
# ifdef MUTEX_SYNCH
D_THREADS(("cmd_getc(): pthread_mutex_trylock(&mutex): "));
# endif
D_THREADS(("refresh_termwin() "));
refresh_termwin();
# ifdef MUTEX_SYNCH
D_THREADS(("pthread_mutex_unlock(&mutex);\n"));
pthread_mutex_unlock(&mutex);
# endif
/* bg_set = 0; */
}
bg_set = 0;
/* main_thread(NULL); */
}
}
#endif /* USE_POSIX_THREADS */

View File

@ -1,33 +0,0 @@
/* threads.h for Eterm
* 25 Feb 1998, vendu
*/
#ifndef _THREADS_H
# define _THREADS_H
# ifdef USE_POSIX_THREADS
# ifdef PIXMAP_SUPPORT
# include "pixmap.h"
# include <X11/Xthreads.h>
# endif
short bg_set;
pthread_attr_t resize_sub_thr_attr;
pthread_t resize_sub_thr;
extern void main_thread(void *);
extern void render_bg_thread(void *);
extern void check_bg_pixmap(void);
# ifdef MUTEX_SYNCH
extern pthread_mutex_t mutex;
extern void prepare(void *dummy);
extern void parent(void *dummy);
extern void child(void *dummy);
# endif
# endif /* USE_POSIX_THREADS */
#endif /* _THREADS_H */

View File

@ -474,130 +474,12 @@ Create_Windows(int argc, char *argv[])
TermWin.gc = XCreateGC(Xdisplay, TermWin.vt, GCForeground | GCBackground | GCFont | GCGraphicsExposures, &gcvalue); TermWin.gc = XCreateGC(Xdisplay, TermWin.vt, GCForeground | GCBackground | GCFont | GCGraphicsExposures, &gcvalue);
} }
if (Options & Opt_noCursor) if (Options & Opt_noCursor) {
scr_cursor_visible(0); scr_cursor_visible(0);
}
/* window resizing - assuming the parent window is the correct size */
void
resize_subwindows(int width, int height)
{
int x = 0, y = 0;
#ifdef RXVT_GRAPHICS
int old_width = TermWin.width;
int old_height = TermWin.height;
#endif
D_SCREEN(("resize_subwindows(%d, %d)\n", width, height));
TermWin.width = TermWin.ncol * TermWin.fwidth;
TermWin.height = TermWin.nrow * TermWin.fheight;
/* size and placement */
if (scrollbar_visible()) {
scrollBar.beg = 0;
scrollBar.end = height;
#ifdef MOTIF_SCROLLBAR
if (scrollBar.type == SCROLLBAR_MOTIF) {
/* arrows are as high as wide - leave 1 pixel gap */
scrollBar.beg += scrollbar_arrow_height() + scrollbar_get_shadow() + 1;
scrollBar.end -= scrollbar_arrow_height() + scrollbar_get_shadow() + 1;
}
#endif
#ifdef NEXT_SCROLLBAR
if (scrollBar.type == SCROLLBAR_NEXT) {
scrollBar.beg = scrollbar_get_shadow();
scrollBar.end -= (scrollBar.width * 2 + (scrollbar_get_shadow()? scrollbar_get_shadow() : 1) + 2);
}
#endif
width -= scrollbar_trough_width();
XMoveResizeWindow(Xdisplay, scrollBar.win, ((Options & Opt_scrollBar_right) ? (width) : (x)), 0, scrollbar_trough_width(), height);
if (scrollbar_is_pixmapped()) {
scrollbar_show(0);
}
if (!(Options & Opt_scrollBar_right)) {
x = scrollbar_trough_width();
}
}
XMoveResizeWindow(Xdisplay, TermWin.vt, x, y, width, height + 1);
#ifdef RXVT_GRAPHICS
if (old_width)
Gr_Resize(old_width, old_height);
#endif
if (!(background_is_pixmap())) {
XSetWindowBackground(Xdisplay, TermWin.vt, PixColors[bgColor]);
XClearWindow(Xdisplay, TermWin.vt);
} else {
#ifdef PIXMAP_SUPPORT
render_simage(images[image_bg].current, TermWin.vt, TermWin_TotalWidth(), TermWin_TotalHeight(), image_bg, 1);
#endif
} }
} }
void /* good for toggling 80/132 columns */
resize(void)
{
szHint.base_width = (2 * TermWin.internalBorder);
szHint.base_height = (2 * TermWin.internalBorder);
szHint.base_width += (scrollbar_visible()? scrollbar_trough_width() : 0);
szHint.min_width = szHint.base_width + szHint.width_inc;
szHint.min_height = szHint.base_height + szHint.height_inc;
szHint.width = szHint.base_width + TermWin.width;
szHint.height = szHint.base_height + TermWin.height;
szHint.flags = PMinSize | PResizeInc | PBaseSize | PWinGravity;
XSetWMNormalHints(Xdisplay, TermWin.parent, &szHint);
XResizeWindow(Xdisplay, TermWin.parent, szHint.width, szHint.height);
resize_subwindows(szHint.width, szHint.height);
}
/*
* Redraw window after exposure or size change
*/
void
resize_window1(unsigned int width, unsigned int height)
{
static short first_time = 1;
int new_ncol = (width - szHint.base_width) / TermWin.fwidth;
int new_nrow = (height - szHint.base_height) / TermWin.fheight;
if (first_time ||
(new_ncol != TermWin.ncol) ||
(new_nrow != TermWin.nrow)) {
int curr_screen = -1;
/* scr_reset only works on the primary screen */
if (!first_time) { /* this is not the first time thru */
selection_clear();
curr_screen = scr_change_screen(PRIMARY);
}
TermWin.ncol = new_ncol;
TermWin.nrow = new_nrow;
resize_subwindows(width, height);
scr_reset();
if (curr_screen >= 0) /* this is not the first time thru */
scr_change_screen(curr_screen);
first_time = 0;
} else if (image_mode_is(image_bg, MODE_TRANS) || image_mode_is(image_bg, MODE_VIEWPORT)) {
resize_subwindows(width, height);
scr_touch();
}
}
/*
* good for toggling 80/132 columns
*/
void void
set_width(unsigned short width) set_width(unsigned short width)
{ {
@ -608,28 +490,96 @@ set_width(unsigned short width)
height = szHint.base_height + height * TermWin.fheight; height = szHint.base_height + height * TermWin.fheight;
XResizeWindow(Xdisplay, TermWin.parent, width, height); XResizeWindow(Xdisplay, TermWin.parent, width, height);
resize_window1(width, height); handle_resize(width, height);
} }
} }
/*
* Redraw window after exposure or size change
*/
void void
resize_window(void) update_size_hints(void)
{
szHint.base_width = (2 * TermWin.internalBorder);
szHint.base_height = (2 * TermWin.internalBorder);
szHint.base_width += ((scrollbar_visible()) ? (scrollbar_trough_width()) : (0));
szHint.min_width = szHint.base_width + szHint.width_inc;
szHint.min_height = szHint.base_height + szHint.height_inc;
szHint.width = szHint.base_width + TermWin.width;
szHint.height = szHint.base_height + TermWin.height;
szHint.flags = PMinSize | PResizeInc | PBaseSize | PWinGravity;
XSetWMNormalHints(Xdisplay, TermWin.parent, &szHint);
}
/* Resize terminal window and scrollbar window */
void
term_resize(int width, int height)
{
D_SCREEN(("term_resize(%d, %d)\n", width, height));
TermWin.width = TermWin.ncol * TermWin.fwidth;
TermWin.height = TermWin.nrow * TermWin.fheight;
XMoveResizeWindow(Xdisplay, TermWin.vt, ((Options & Opt_scrollBar_right) ? (0) : (scrollbar_trough_width())), 0, width, height + 1);
render_simage(images[image_bg].current, TermWin.vt, TermWin_TotalWidth(), TermWin_TotalHeight(), image_bg, 1);
}
/* Resize due to font change; update size hints and child windows */
void
parent_resize(void)
{
update_size_hints();
XResizeWindow(Xdisplay, TermWin.parent, szHint.width, szHint.height);
term_resize(szHint.width, szHint.height);
scrollbar_resize(szHint.width, szHint.height);
}
void
handle_resize(unsigned int width, unsigned int height)
{
static short first_time = 1;
int new_ncol = (width - szHint.base_width) / TermWin.fwidth;
int new_nrow = (height - szHint.base_height) / TermWin.fheight;
if (first_time || (new_ncol != TermWin.ncol) || (new_nrow != TermWin.nrow)) {
int curr_screen = -1;
/* scr_reset only works on the primary screen */
if (!first_time) {
selection_clear();
curr_screen = scr_change_screen(PRIMARY);
}
TermWin.ncol = new_ncol;
TermWin.nrow = new_nrow;
term_resize(width, height);
scrollbar_resize(width, height);
scr_reset();
if (curr_screen >= 0) {
scr_change_screen(curr_screen);
}
first_time = 0;
} else if (image_mode_is(image_bg, MODE_TRANS) || image_mode_is(image_bg, MODE_VIEWPORT)) {
term_resize(width, height);
scrollbar_resize(width, height);
scr_touch();
}
}
/* Handle configure notify events telling us we've been resized */
void
handle_external_resize(void)
{ {
Window root; Window root;
int x, y; int x, y;
unsigned int border, depth, width, height; unsigned int border, depth, width, height;
/* do we come from an fontchange? */ /* If the font change count is non-zero, this event
is telling us we resized ourselves. Ignore it. */
if (font_change_count > 0) { if (font_change_count > 0) {
font_change_count--; font_change_count--;
return; return;
} }
XGetGeometry(Xdisplay, TermWin.parent, &root, &x, &y, &width, &height, &border, &depth); XGetGeometry(Xdisplay, TermWin.parent, &root, &x, &y, &width, &height, &border, &depth);
/* parent already resized */ handle_resize(width, height);
resize_window1(width, height);
} }
#ifdef XTERM_COLOR_CHANGE #ifdef XTERM_COLOR_CHANGE

View File

@ -46,11 +46,12 @@ extern void set_text_property(Window, char *, char *);
extern Pixel get_bottom_shadow_color(Pixel, const char *); extern Pixel get_bottom_shadow_color(Pixel, const char *);
extern Pixel get_top_shadow_color(Pixel, const char *); extern Pixel get_top_shadow_color(Pixel, const char *);
extern void Create_Windows(int, char * []); extern void Create_Windows(int, char * []);
extern void resize_subwindows(int, int);
extern void resize(void);
extern void resize_window1(unsigned int, unsigned int);
extern void set_width(unsigned short); extern void set_width(unsigned short);
extern void resize_window(void); extern void update_size_hints(void);
extern void term_resize(int, int);
extern void parent_resize(void);
extern void handle_resize(unsigned int, unsigned int);
extern void handle_external_resize(void);
#ifdef XTERM_COLOR_CHANGE #ifdef XTERM_COLOR_CHANGE
extern void set_window_color(int, const char *); extern void set_window_color(int, const char *);
#else #else