void menu_init(GtkStatusIcon *, DHCPCD_CONNECTION *);
void menu_update_scans(WI_SCAN *, DHCPCD_WI_SCAN *);
+void menu_remove_if(WI_SCAN *);
void notify_close(void);
dhcpcd_wpa_status_cb(DHCPCD_WPA *wpa, const char *status, _unused void *data)
{
DHCPCD_IF *i;
+ WI_SCAN *w, *wn;
i = dhcpcd_wpa_if(wpa);
g_message("%s: WPA status %s", i->ifname, status);
- if (g_strcmp0(status, "down") == 0)
+ if (g_strcmp0(status, "down") == 0) {
dhcpcd_unwatch(-1, wpa);
+ TAILQ_FOREACH_SAFE(w, &wi_scans, next, wn) {
+ if (w->interface == i) {
+ TAILQ_REMOVE(&wi_scans, w, next);
+ menu_remove_if(w);
+ dhcpcd_wi_scans_free(w->scans);
+ g_free(w);
+ }
+ }
+ }
}
int
DHCPCD_WI_SCAN *s;
bool found, update;
- if (menu == NULL) {
+ if (wi->ifmenu == NULL) {
dhcpcd_wi_scans_free(wi->scans);
wi->scans = scans;
return;
gtk_menu_reposition(GTK_MENU(wi->ifmenu));
}
+void
+menu_remove_if(WI_SCAN *wi)
+{
+ WI_MENU *wim;
+
+ if (wi->ifmenu == NULL)
+ return;
+
+ if (wi->ifmenu == menu)
+ menu = NULL;
+
+ gtk_widget_destroy(wi->ifmenu);
+ wi->ifmenu = NULL;
+ while ((wim = TAILQ_FIRST(&wi->menus))) {
+ TAILQ_REMOVE(&wi->menus, wim, next);
+ g_free(wim);
+ }
+
+ if (menu && gtk_widget_get_visible(menu))
+ gtk_menu_reposition(GTK_MENU(menu));
+}
static GtkWidget *
add_scans(WI_SCAN *wi)