]> Dogcows Code - chaz/tint2/blobdiff - src/launcher/xsettings-client.c
Fix possible double free in launcher
[chaz/tint2] / src / launcher / xsettings-client.c
index fba79395096cbb0efbae902ce79d685ff81e1b97..a66c4b704b82d3743e08435f0910b8ddff531ec8 100644 (file)
@@ -51,27 +51,21 @@ void xsettings_notify_cb (const char *name, XSettingsAction action, XSettingsSet
        //printf("xsettings_notify_cb\n");
        if ((action == XSETTINGS_ACTION_NEW || action == XSETTINGS_ACTION_CHANGED) && name != NULL && setting != NULL) {
                if (!strcmp(name, "Net/IconThemeName") && setting->type == XSETTINGS_TYPE_STRING) {
-                       printf("XSETTINGS_ACTION %s\n", setting->data.v_string);
                        if (icon_theme_name) {
                                if (strcmp(icon_theme_name, setting->data.v_string) == 0)
                                        return;
-                               g_free(icon_theme_name);
+                               free(icon_theme_name);
                        }
                        icon_theme_name = strdup(setting->data.v_string);
-                       /*
-                       cleanup_launcher();
+                       
                        int i;
-                       Panel *p;
-                       for (i=0 ; i < nb_panel ; i++) {
-                               p = &panel1[i];
-                               init_launcher_panel(p);
+                       for (i = 0 ; i < nb_panel ; i++) {
+                               Launcher *launcher = &panel1[i].launcher;
+                               cleanup_launcher_theme(launcher);
+                               launcher_load_themes(launcher);
+                               launcher_load_icons(launcher);
+                               launcher->area.resize = 1;
                        }
-                       /*
-                       MBTrayApp *mb = (MBTrayApp *)data;
-                       mb->theme_name = strdup(setting->data.v_string);
-                       if (mb->theme_cb)
-                               mb->theme_cb(mb, mb->theme_name);
-                       */
                }
        }
 }
@@ -361,7 +355,6 @@ static void read_settings (XSettingsClient *client)
 
        XSettingsList *old_list = client->settings;
        client->settings = NULL;
-       printf("read_settings 1\n");
 
        old_handler = XSetErrorHandler (ignore_errors);
        result = XGetWindowProperty (client->display, client->manager_window, server.atom._XSETTINGS_SETTINGS, 0, LONG_MAX, False, server.atom._XSETTINGS_SETTINGS, &type, &format, &n_items, &bytes_after, &data);
@@ -419,25 +412,18 @@ XSettingsClient *xsettings_client_new (Display *display, int screen, XSettingsNo
        client->manager_window = None;
        client->settings = NULL;
 
-       XGrabServer (server.dsp);
-       client->manager_window = XGetSelectionOwner (server.dsp, server.atom._XSETTINGS_SCREEN);
-       if (client->manager_window != None)
-               XSelectInput (server.dsp, client->manager_window, PropertyChangeMask | StructureNotifyMask);
-       XUngrabServer (client->display);
-       XFlush (client->display);
-       
-       if (client->manager_window == None) {
-               printf("NO XSETTINGS manager, tint2 use config 'launcher_icon_theme'.\n");
-               free (client);
-               return NULL;
-       }
-
        if (client->watch)
                client->watch (RootWindow (display, screen), True, StructureNotifyMask, client->cb_data);
 
        check_manager_window (client);
 
-       return client;
+       if (client->manager_window == None) {
+               printf("NO XSETTINGS manager, tint2 use config 'launcher_icon_theme'.\n");
+               free (client);
+               return NULL;
+       }
+       else
+               return client;
 }
 
 
This page took 0.026494 seconds and 4 git commands to generate.