diff --git a/headers/os/add-ons/network_settings/NetworkSettingsAddOn.h b/headers/os/add-ons/network_settings/NetworkSettingsAddOn.h index fe1d02cd4c..3644898d58 100644 --- a/headers/os/add-ons/network_settings/NetworkSettingsAddOn.h +++ b/headers/os/add-ons/network_settings/NetworkSettingsAddOn.h @@ -27,10 +27,6 @@ enum BNetworkSettingsType { B_NETWORK_SETTINGS_TYPE_OTHER = 'othr' }; -enum { - kMsgSettingsItemUpdated = 'SIup' -}; - class BNetworkProfile; class BNetworkSettings; @@ -70,6 +66,8 @@ public: virtual void SettingsUpdated(uint32 type); virtual void ConfigurationUpdated(const BMessage& message); + virtual void NotifySettingsUpdated(); + private: const BNetworkProfile* fProfile; diff --git a/src/add-ons/network_settings/dnsclient/DNSClientServiceAddOn.cpp b/src/add-ons/network_settings/dnsclient/DNSClientServiceAddOn.cpp index 418042f663..2cbfec40c5 100644 --- a/src/add-ons/network_settings/dnsclient/DNSClientServiceAddOn.cpp +++ b/src/add-ons/network_settings/dnsclient/DNSClientServiceAddOn.cpp @@ -94,7 +94,7 @@ BView* DNSClientServiceItem::View() { if (fView == NULL) - fView = new DNSSettingsView(); + fView = new DNSSettingsView(this); return fView; } diff --git a/src/add-ons/network_settings/dnsclient/DNSSettingsView.cpp b/src/add-ons/network_settings/dnsclient/DNSSettingsView.cpp index 19ac4068a7..1d4c1c9cb1 100644 --- a/src/add-ons/network_settings/dnsclient/DNSSettingsView.cpp +++ b/src/add-ons/network_settings/dnsclient/DNSSettingsView.cpp @@ -41,9 +41,10 @@ static const int32 kMsgApply = 'aply'; #define B_TRANSLATION_CONTEXT "DNSSettingsView" -DNSSettingsView::DNSSettingsView() +DNSSettingsView::DNSSettingsView(BNetworkSettingsItem* item) : - BView("dns", 0) + BView("dns", 0), + fItem(item) { fServerListView = new BListView("nameservers"); fTextControl = new IPAddressControl(AF_UNSPEC, "server", ""); @@ -158,7 +159,8 @@ DNSSettingsView::MessageReceived(BMessage* message) break; } case kMsgApply: - _SaveDNSConfiguration(); + if (_SaveDNSConfiguration() == B_OK) + fItem->NotifySettingsUpdated(); break; default: diff --git a/src/add-ons/network_settings/dnsclient/DNSSettingsView.h b/src/add-ons/network_settings/dnsclient/DNSSettingsView.h index 41276ac10f..31f86d896c 100644 --- a/src/add-ons/network_settings/dnsclient/DNSSettingsView.h +++ b/src/add-ons/network_settings/dnsclient/DNSSettingsView.h @@ -9,10 +9,13 @@ #define DNS_SETTINGS_VIEW_H +#include #include #include +using namespace BNetworkKit; + class BButton; class BListView; class BTextControl; @@ -20,7 +23,7 @@ class BTextControl; class DNSSettingsView : public BView { public: - DNSSettingsView(); + DNSSettingsView(BNetworkSettingsItem* item); ~DNSSettingsView(); status_t Revert(); @@ -33,6 +36,8 @@ private: status_t _SaveDNSConfiguration(); private: + BNetworkSettingsItem* + fItem; BListView* fServerListView; BStringList fRevertList; BTextControl* fTextControl; diff --git a/src/preferences/network/NetworkSettingsAddOn.cpp b/src/preferences/network/NetworkSettingsAddOn.cpp index 6d1fccf167..30f1f4f78f 100644 --- a/src/preferences/network/NetworkSettingsAddOn.cpp +++ b/src/preferences/network/NetworkSettingsAddOn.cpp @@ -14,6 +14,8 @@ #include #include +#include "NetworkWindow.h" + using namespace BNetworkKit; @@ -57,6 +59,16 @@ BNetworkSettingsItem::ConfigurationUpdated(const BMessage& message) } +void +BNetworkSettingsItem::NotifySettingsUpdated() +{ + // TODO: post to network window + BMessage updated(kMsgSettingsItemUpdated); + updated.AddPointer("item", this); + gNetworkWindow.SendMessage(&updated); +} + + // #pragma mark - diff --git a/src/preferences/network/NetworkWindow.cpp b/src/preferences/network/NetworkWindow.cpp index bf57f442e5..5742e6b0cd 100644 --- a/src/preferences/network/NetworkWindow.cpp +++ b/src/preferences/network/NetworkWindow.cpp @@ -56,6 +56,8 @@ static const uint32 kMsgRevert = 'rvrt'; static const uint32 kMsgToggleReplicant = 'trep'; static const uint32 kMsgItemSelected = 'ItSl'; +BMessenger gNetworkWindow; + #undef B_TRANSLATION_CONTEXT #define B_TRANSLATION_CONTEXT "NetworkWindow" @@ -152,6 +154,8 @@ NetworkWindow::NetworkWindow() .AddGlue() .End(); + gNetworkWindow = this; + _ScanInterfaces(); _ScanAddOns(); diff --git a/src/preferences/network/NetworkWindow.h b/src/preferences/network/NetworkWindow.h index 179ddd4cca..c9a6502297 100644 --- a/src/preferences/network/NetworkWindow.h +++ b/src/preferences/network/NetworkWindow.h @@ -27,6 +27,11 @@ class InterfaceListItem; class InterfaceView; +enum { + kMsgSettingsItemUpdated = 'SIup' +}; + + class NetworkWindow : public BWindow { public: NetworkWindow(); @@ -62,7 +67,6 @@ private: private: typedef BObjectList AddOnList; - typedef BObjectList ItemList; typedef std::map ItemMap; typedef std::map SettingsMap; @@ -84,4 +88,7 @@ private: }; +extern BMessenger gNetworkWindow; + + #endif // NETWORK_WINDOW_H