summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Jennings <mej@kainx.org>2000-04-18 05:16:00 +0000
committerMichael Jennings <mej@kainx.org>2000-04-18 05:16:00 +0000
commit1e9bf450c4c0c81c6957482234b34de4051aa54e (patch)
treed454a97078ded8227a41ef6873a56af059a6d8a3
parent84e12faee35223a1fbc591a4a45a1b838e535e9e (diff)
downloadeterm-1e9bf450c4c0c81c6957482234b34de4051aa54e.tar.gz
Mon Apr 17 22:25:27 PDT 2000 Michael Jennings <mej@eterm.org>
I fixed the problem reported by Joakim Bodin <bodin@dreamhosted.com> with spawned processes. Also fixed Esetroot as reported by Wayne Johnson <bigman1@alltel.net>. Support for buttons higher than 5 was also added to the action bindings code for those (like me) with IntelliMouse Explorers and XFree86 4.0. :-) SVN revision: 2494
-rw-r--r--ChangeLog11
-rw-r--r--src/actions.c1
-rw-r--r--src/command.c4
-rw-r--r--src/events.c4
-rw-r--r--src/options.c9
-rw-r--r--src/pixmap.c16
-rw-r--r--src/system.c2
-rw-r--r--utils/Esetroot.c7
8 files changed, 36 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index 530b73e..ce5a15e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3488,3 +3488,14 @@ Thu Apr 13 21:15:03 PDT 2000 Michael Jennings <mej@eterm.org>
Fixed an image loading problem.
-------------------------------------------------------------------------------
+Mon Apr 17 22:25:27 PDT 2000 Michael Jennings <mej@eterm.org>
+
+ I fixed the problem reported by Joakim Bodin <bodin@dreamhosted.com>
+ with spawned processes. Also fixed Esetroot as reported by Wayne
+ Johnson <bigman1@alltel.net>.
+
+ Support for buttons higher than 5 was also added to the action
+ bindings code for those (like me) with IntelliMouse Explorers and
+ XFree86 4.0. :-)
+
+-------------------------------------------------------------------------------
diff --git a/src/actions.c b/src/actions.c
index 5902be3..a404360 100644
--- a/src/actions.c
+++ b/src/actions.c
@@ -83,6 +83,7 @@ action_dispatch(event_t *ev, KeySym keysym) {
unsigned int m = (AltMask | MetaMask | NumLockMask);
ASSERT(ev != NULL);
+ D_ACTIONS(("Event %8p: Button %d, Keysym 0x%08x, Key State 0x%08x\n", ev, ev->xbutton.button, keysym, ev->xkey.state));
for (action = action_list; action; action = action->next) {
D_ACTIONS(("Checking action. mod == 0x%08x, button == %d, keysym == 0x%08x\n", action->mod, action->button, action->keysym));
if (ev->xany.type == ButtonPress) {
diff --git a/src/command.c b/src/command.c
index b6c33da..49dc727 100644
--- a/src/command.c
+++ b/src/command.c
@@ -1028,7 +1028,7 @@ handle_child_signal(int sig)
/* If the child that exited is the command we spawned, or if the
child exited before fork() returned in the parent, it must be
our immediate child that exited. We exit gracefully. */
- if (pid == cmd_pid || cmd_pid == -1) {
+ if (pid == cmd_pid && cmd_pid != -1) {
if (Options & Opt_pause) {
const char *message = "\r\nPress any key to exit " APL_NAME "....";
@@ -2151,7 +2151,7 @@ run_command(char *argv[])
my_euid = my_ruid;
my_egid = my_rgid;
- /* command interpreter path */
+ usleep(10); /* Attempt to force a context switch so that the parent runs before us. */
D_CMD(("[%d] About to spawn shell\n", getpid()));
if (chdir(initial_dir)) {
print_warning("Unable to chdir to \"%s\" -- %s\n", initial_dir, strerror(errno));
diff --git a/src/events.c b/src/events.c
index 036fffa..0770ecb 100644
--- a/src/events.c
+++ b/src/events.c
@@ -779,8 +779,8 @@ xerror_handler(Display * display, XErrorEvent * event)
strcpy(err_string, "");
XGetErrorText(display, event->error_code, err_string, sizeof(err_string));
- print_error("XError in function %s (request %d.%d): %s (error %d)", request_code_to_name(event->request_code),
- event->request_code, event->minor_code, err_string, event->error_code);
+ print_error("XError in function %s, resource 0x%08x (request %d.%d): %s (error %d)", request_code_to_name(event->request_code),
+ (int) event->resourceid, event->request_code, event->minor_code, err_string, event->error_code);
#if DEBUG > DEBUG_X11
if (debug_level >= DEBUG_X11) {
dump_stack_trace();
diff --git a/src/options.c b/src/options.c
index 649a7ed..cb862ad 100644
--- a/src/options.c
+++ b/src/options.c
@@ -2914,14 +2914,7 @@ parse_actions(char *buff, void *state)
} else if (!BEG_STRCASECMP(str, "mod5")) {
mod |= MOD_MOD5;
} else if (!BEG_STRCASECMP(str, "button")) {
- switch (*(str+6)) {
- case '1': button = Button1; break;
- case '2': button = Button2; break;
- case '3': button = Button3; break;
- case '4': button = Button4; break;
- case '5': button = Button5; break;
- default: break;
- }
+ button = *(str + 6) - '0';
} else if (isdigit(*str)) {
keysym = (KeySym) strtoul(str, (char **) NULL, 0);
} else {
diff --git a/src/pixmap.c b/src/pixmap.c
index fe24dd1..a7013c1 100644
--- a/src/pixmap.c
+++ b/src/pixmap.c
@@ -571,6 +571,12 @@ create_viewport_pixmap(simage_t *simg, Drawable d, int x, int y, unsigned short
D_PIXMAP(("Tiling image at %dx%d\n", xsize, ysize));
imlib_render_pixmaps_for_whole_image(&viewport_pixmap, &mask, 0);
}
+ if (viewport_pixmap == None) {
+ print_error("Delayed image load failure for \"%s\". Using solid color mode.", imlib_image_get_filename());
+ image_set_mode(image_bg, MODE_SOLID);
+ reset_simage(simg, RESET_ALL_SIMG);
+ return None;
+ }
D_PIXMAP(("Created viewport_pixmap == 0x%08x\n", viewport_pixmap));
} else {
XGetGeometry(Xdisplay, viewport_pixmap, &dummy, &px, &py, &pw, &ph, &pb, &pd);
@@ -725,7 +731,11 @@ paste_simage(simage_t *simg, unsigned char which, Drawable d, unsigned short x,
} else {
imlib_render_pixmaps_for_whole_image_at_size(&pmap, &mask, 0, w, h);
}
- ASSERT(pmap != None);
+ if (pmap == None) {
+ print_error("Delayed image load failure for \"%s\".", imlib_image_get_filename());
+ reset_simage(simg, RESET_ALL_SIMG);
+ return;
+ }
gc = XCreateGC(Xdisplay, d, 0, NULL);
if (mask) {
XSetClipMask(Xdisplay, gc, mask);
@@ -1083,6 +1093,10 @@ render_simage(simage_t * simg, Window win, unsigned short width, unsigned short
and handle exposes by copying from simg->pmap->pixmap. */
XSetWindowBackgroundPixmap(Xdisplay, win, simg->pmap->pixmap);
}
+ } else {
+ print_error("Delayed image load failure for \"%s\". Using solid color mode.", imlib_image_get_filename());
+ image_set_mode(which, MODE_SOLID);
+ reset_simage(simg, RESET_ALL_SIMG);
}
} else {
image_set_mode(which, MODE_SOLID);
diff --git a/src/system.c b/src/system.c
index 3baa989..0808eb5 100644
--- a/src/system.c
+++ b/src/system.c
@@ -99,7 +99,6 @@ system_wait(char *command)
D_OPTIONS(("system_wait(%s) called.\n", command));
- old_handler = signal(SIGCHLD, dummy_handler);
if (!(pid = fork())) {
setreuid(my_ruid, my_ruid);
setregid(my_rgid, my_rgid);
@@ -120,7 +119,6 @@ system_no_wait(char *command)
D_OPTIONS(("system_no_wait(%s) called.\n", command));
- old_handler = signal(SIGCHLD, dummy_handler);
if (!(pid = fork())) {
setreuid(my_ruid, my_ruid);
setregid(my_rgid, my_rgid);
diff --git a/utils/Esetroot.c b/utils/Esetroot.c
index afbed25..f22914b 100644
--- a/utils/Esetroot.c
+++ b/utils/Esetroot.c
@@ -97,7 +97,7 @@ main(int argc, char *argv[])
char *displayname = NULL;
char *fname = NULL;
Imlib_Image im;
- Pixmap p, temp_pmap;
+ Pixmap p, temp_pmap, m;
register unsigned char i;
GC gc;
XGCValues gcv;
@@ -166,7 +166,7 @@ main(int argc, char *argv[])
}
imlib_context_set_display(Xdisplay);
imlib_context_set_visual(DefaultVisual(Xdisplay, DefaultScreen(Xdisplay)));
- im = imlib_load_image(fname);
+ im = imlib_load_image_immediately(fname);
if (im == NULL) {
fprintf(stderr, "%s: Unable to load image file \"%s\".\n", *argv, fname);
exit(1);
@@ -214,7 +214,8 @@ main(int argc, char *argv[])
imlib_context_set_anti_alias(1);
imlib_context_set_dither(1);
imlib_context_set_blend(0);
- imlib_render_pixmaps_for_whole_image_at_size(&temp_pmap, NULL, 0, w, h);
+ imlib_context_set_drawable(Xroot);
+ imlib_render_pixmaps_for_whole_image_at_size(&temp_pmap, &m, 0, w, h);
if (debug) {
fprintf(stderr, "%s:%d: Rendered at %dx%d onto pixmap 0x%08x\n", __FILE__, __LINE__, w, h, (unsigned int) temp_pmap);
}