aboutsummaryrefslogtreecommitdiff
path: root/apps/xwininfo
diff options
context:
space:
mode:
Diffstat (limited to 'apps/xwininfo')
-rw-r--r--apps/xwininfo/dsimple.c38
-rw-r--r--apps/xwininfo/xwininfo.c101
2 files changed, 71 insertions, 68 deletions
diff --git a/apps/xwininfo/dsimple.c b/apps/xwininfo/dsimple.c
index 23b81848a..c09b192d5 100644
--- a/apps/xwininfo/dsimple.c
+++ b/apps/xwininfo/dsimple.c
@@ -442,92 +442,92 @@ Print_X_Error (
switch (err->error_code)
{
case XCB_REQUEST:
- snprintf (buffer, sizeof(buffer), ": Bad Request");
+ snprintf (buffer, sizeof(buffer), "Bad Request");
break;
case XCB_VALUE:
snprintf (buffer, sizeof(buffer),
- ": Bad Value: 0x%x", err->resource_id);
+ "Bad Value: 0x%x", err->resource_id);
break;
case XCB_WINDOW:
snprintf (buffer, sizeof(buffer),
- ": Bad Window: 0x%x", err->resource_id);
+ "Bad Window: 0x%x", err->resource_id);
break;
case XCB_PIXMAP:
snprintf (buffer, sizeof(buffer),
- ": Bad Pixmap: 0x%x", err->resource_id);
+ "Bad Pixmap: 0x%x", err->resource_id);
break;
case XCB_ATOM:
snprintf (buffer, sizeof(buffer),
- ": Bad Atom: 0x%x", err->resource_id);
+ "Bad Atom: 0x%x", err->resource_id);
break;
case XCB_CURSOR:
snprintf (buffer, sizeof(buffer),
- ": Bad Cursor: 0x%x", err->resource_id);
+ "Bad Cursor: 0x%x", err->resource_id);
break;
case XCB_FONT:
snprintf (buffer, sizeof(buffer),
- ": Bad Font: 0x%x", err->resource_id);
+ "Bad Font: 0x%x", err->resource_id);
break;
case XCB_MATCH:
- snprintf (buffer, sizeof(buffer), ": Bad Match");
+ snprintf (buffer, sizeof(buffer), "Bad Match");
break;
case XCB_DRAWABLE:
snprintf (buffer, sizeof(buffer),
- ": Bad Drawable: 0x%x", err->resource_id);
+ "Bad Drawable: 0x%x", err->resource_id);
break;
case XCB_ACCESS:
- snprintf (buffer, sizeof(buffer), ": Access Denied");
+ snprintf (buffer, sizeof(buffer), "Access Denied");
break;
case XCB_ALLOC:
snprintf (buffer, sizeof(buffer),
- ": Server Memory Allocation Failure");
+ "Server Memory Allocation Failure");
break;
case XCB_COLORMAP:
snprintf (buffer, sizeof(buffer),
- ": Bad Color: 0x%x", err->resource_id);
+ "Bad Color: 0x%x", err->resource_id);
break;
case XCB_G_CONTEXT:
snprintf (buffer, sizeof(buffer),
- ": Bad GC: 0x%x", err->resource_id);
+ "Bad GC: 0x%x", err->resource_id);
break;
case XCB_ID_CHOICE:
snprintf (buffer, sizeof(buffer),
- ": Bad XID: 0x%x", err->resource_id);
+ "Bad XID: 0x%x", err->resource_id);
break;
case XCB_NAME:
snprintf (buffer, sizeof(buffer),
- ": Bad Name");
+ "Bad Name");
break;
case XCB_LENGTH:
snprintf (buffer, sizeof(buffer),
- ": Bad Request Length");
+ "Bad Request Length");
break;
case XCB_IMPLEMENTATION:
snprintf (buffer, sizeof(buffer),
- ": Server Implementation Failure");
+ "Server Implementation Failure");
break;
default:
- snprintf (buffer, sizeof(buffer), ": Unknown error");
+ snprintf (buffer, sizeof(buffer), "Unknown error");
break;
}
- fprintf (stderr, "X Error: %d%s\n", err->error_code, buffer);
+ fprintf (stderr, "X Error: %d: %s\n", err->error_code, buffer);
}
fprintf (stderr, " Request Major code: %d\n", err->major_code);
diff --git a/apps/xwininfo/xwininfo.c b/apps/xwininfo/xwininfo.c
index af1354d46..a69efddc8 100644
--- a/apps/xwininfo/xwininfo.c
+++ b/apps/xwininfo/xwininfo.c
@@ -248,14 +248,14 @@ static void Display_Window_Shape (xcb_window_t);
static void Display_WM_Info (struct wininfo *);
static void wininfo_wipe (struct wininfo *);
-static const char *window_id_format = "0x%lx";
+static Bool window_id_format_dec = False;
#ifdef HAVE_ICONV
static iconv_t iconv_from_utf8;
#endif
static const char *user_encoding;
static void print_utf8 (const char *, char *, size_t, const char *);
-static void print_friendly_name (const char *, const char *, const char *);
+static char *get_friendly_name (const char *, const char *);
static xcb_connection_t *dpy;
static xcb_screen_t *screen;
@@ -423,6 +423,19 @@ bscale (int b)
return (nscale (b, bp, bmm, bbuf, sizeof(bbuf)));
}
+static const char *
+window_id_str (xcb_window_t id)
+{
+ static char str[20];
+
+ if (window_id_format_dec)
+ snprintf (str, sizeof(str), "%u", id);
+ else
+ snprintf (str, sizeof(str), "0x%x", id);
+
+ return str;
+}
+
/* end of pixel to inch, metric converter */
int
@@ -478,7 +491,7 @@ main (int argc, char **argv)
continue;
}
if (!strcmp (argv[i], "-int")) {
- window_id_format = "%ld";
+ window_id_format_dec = True;
continue;
}
if (!strcmp (argv[i], "-children")) {
@@ -586,13 +599,10 @@ main (int argc, char **argv)
w->geometry = xcb_get_geometry_reply(dpy, gg_cookie, &err);
if (!w->geometry) {
- char badid[20];
-
if (err)
Print_X_Error (dpy, err);
- snprintf (badid, sizeof(badid), window_id_format, window);
- Fatal_Error ("No such window with id %s.", badid);
+ Fatal_Error ("No such window with id %s.", window_id_str (window));
}
}
@@ -805,7 +815,7 @@ Display_Window_Id (struct wininfo *w, Bool newline_wanted)
unsigned int wm_name_len = 0;
xcb_atom_t wm_name_encoding = XCB_NONE;
- printf (window_id_format, w->window); /* print id # in hex/dec */
+ printf ("%s", window_id_str (w->window));
if (!w->window) {
printf (" (none)");
@@ -1635,6 +1645,20 @@ wm_hints_reply (xcb_connection_t *dpy, xcb_get_property_cookie_t cookie,
#endif
static void
+Display_Atom_Name (xcb_atom_t atom, const char *prefix)
+{
+ const char *atom_name = Get_Atom_Name (dpy, atom);
+
+ if (atom_name) {
+ char *friendly_name = get_friendly_name (atom_name, prefix);
+ printf (" %s\n", friendly_name);
+ free (friendly_name);
+ } else {
+ printf (" (unresolvable ATOM 0x%x)\n", atom);
+ }
+}
+
+static void
Display_WM_Info (struct wininfo *w)
{
xcb_icccm_wm_hints_t wmhints;
@@ -1698,17 +1722,8 @@ Display_WM_Info (struct wininfo *w)
if (atom_count > 0) {
printf (" Window type:\n");
- for (i = 0; i < atom_count; i++) {
- const char *atom_name = Get_Atom_Name (dpy, atoms[i]);
-
- if (atom_name) {
- print_friendly_name (" %s\n", atom_name,
- "_NET_WM_WINDOW_TYPE_");
- } else {
- printf (" (unresolvable ATOM 0x%x)\n",
- atoms[i]);
- }
- }
+ for (i = 0; i < atom_count; i++)
+ Display_Atom_Name (atoms[i], "_NET_WM_WINDOW_TYPE_");
}
}
free (prop);
@@ -1722,17 +1737,8 @@ Display_WM_Info (struct wininfo *w)
if (atom_count > 0) {
printf (" Window state:\n");
- for (i = 0; i < atom_count; i++) {
- const char *atom_name = Get_Atom_Name (dpy, atoms[i]);
-
- if (atom_name) {
- print_friendly_name (" %s\n", atom_name,
- "_NET_WM_STATE_");
- } else {
- printf (" (unresolvable ATOM 0x%x)\n",
- atoms[i]);
- }
- }
+ for (i = 0; i < atom_count; i++)
+ Display_Atom_Name (atoms[i], "_NET_WM_STATE_");
}
}
free (prop);
@@ -1947,14 +1953,14 @@ print_utf8 (const char *prefix, char *u8str, size_t length, const char *suffix)
/*
* Takes a string such as an atom name, strips the prefix, converts
* underscores to spaces, lowercases all but the first letter of each word,
- * and prints it.
+ * and returns it. The returned string should be freed by the caller.
*/
-static void
-print_friendly_name (const char *format, const char *string,
- const char *prefix)
+static char *
+get_friendly_name (const char *string, const char *prefix)
{
const char *name_start = string;
char *lowered_name, *n;
+ Bool first = True;
int prefix_len = strlen (prefix);
if (strncmp (name_start, prefix, prefix_len) == 0) {
@@ -1962,22 +1968,19 @@ print_friendly_name (const char *format, const char *string,
}
lowered_name = strdup (name_start);
- if (lowered_name) {
- Bool first = True;
-
- for (n = lowered_name ; *n != 0 ; n++) {
- if (*n == '_') {
- *n = ' ';
- first = True;
- } else if (first) {
- first = False;
- } else {
- *n = tolower(*n);
- }
+ if (lowered_name == NULL)
+ Fatal_Error ("Failed to allocate memory in get_friendly_name");
+
+ for (n = lowered_name ; *n != 0 ; n++) {
+ if (*n == '_') {
+ *n = ' ';
+ first = True;
+ } else if (first) {
+ first = False;
+ } else {
+ *n = tolower(*n);
}
- name_start = lowered_name;
}
- printf (format, name_start);
- free (lowered_name);
+ return lowered_name;
}