summaryrefslogtreecommitdiff
path: root/src/manage.c
diff options
context:
space:
mode:
authorsabetts <sabetts>2003-02-27 12:33:00 +0000
committersabetts <sabetts>2003-02-27 12:33:00 +0000
commit293fca91a75f15c696c2f1d9dd4227f558cfc26f (patch)
tree9fa4d15ede6975b561b07d4d8004c0885c8124fd /src/manage.c
parent6b341ac568efd980ddbbbfbb2c4960204879afdb (diff)
downloadratpoison-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/manage.c')
-rw-r--r--src/manage.c47
1 files changed, 21 insertions, 26 deletions
diff --git a/src/manage.c b/src/manage.c
index 451c809..1cdb66a 100644
--- a/src/manage.c
+++ b/src/manage.c
@@ -92,37 +92,30 @@ update_normal_hints (rp_window *win)
static char *
get_wmname (Window w)
{
- char *name;
- XTextProperty text;
- char **name_list;
- int list_len;
-
- if (!XGetWMName (dpy, w, &text))
+ Atom actual_type;
+ int actual_format;
+ int status;
+ unsigned long n;
+ unsigned long bytes_after;
+ unsigned char *name = NULL;
+ char *ret;
+
+ status = XGetWindowProperty (dpy, w, wm_name, 0L, 100L, False,
+ XA_STRING, &actual_type, &actual_format,
+ &n, &bytes_after, &name);
+
+ if (status != Success || name == NULL)
{
PRINT_DEBUG (("I can't get the WMName.\n"));
return NULL;
}
- if (!XTextPropertyToStringList (&text, &name_list, &list_len))
- {
- PRINT_DEBUG (("Error retrieving TextList.\n"));
- return NULL;
- }
+ /* duplicate the string into out own buffer, and free the one given
+ to us by X. */
+ ret = xstrdup (name);
+ XFree (name);
- if (list_len > 0)
- {
- name = xmalloc (strlen (name_list[0]) + 1);
- strcpy (name, name_list[0]);
- }
- else
- {
- name = NULL;
- }
-
- /* Its our responsibility to free this. */
- XFreeStringList (name_list);
-
- return name;
+ return ret;
}
static XClassHint *
@@ -276,7 +269,7 @@ unmanage (rp_window *w)
{
return_window_number (w->number);
list_del (&w->node);
- free_window (w);
+ free_window (w);
#ifdef AUTO_CLOSE
if (rp_mapped_window_sentinel->next == rp_mapped_window_sentinel
@@ -353,6 +346,8 @@ unmanaged_window (Window w)
free (wname);
return 1;
}
+
+ free (wname);
}
return 0;