diff options
author | sabetts <sabetts> | 2003-02-27 12:33:00 +0000 |
---|---|---|
committer | sabetts <sabetts> | 2003-02-27 12:33:00 +0000 |
commit | 293fca91a75f15c696c2f1d9dd4227f558cfc26f (patch) | |
tree | 9fa4d15ede6975b561b07d4d8004c0885c8124fd /src/events.c | |
parent | 6b341ac568efd980ddbbbfbb2c4960204879afdb (diff) | |
download | ratpoison-293fca91a75f15c696c2f1d9dd4227f558cfc26f.zip |
* src/main.c (free_screen): new function
(clean_up): call free_screen on each screen. free the screen
array. free defaults.window_fmt.
* src/number.h (free_numbers): new prototype
* src/number.c (free_numbers): new function
* src/manage.c (get_wmname): use XGetWindowProperty to get the
window name.
(unmanaged_window): free wname after using it.
* src/main.c (wm_name): new global
(main): internalize WM_NAME atom.
(clean_up): free data structures for keybindings, aliases, the
bar, window numbers, and input history.
* src/input.h (free_history): new prototype
* src/input.c (free_history): new function
* src/events.c (execute_remote_command): free properties returned
by XGetWindowProperty().
* src/data.h (wm_name): new extern
* src/communications.c (recieve_command_result): free properties
returned by XGetWindowProperty().
* src/bar.h (free_bar): new prototype
* src/bar.c (update_window_names): bar_buffer is not static.
(update_window_names): free bar_buffer after using it.
(marked_message): free the GC after using it.
(free_bar): new function.
* src/actions.h (free_keybindings): new prototype
(free_aliases): likewise
* src/actions.c (free_keybindings): new function
(free_aliases): likewise
(cmd_tmpwm): unmap the key window before calling the new wm, and
remap it afterwards.
Diffstat (limited to 'src/events.c')
-rw-r--r-- | src/events.c | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/src/events.c b/src/events.c index c66c938..dd998b5 100644 --- a/src/events.c +++ b/src/events.c @@ -441,6 +441,7 @@ key_press (XEvent *ev) static char * execute_remote_command (Window w) { + int status; char *result = NULL; Atom type_ret; int format_ret; @@ -448,28 +449,36 @@ execute_remote_command (Window w) unsigned long bytes_after; unsigned char *req; - if (XGetWindowProperty (dpy, w, rp_command, - 0, 0, False, XA_STRING, - &type_ret, &format_ret, &nitems, &bytes_after, - &req) == Success - && - XGetWindowProperty (dpy, w, rp_command, - 0, (bytes_after / 4) + (bytes_after % 4 ? 1 : 0), - True, XA_STRING, &type_ret, &format_ret, &nitems, - &bytes_after, &req) == Success) + status = XGetWindowProperty (dpy, w, rp_command, + 0, 0, False, XA_STRING, + &type_ret, &format_ret, &nitems, &bytes_after, + &req); + + if (status != Success || req == NULL) { - if (req) - { - PRINT_DEBUG (("command: %s\n", req)); - result = command (0, req); - } - XFree (req); + PRINT_DEBUG (("Couldn't get RP_COMMAND Property\n")); + return NULL; } - else + + /* XGetWindowProperty always allocates one extra byte even if + the property is zero length. */ + XFree (req); + + status = XGetWindowProperty (dpy, w, rp_command, + 0, (bytes_after / 4) + (bytes_after % 4 ? 1 : 0), + True, XA_STRING, &type_ret, &format_ret, &nitems, + &bytes_after, &req); + + if (status != Success || req == NULL) { PRINT_DEBUG (("Couldn't get RP_COMMAND Property\n")); + return NULL; } + PRINT_DEBUG (("command: %s\n", req)); + result = command (0, req); + XFree (req); + return result; } |