~indicator-applet-developers/indicator-network/trunk.14.10

« back to all changes in this revision

Viewing changes to src/indicator/wifi-section.cpp

  • Committer: CI bot
  • Author(s): Antti Kaijanmäki
  • Date: 2014-10-07 17:33:46 UTC
  • mfrom: (428.1.5 wifi-krillin)
  • Revision ID: ps-jenkins@lists.canonical.com-20141007173346-zmvkhvbx62y3ebfh
Fix wifi toggle on krillin. Fixes: 1368523, 1371313, 1371320
Approved by: Charles Kerr, PS Jenkins bot

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
    Menu::Ptr m_menu;
33
33
    Menu::Ptr m_settingsMenu;
34
34
 
 
35
    SwitchItem::Ptr m_switch;
 
36
 
35
37
    WifiLinkItem::Ptr m_wifiLink;
36
38
    TextItem::Ptr m_openWifiSettings;
37
39
 
44
46
        m_settingsMenu = std::make_shared<Menu>();
45
47
 
46
48
 
47
 
        for (auto link : m_manager->links().get()) {
48
 
            auto wifi_link = std::dynamic_pointer_cast<networking::wifi::Link>(link);
49
 
            m_wifiLink = std::make_shared<WifiLinkItem>(wifi_link);
50
 
 
51
 
            m_actionGroupMerger->add(*m_wifiLink);
52
 
            m_menu->append(*m_wifiLink);
53
 
            m_settingsMenu->append(*m_wifiLink);
54
 
 
55
 
            // just take the first one now.
56
 
            /// @todo multiple links and links()->changed()
57
 
            break;
 
49
        m_switch = std::make_shared<SwitchItem>(_("Wi-Fi"), "wifi", "enable");
 
50
 
 
51
        /// @todo don't now really care about actully being able to detach the whole
 
52
        ///       wifi chipset. on touch devices we always have wifi.
 
53
        if (m_manager->hasWifi().get()) {
 
54
            m_actionGroupMerger->add(*m_switch);
 
55
            m_menu->append(*m_switch);
 
56
            m_settingsMenu->append(*m_switch);
58
57
        }
59
58
 
 
59
        m_switch->state().set(m_manager->wifiEnabled().get());
 
60
        m_manager->wifiEnabled().changed().connect([this](bool value) {
 
61
            m_switch->state().set(value);
 
62
        });
 
63
        m_switch->activated().connect([this](){
 
64
            if (m_switch->state().get()) {
 
65
                if (!m_manager->enableWifi()) {
 
66
                    /// try to work around the switch getting out of state on unity8 side
 
67
                    m_switch->state().set(false);
 
68
                }
 
69
            } else {
 
70
                if (!m_manager->disableWifi())
 
71
                    m_switch->state().set(true);
 
72
            }
 
73
        });
 
74
 
 
75
 
 
76
        m_manager->links().changed().connect(std::bind(&Private::updateLinks, this));
 
77
        updateLinks();
 
78
 
60
79
        m_openWifiSettings = std::make_shared<TextItem>(_("Wi-Fi settings…"), "wifi", "settings");
61
80
        m_openWifiSettings->activated().connect([](){
62
81
            UrlDispatcher::send("settings:///system/wifi", [](std::string url, bool success){
69
88
        m_menu->append(*m_openWifiSettings);
70
89
    }
71
90
 
 
91
    void updateLinks()
 
92
    {
 
93
        // remove all and recreate. we have top 1 now anyway
 
94
        if (m_wifiLink) {
 
95
            m_actionGroupMerger->remove(*m_wifiLink);
 
96
            m_menu->removeAll(*m_wifiLink);
 
97
            m_settingsMenu->removeAll(*m_wifiLink);
 
98
            m_wifiLink.reset();
 
99
        }
 
100
 
 
101
        for (auto link : m_manager->links().get()) {
 
102
            auto wifi_link = std::dynamic_pointer_cast<networking::wifi::Link>(link);
 
103
            m_wifiLink = std::make_shared<WifiLinkItem>(wifi_link);
 
104
 
 
105
            m_actionGroupMerger->add(*m_wifiLink);
 
106
            m_menu->append(*m_wifiLink);
 
107
            m_settingsMenu->append(*m_wifiLink);
 
108
 
 
109
            // just take the first one
 
110
            break;
 
111
        }
 
112
    }
 
113
 
72
114
public:
73
115
};
74
116