]> git.sesse.net Git - vlc/blobdiff - modules/services_discovery/xcb_apps.c
lua: fix object leaks.
[vlc] / modules / services_discovery / xcb_apps.c
index 6e35f93b09b052c539c54391c7ff3c2fc84114cb..087bf58ae3d5ea2aca41845f1feb529fcf683714 100644 (file)
@@ -32,8 +32,10 @@ typedef xcb_atom_t Atom;
 #include <vlc_dialog.h>
 #include <vlc_charset.h>
 #include <vlc_plugin.h>
+#ifdef HAVE_SEARCH_H
+# include <search.h>
+#endif
 #include <poll.h>
-#include <search.h>
 
 static int  Open (vlc_object_t *);
 static void Close (vlc_object_t *);
@@ -62,26 +64,26 @@ struct services_discovery_sys_t
     xcb_atom_t        net_client_list;
     xcb_atom_t        net_wm_name;
     xcb_window_t      root_window;
-    void             *nodes;
+    void             *apps;
 };
 
 static void *Run (void *);
-static void Update (services_discovery_t *);
-static void DelItem (void *);
-static void AddDesktopItem(services_discovery_t *);
+static void UpdateApps (services_discovery_t *);
+static void DelApp (void *);
+static void AddDesktop(services_discovery_t *);
 
 static int vlc_sd_probe_Open (vlc_object_t *obj)
 {
     vlc_probe_t *probe = (vlc_probe_t *)obj;
 
-    char *display = var_CreateGetNonEmptyString (obj, "x11-display");
+    char *display = var_InheritString (obj, "x11-display");
     xcb_connection_t *conn = xcb_connect (display, NULL);
     free (display);
     if (xcb_connection_has_error (conn))
         return VLC_PROBE_CONTINUE;
     xcb_disconnect (conn);
     return vlc_sd_probe_Add (probe, "xcb_apps{longname=\"Screen capture\"}",
-                             N_("Screen capture"), SD_CAT_MYCOMPUTER);
+                             N_("Screen capture"), SD_CAT_DEVICES);
 }
 
 /**
@@ -97,7 +99,7 @@ static int Open (vlc_object_t *obj)
     sd->p_sys = p_sys;
 
     /* Connect to X server */
-    char *display = var_CreateGetNonEmptyString (obj, "x11-display");
+    char *display = var_InheritString (obj, "x11-display");
     int snum;
     xcb_connection_t *conn = xcb_connect (display, &snum);
     free (display);
@@ -128,7 +130,7 @@ static int Open (vlc_object_t *obj)
     }
 
     /* Add a permanent item for the entire desktop */
-    AddDesktopItem (sd);
+    AddDesktop (sd);
 
     p_sys->root_window = scr->root;
     xcb_change_window_attributes (conn, scr->root, XCB_CW_EVENT_MASK,
@@ -159,8 +161,8 @@ static int Open (vlc_object_t *obj)
         free (r);
     }
 
-    p_sys->nodes = NULL;
-    Update (sd);
+    p_sys->apps = NULL;
+    UpdateApps (sd);
 
     if (vlc_clone (&p_sys->thread, Run, sd, VLC_THREAD_PRIORITY_LOW))
         goto error;
@@ -184,7 +186,7 @@ static void Close (vlc_object_t *obj)
     vlc_cancel (p_sys->thread);
     vlc_join (p_sys->thread, NULL);
     xcb_disconnect (p_sys->conn);
-    tdestroy (p_sys->nodes, DelItem);
+    tdestroy (p_sys->apps, DelApp);
     free (p_sys);
 }
 
@@ -212,7 +214,7 @@ static void *Run (void *data)
                  const xcb_property_notify_event_t *pn =
                      (xcb_property_notify_event_t *)ev;
                  if (pn->atom == p_sys->net_client_list)
-                     Update (sd);
+                     UpdateApps (sd);
             }
             free (ev);
         }
@@ -221,6 +223,7 @@ static void *Run (void *data)
     return NULL;
 }
 
+/*** Application windows ***/
 struct app
 {
     xcb_window_t          xid; /* must be first for cmpapp */
@@ -228,7 +231,7 @@ struct app
     services_discovery_t *owner;
 };
 
-static struct app *AddItem (services_discovery_t *sd, xcb_window_t xid)
+static struct app *AddApp (services_discovery_t *sd, xcb_window_t xid)
 {
     services_discovery_sys_t *p_sys = sd->p_sys;
     char *mrl, *name;
@@ -274,7 +277,7 @@ static struct app *AddItem (services_discovery_t *sd, xcb_window_t xid)
     return app;
 }
 
-static void DelItem (void *data)
+static void DelApp (void *data)
 {
     struct app *app = data;
 
@@ -295,7 +298,7 @@ static int cmpapp (const void *a, const void *b)
     return 0;
 } 
 
-static void Update (services_discovery_t *sd)
+static void UpdateApps (services_discovery_t *sd)
 {
     services_discovery_sys_t *p_sys = sd->p_sys;
     xcb_connection_t *conn = p_sys->conn;
@@ -310,7 +313,7 @@ static void Update (services_discovery_t *sd)
 
     xcb_window_t *ent = xcb_get_property_value (r);
     int n = xcb_get_property_value_length (r) / 4;
-    void *newnodes = NULL, *oldnodes = p_sys->nodes;
+    void *newnodes = NULL, *oldnodes = p_sys->apps;
 
     for (int i = 0; i < n; i++)
     {
@@ -325,23 +328,24 @@ static void Update (services_discovery_t *sd)
         }
         else /* new entry */
         {
-            app = AddItem (sd, id);
+            app = AddApp (sd, id);
             if (app == NULL)
                 continue;
         }
 
         pa = tsearch (app, &newnodes, cmpapp);
         if (pa == NULL /* OOM */ || *pa != app /* buggy window manager */)
-            DelItem (app);
+            DelApp (app);
     }
     free (r);
 
     /* Remove old nodes */
-    tdestroy (oldnodes, DelItem);
-    p_sys->nodes = newnodes;
+    tdestroy (oldnodes, DelApp);
+    p_sys->apps = newnodes;
 }
 
-static void AddDesktopItem(services_discovery_t *sd)
+/*** Whole desktop ***/
+static void AddDesktop(services_discovery_t *sd)
 {
     input_item_t *item;