# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: rephorm@rephorm.com-20100526033854-uvx1p769qh998tjl # target_branch: bzr+ssh://bazaar.launchpad.net/~indicator-applet-\ # developers/indicator-messages/trunk/ # testament_sha1: 3642887f4eb697247d36db9fc691d160acbe0697 # timestamp: 2010-05-25 20:39:37 -0700 # base_revision_id: ted@gould.cx-20100428130725-jki0s68n1p3gblkc # # Begin patch === modified file 'src/messages-service.c' --- src/messages-service.c 2010-04-28 10:33:57 +0000 +++ src/messages-service.c 2010-05-26 03:38:54 +0000 @@ -79,6 +79,13 @@ static gboolean destroy_launcher (gpointer data); static void check_hidden (void); +/* + * Launcher Map + * + * This maps between launcher files and .desktop files so know + * what to remove when a launcher is deleted. + */ +GHashTable *launchermap = NULL; /* * Server List @@ -1220,13 +1227,21 @@ static gboolean destroy_launcher (gpointer data) { - gchar * appdirentry = (gchar *)data; + gchar * launcher = (gchar *)data; + gchar * appdirentry = NULL; GList * listitem; GList * direntry; launcherList_t * li; gchar * appdir; + appdirentry = g_hash_table_lookup(launchermap, launcher); + if (appdirentry == NULL) + { + g_debug("Trying to remove '%s', which we know nothing about.", launcher); + return FALSE; + } + for (listitem = launcherList; listitem != NULL; listitem = listitem->next) { li = (launcherList_t *)listitem->data; for (direntry = li->appdiritems; direntry != NULL; direntry = direntry->next) { @@ -1246,10 +1261,12 @@ return FALSE; } + g_hash_table_remove(launchermap, launcher); if (g_list_length(li->appdiritems) > 1) { /* Just remove this item, and we can move on */ g_debug("Just removing file entry: %s", appdir); li->appdiritems = g_list_remove(li->appdiritems, appdir); + g_free(appdir); return FALSE; } @@ -1300,6 +1317,8 @@ g_debug("\tcontents: %s", trimdesktop); build_launcher_core(trimdesktop); + g_hash_table_insert(launchermap, g_strdup(path), g_strdup(trimdesktop)); + g_free(trimdesktop); return FALSE; } @@ -1312,6 +1331,7 @@ gchar * desktop = desktop_file_from_keyfile (path); if (desktop != NULL) { build_launcher_core(desktop); + g_hash_table_insert(launchermap, g_strdup(path), g_strdup(desktop)); g_free(desktop); } return FALSE; @@ -1464,6 +1484,8 @@ g_signal_connect(listener, INDICATE_LISTENER_SIGNAL_SERVER_ADDED, G_CALLBACK(server_added), root_menuitem); g_signal_connect(listener, INDICATE_LISTENER_SIGNAL_SERVER_REMOVED, G_CALLBACK(server_removed), root_menuitem); + launchermap = g_hash_table_new_full(g_str_hash, g_str_equal, + g_free, g_free); g_idle_add(blacklist_init, NULL); g_idle_add(build_launchers, SYSTEM_APPS_DIR); g_idle_add(build_launchers, SYSTEM_APPS_DIR_OLD); @@ -1473,6 +1495,7 @@ mainloop = g_main_loop_new(NULL, FALSE); g_main_loop_run(mainloop); + g_hash_table_destroy(launchermap); g_free(userdir); return 0; # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWX43X94AAhtfgAAwUvf//3PH TgC////6UAT9eieqtm2qhIABkSYiZMJqZkTxNUfoJqeiPUB6mm0ynqepoOYBMBMjACMTEwmEwQ0x NMBoJpPUJjVPU9Taj0nqAA0AADQACKfpTUyPUxDIDTJoaNNAAGQDQNBJEmmgCaMgTSeI00Ceqfqm R6gAPUPUChAAEoAX6pcYsqthBgMnOg675pAIER9eZLOp7WC+VzPHfOzRMAA6OO4Q3Otjc9UWC6vO fv+MInnoERG8dPGVEDMfx+ov7mqzs5wycm0ONk5llAqU7ypmJJyLleHtaiIy2BcpYvL+MRyDtVDF 1dtskCkaHjVFJLzR5lbZqiWIIGoKLP3JFPHXVclWyzDMWeSkeWenIve9RNSIKEP5uUZRWNyI6Crw jIEjYXvCZ1E8wfUZvY9gcNd7dBpmqq37ADkUfKGmRclOtWbZ5wxwuqwikcWGbi1w4jyDzYQ8CD6R OadBkV0KAejCpktBBW8IqxaYu0LNgXh9DEHQVZEVhszgh1wyiyl0VIEYAaOMra45w5J3mIpfFZ8p w7rveHnX01bCNVzWU5zNl2rgKlZ6anajYnYRMoGJ8EQsReoykcyOCWR4A3AntUCC4LbRi17AkOdl mShmg49cLpiYWYaRfDswqJjan0FdNN0hTkyYzRJDa6qBE2AXMSWOWu2ksTKQrKnUGRqXqoKUlove IiBkkEYMFGNHJJGI3AzorxQrGi0rODROV7ozkprhnUnLMhZ8+4mogSLrlUNlSUYvpozF1KZQUsbB RnJpY/ZbCZrmLCdUloqY2xrmLSwxputrFyFcRMrBX3PWTRsodzOY61DoRxBsJwIoUycNx+J5zAPe Fw5DA8K5a1wUNs37oDpUnzkiKBJtPRkbfSg9TyaDDBeyfoeEfm57O4oZanQY1QIicVXAcNxH44ep 7zCo7PW228EA38KIlbF10kr58WUnZKQvVAYESeALwOL5WoQeGLx3eJXMdcIkEt6bv2+IL66mI7/r 9OwPY3s+9rU6SohSlahgxnKe4TX62YYoS45lYYiz51Zqe1ZyUXe9uM3ky+lgH+qPTxgYnKPs/H1r hvs9c9W61nsCQMvLdVJGBt7cItwx7rjVbfJsv3cvVyzQZzUmXayxYS2xAlpyz7YpQgQa81K3Y9Ks E2edW+DBCtT0dlRwx7nDnrLCg9+3UrbnOetNA8f+Ok4yYZuTBeoEOaDP/q5Wm5/gTuwhlejrnQMJ KO4XgmkkaNh7nC4XnVgzPynKK+qEXEPgGiQCn9faiXnMLNMLs4ExkEVIGva7baKjSDzFwaZcDkA3 3la6YE4UctkN4SCLhQl/Py2I4Ly8hmZFTlCsmUexsLOPHOJkmYSvZV1Qx4RNk5uovVNBInYhMonq mKprkk0kput8FZso1muJYhmAZYQ3F++3cBIOmmeSYZHESqTnNlzq71u8+xRKtalsQw6I9UGnczLg TFy7Sg1iUKVVQ/QVBPBMhmUsOkE5AMNsAxLz5UmxMskvQ4jZvPwflUZvusuhgJMkyPUfTNH41wip M6dmOkJtCf4Zb/FPRrQ5hE8tYDQLqgadUHzarRriKgJCd6juIWaJn6DyFfPMxQrCs51UmLNZI7hS PRT2AxcusBeEHYKWWM95DLaddXfRgu8qSUb2VuU5WLJ1ar7w56RRIY0sHt81P0FYSVSsYqZXnUw0 EvA/8XckU4UJB+N1/eA=