static void update_online(DHCPCD_CONNECTION *con, bool showif) { bool ison, iscarrier; char *msg, *msgs, *tmp; DHCPCD_IF *ifs, *i; ison = iscarrier = false; msgs = NULL; ifs = dhcpcd_interfaces(con); for (i = ifs; i; i = i->next) { if (g_strcmp0(i->type, "link") == 0) { if (i->up) iscarrier = true; } else { if (i->up) ison = true; } msg = dhcpcd_if_message(i, NULL); if (msg) { if (showif) g_message("%s", msg); if (msgs) { tmp = g_strconcat(msgs, "\n", msg, NULL); g_free(msgs); g_free(msg); msgs = tmp; } else msgs = msg; } else if (showif) g_message("%s: %s", i->ifname, i->reason); } if (online != ison || carrier != iscarrier) { online = ison; carrier = iscarrier; if (ani_timer != 0) { g_source_remove(ani_timer); ani_timer = 0; ani_counter = 0; } if (ison) { animate_online(NULL); ani_timer = g_timeout_add(300, animate_online, NULL); } else if (iscarrier) { animate_carrier(NULL); ani_timer = g_timeout_add(500, animate_carrier, NULL); } else { gtk_status_icon_set_from_icon_name(status_icon, "network-offline"); } } gtk_status_icon_set_tooltip_text(status_icon, msgs); g_free(msgs); }
void DhcpcdQt::updateOnline(bool showIf) { bool isOn, isCarrier; char *msg; DHCPCD_IF *ifs, *i; QString msgs; isOn = isCarrier = false; ifs = dhcpcd_interfaces(con); for (i = ifs; i; i = i->next) { if (strcmp(i->type, "link") == 0) { if (i->up) isCarrier = true; } else { if (i->up) isOn = true; } msg = dhcpcd_if_message(i, NULL); if (msg) { if (showIf) qDebug() << msg; if (msgs.isEmpty()) msgs = QString::fromAscii(msg); else msgs += '\n' + QString::fromAscii(msg); free(msg); } else if (showIf) qDebug() << i->ifname << i->reason; } if (onLine != isOn || carrier != isCarrier) { onLine = isOn; carrier = isCarrier; aniTimer->stop(); aniCounter = 0; if (isOn) { animate(); aniTimer->start(300); } else if (isCarrier) { animate(); aniTimer->start(500); } else setIcon("status", "network-offline"); } trayIcon->setToolTip(msgs); }