[Xfce4-commits] [xfce/xfwm4] 01/01: hints: Some more XError traps

noreply at xfce.org noreply at xfce.org
Sun May 12 15:52:57 CEST 2019


This is an automated email from the git hooks/post-receive script.

o   l   i   v   i   e   r       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository xfce/xfwm4.

commit 944769cfeaa459de3e31145e798822e2c63d2b4c
Author: Olivier Fourdan <fourdan at xfce.org>
Date:   Sun May 12 15:47:56 2019 +0200

    hints: Some more XError traps
    
    And a bit of cleanup.
    
    Signed-off-by: Olivier Fourdan <fourdan at xfce.org>
---
 src/hints.c | 98 ++++++++++++++++++++++---------------------------------------
 1 file changed, 35 insertions(+), 63 deletions(-)

diff --git a/src/hints.c b/src/hints.c
index 7ab9354..38cf731 100644
--- a/src/hints.c
+++ b/src/hints.c
@@ -711,7 +711,7 @@ getTransientFor (DisplayInfo *display_info, Window root, Window w, Window * tran
 }
 
 static char *
-text_property_to_utf8 (DisplayInfo *display_info, const XTextProperty * prop)
+textPropertyToUTF8 (DisplayInfo *display_info, const XTextProperty * prop)
 {
     char **list;
     int count;
@@ -734,31 +734,35 @@ text_property_to_utf8 (DisplayInfo *display_info, const XTextProperty * prop)
 }
 
 static char *
-get_text_property (DisplayInfo *display_info, Window w, Atom a)
+getTextProperty (DisplayInfo *display_info, Window w, Atom a)
 {
     XTextProperty text;
     char *retval;
+    int result, status;
 
     TRACE ("window 0x%lx", w);
 
     text.nitems = 0;
-    if (XGetTextProperty (display_info->dpy, w, &text, a))
+    text.value = NULL;
+
+    myDisplayErrorTrapPush (display_info);
+    status = XGetTextProperty (display_info->dpy, w, &text, a);
+    result = myDisplayErrorTrapPop (display_info);
+
+    if ((result == Success) && status)
     {
-        retval = text_property_to_utf8 (display_info, &text);
+        retval = textPropertyToUTF8 (display_info, &text);
         if (retval)
         {
             xfce_utf8_remove_controls((gchar *) retval, MAX_STR_LENGTH, NULL);
         }
-        if ((text.value) && (text.nitems > 0))
-        {
-            XFree (text.value);
-        }
     }
     else
     {
         retval = NULL;
         TRACE ("XGetTextProperty() failed");
     }
+    XFree (text.value);
 
     return retval;
 }
@@ -945,29 +949,20 @@ getWindowProp (DisplayInfo *display_info, Window window, int atom_id, Window *w)
 gboolean
 getWindowHostname (DisplayInfo *display_info, Window w, gchar **machine)
 {
-    char *str;
-    gboolean status;
-
     TRACE ("window 0x%lx", w);
 
     g_return_val_if_fail (machine != NULL, FALSE);
-    *machine = NULL;
     g_return_val_if_fail (w != None, FALSE);
     g_return_val_if_fail (display_info != NULL, FALSE);
 
-    status = FALSE;
-    str = get_text_property (display_info, w, display_info->atoms[WM_CLIENT_MACHINE]);
-    if (str)
-    {
-        *machine = g_strndup (str, MAX_STR_LENGTH);
-        XFree (str);
-        status = TRUE;
-    }
-    else
+    *machine = getTextProperty (display_info, w, display_info->atoms[WM_CLIENT_MACHINE]);
+    if (*machine == NULL)
     {
         *machine = g_strdup ("");
+        return FALSE;
     }
-    return status;
+
+    return TRUE;
 }
 
 gboolean
@@ -975,7 +970,6 @@ getWindowName (DisplayInfo *display_info, Window w, gchar **name)
 {
     char *str;
     guint len;
-    gboolean status;
 
     TRACE ("window 0x%lx", w);
 
@@ -983,47 +977,38 @@ getWindowName (DisplayInfo *display_info, Window w, gchar **name)
     *name = NULL;
     g_return_val_if_fail (w != None, FALSE);
 
-    status = FALSE;
-    if (getUTF8StringData (display_info, w, NET_WM_NAME, &str, &len) ||
-        (str = get_text_property (display_info, w, XA_WM_NAME)))
+    if (getUTF8StringData (display_info, w, NET_WM_NAME, &str, &len))
     {
         *name = internal_utf8_strndup (str, MAX_STR_LENGTH);
         xfce_utf8_remove_controls(*name, -1, NULL);
         XFree (str);
-        status = TRUE;
+        return TRUE;
     }
-    else
+
+    *name = getTextProperty (display_info, w, XA_WM_NAME);
+    if (*name == NULL)
     {
         *name = g_strdup ("");
+        return FALSE;
     }
-    return status;
+
+    xfce_utf8_remove_controls(*name, -1, NULL);
+
+    return TRUE;
 }
 
 gboolean
 getWindowRole (DisplayInfo *display_info, Window window, gchar **role)
 {
-    XTextProperty tp;
+    int status, result;
 
     g_return_val_if_fail (role != NULL, FALSE);
-    *role = NULL;
     g_return_val_if_fail (window != None, FALSE);
     TRACE ("window 0x%lx", window);
 
-    if (XGetTextProperty (display_info->dpy, window, &tp, display_info->atoms[WM_WINDOW_ROLE]))
-    {
-        if (tp.value)
-        {
-            if ((tp.encoding == XA_STRING) && (tp.format == 8) && (tp.nitems != 0))
-            {
-                *role = g_strdup ((gchar *) tp.value);
-                XFree (tp.value);
-                return TRUE;
-            }
-            XFree (tp.value);
-        }
-    }
+    *role = getTextProperty (display_info, window, display_info->atoms[WM_WINDOW_ROLE]);
 
-    return FALSE;
+    return (*role != NULL);
 }
 
 Window
@@ -1036,6 +1021,7 @@ getClientLeader (DisplayInfo *display_info, Window window)
 
     client_leader = None;
     getWindowProp (display_info, window, WM_CLIENT_LEADER, &client_leader);
+
     return client_leader;
 }
 
@@ -1107,18 +1093,10 @@ getClientID (DisplayInfo *display_info, Window window, gchar **client_id)
 
     if (getWindowProp (display_info, window, WM_CLIENT_LEADER, &id) && (id != None))
     {
-        if (XGetTextProperty (display_info->dpy, id, &tp, display_info->atoms[SM_CLIENT_ID]))
-        {
-            if (tp.encoding == XA_STRING && tp.format == 8 && tp.nitems != 0)
-            {
-                *client_id = g_strdup ((gchar *) tp.value);
-                XFree (tp.value);
-                return TRUE;
-            }
-        }
+        *client_id = getTextProperty (display_info, id, display_info->atoms[SM_CLIENT_ID]);
     }
 
-    return FALSE;
+    return (*client_id != NULL);
 }
 
 gboolean
@@ -1463,14 +1441,8 @@ getWindowStartupId (DisplayInfo *display_info, Window w, gchar **startup_id)
         return TRUE;
     }
 
-    str = get_text_property (display_info, w, NET_STARTUP_ID);
-    if (str)
-    {
-        *startup_id = g_strdup (str);
-        XFree (str);
-        return TRUE;
-    }
+    *startup_id = getTextProperty (display_info, w, display_info->atoms[NET_STARTUP_ID]);
 
-    return FALSE;
+    return (*startup_id != NULL);
 }
 #endif

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list