diff options
Diffstat (limited to 'rpms/sugar/0071-Connecting-to-Hidden-Wireless-Networks.patch')
-rw-r--r-- | rpms/sugar/0071-Connecting-to-Hidden-Wireless-Networks.patch | 310 |
1 files changed, 310 insertions, 0 deletions
diff --git a/rpms/sugar/0071-Connecting-to-Hidden-Wireless-Networks.patch b/rpms/sugar/0071-Connecting-to-Hidden-Wireless-Networks.patch new file mode 100644 index 0000000..66eaae2 --- /dev/null +++ b/rpms/sugar/0071-Connecting-to-Hidden-Wireless-Networks.patch @@ -0,0 +1,310 @@ +From e613f8448e146c6cb2d1db5d2542f24fdd5c9ee9 Mon Sep 17 00:00:00 2001 +From: Ajay Garg <ajay@activitycentral.com> +Date: Thu, 15 Dec 2011 14:30:49 +0530 +Subject: [PATCH sugar 71/74] Connecting to Hidden-Wireless-Networks. + +Signed-off-by: Ajay Garg <ajay@activitycentral.com> +--- + extensions/cpsection/network/model.py | 48 +++++++++ + extensions/cpsection/network/view.py | 182 +++++++++++++++++++++++++++++++++ + 2 files changed, 230 insertions(+), 0 deletions(-) + +diff --git a/extensions/cpsection/network/model.py b/extensions/cpsection/network/model.py +index 916ce8c..9592fdd 100644 +--- a/extensions/cpsection/network/model.py ++++ b/extensions/cpsection/network/model.py +@@ -18,6 +18,9 @@ + import dbus + from gettext import gettext as _ + import gconf ++import os ++import subprocess ++import logging + + from jarabe.model import network + +@@ -27,7 +30,9 @@ + _NM_IFACE = 'org.freedesktop.NetworkManager' + + KEYWORDS = ['network', 'jabber', 'radio', 'server'] ++HIDDEN_SSID_FILE = os.path.expanduser('~/.sugar/default/nm/hidden_ssid') + ++_logger = logging.getLogger('ControlPanel - Network') + + class ReadError(Exception): + def __init__(self, value): +@@ -142,3 +147,46 @@ def set_publish_information(value): + client = gconf.client_get_default() + client.set_bool('/desktop/sugar/collaboration/publish_gadget', value) + return 0 ++ ++ ++def is_hidden_network_connect_package_available(): ++ if os.path.exists('/etc/init.d/z-sugar-hidden-network-connect'): ++ return True ++ return False ++ ++ ++def get_ssids(): ++ ssids = [] ++ ++ # If the file does not exist, return. ++ if not os.path.exists(HIDDEN_SSID_FILE): ++ return ssids ++ ++ f = open(HIDDEN_SSID_FILE, 'r') ++ for ssid in f.readlines(): ++ ssids.append(ssid.rstrip('\n')) ++ f.close() ++ ++ return ssids ++ ++ ++def set_ssids(ssids): ++ ++ # First remove the old ssid-file, if it exists. ++ if os.path.exists(HIDDEN_SSID_FILE): ++ try: ++ os.remove(HIDDEN_SSID_FILE) ++ except: ++ _logger.exception('Error removing file.') ++ return ++ ++ # Do nothing and return, if the values-list is empty ++ if len(ssids) == 0: ++ return ++ ++ # If we reach here, we have a non-empty ssid-values-list. ++ f = open(HIDDEN_SSID_FILE, 'w') ++ for ssid in ssids: ++ if len(ssid) > 0: ++ f.write(ssid + '\n') ++ f.close() +diff --git a/extensions/cpsection/network/view.py b/extensions/cpsection/network/view.py +index 381dcb6..9a2444a 100644 +--- a/extensions/cpsection/network/view.py ++++ b/extensions/cpsection/network/view.py +@@ -19,6 +19,8 @@ + from gettext import gettext as _ + + from sugar.graphics import style ++from sugar.graphics.alert import Alert ++from sugar.graphics.icon import Icon + + from jarabe.controlpanel.sectionview import SectionView + from jarabe.controlpanel.inlinealert import InlineAlert +@@ -30,6 +32,123 @@ + + _APPLY_TIMEOUT = 3000 + ++class AddRemoveWidget(gtk.HBox): ++ ++ def __init__(self, label, add_button_clicked_cb, ++ remove_button_clicked_cb, index): ++ gtk.Box.__init__(self) ++ self.set_homogeneous(False) ++ self.set_spacing(10) ++ ++ self._index = index ++ self._add_button_added = False ++ self._remove_button_added = False ++ ++ self._entry_box = gtk.Entry() ++ self._entry_box.set_text(label) ++ self.pack_start(self._entry_box, expand=False) ++ self._entry_box.show() ++ ++ add_icon = Icon(icon_name='list-add') ++ self._add_button = gtk.Button() ++ self._add_button.set_image(add_icon) ++ self._add_button.connect('clicked', ++ add_button_clicked_cb, ++ self) ++ ++ remove_icon = Icon(icon_name='list-remove') ++ self._remove_button = gtk.Button() ++ self._remove_button.set_image(remove_icon) ++ self._remove_button.connect('clicked', ++ remove_button_clicked_cb, ++ self) ++ ++ self.__add_add_button() ++ self.__add_remove_button() ++ ++ def _get_index(self): ++ return self._index ++ ++ def _set_index(self, value): ++ self._index = value ++ ++ def _get_entry(self): ++ return self._entry_box.get_text() ++ ++ def __add_add_button(self): ++ self.pack_start(self._add_button, expand=False) ++ self._add_button.show() ++ self._add_button_added = True ++ ++ def _remove_remove_button_if_not_already(self): ++ if self._remove_button_added: ++ self.__remove_remove_button() ++ ++ def __remove_remove_button(self): ++ self.remove(self._remove_button) ++ self._remove_button_added = False ++ ++ def _add_remove_button_if_not_already(self): ++ if not self._remove_button_added: ++ self.__add_remove_button() ++ ++ def __add_remove_button(self): ++ self.pack_start(self._remove_button, expand=False) ++ self._remove_button.show() ++ self._remove_button_added = True ++ ++ ++class MultiWidget(gtk.VBox): ++ ++ def __init__(self): ++ gtk.VBox.__init__(self) ++ ++ def _add_widget(self, label): ++ new_widget = AddRemoveWidget(label, ++ self.__add_button_clicked_cb, ++ self.__remove_button_clicked_cb, ++ len(self.get_children())) ++ self.add(new_widget) ++ new_widget.show() ++ self.show() ++ self._update_remove_button_statuses() ++ ++ def __add_button_clicked_cb(self, add_button, ++ add_button_container): ++ self._add_widget('') ++ self._update_remove_button_statuses() ++ ++ def __remove_button_clicked_cb(self, remove_button, ++ remove_button_container): ++ for child in self.get_children(): ++ if child._get_index() > remove_button_container._get_index(): ++ child._set_index(child._get_index() - 1) ++ ++ self.remove(remove_button_container) ++ self._update_remove_button_statuses() ++ ++ def _update_remove_button_statuses(self): ++ children = self.get_children() ++ ++ # Now, if there is only one entry, remove-button ++ # should not be shown. ++ if len(children) == 1: ++ children[0]._remove_remove_button_if_not_already() ++ ++ # Alternatively, if there are more than 1 entries, ++ # remove-button should be shown for all. ++ if len(children) > 1: ++ for child in children: ++ child._add_remove_button_if_not_already() ++ ++ ++ def _get_entries(self): ++ entries = [] ++ for child in self.get_children(): ++ entries.append(child._get_entry()) ++ ++ return entries ++ + + class Network(SectionView): + def __init__(self, model, alerts): +@@ -50,6 +169,7 @@ def __init__(self, model, alerts): + + self._radio_alert_box = gtk.HBox(spacing=style.DEFAULT_SPACING) + self._jabber_alert_box = gtk.HBox(spacing=style.DEFAULT_SPACING) ++ self._hidden_network_alert_box = gtk.HBox(spacing=style.DEFAULT_SPACING) + + workspace = gtk.VBox() + workspace.show() +@@ -171,6 +291,55 @@ def __init__(self, model, alerts): + workspace.pack_start(box_mesh, expand=False) + box_mesh.show() + ++ if self._model.is_hidden_network_connect_package_available(): ++ separator_hidden_network = gtk.HSeparator() ++ workspace.pack_start(separator_hidden_network, False) ++ separator_hidden_network.show() ++ ++ label_hidden_network = gtk.Label(_('Hidden Networks')) ++ label_hidden_network.set_alignment(0, 0) ++ workspace.pack_start(label_hidden_network, expand=False) ++ label_hidden_network.show() ++ box_hidden_network = gtk.VBox() ++ box_hidden_network.set_border_width(style.DEFAULT_SPACING * 2) ++ box_hidden_network.set_spacing(style.DEFAULT_SPACING) ++ ++ info = gtk.Label(_("Enter the SSIDs of the hidden networks.")) ++ info.set_alignment(0, 0) ++ info.set_line_wrap(True) ++ box_hidden_network.pack_start(info, expand=False) ++ info.show() ++ ++ self._hidden_network_alert = InlineAlert() ++ self.hidden_network_msg = 'XO-reboot is required for the' \ ++ ' changes to take effect.' ++ self._hidden_network_alert.props.msg =_(self.hidden_network_msg) ++ self._hidden_network_alert_box.pack_start(self._hidden_network_alert, ++ expand=False) ++ box_hidden_network.pack_end(self._hidden_network_alert_box, ++ expand=False) ++ self._hidden_network_alert_box.show() ++ self._hidden_network_alert.show() ++ ++ self._widget_table = MultiWidget() ++ box_hidden_network.pack_start(self._widget_table, expand=False) ++ self._widget_table.show() ++ ++ save_button = gtk.Button() ++ save_button.set_alignment(0, 0) ++ save_button.set_label('Save') ++ save_button.connect('clicked', self.__save_button_clicked_cb) ++ box_save_button = gtk.HBox() ++ box_save_button.set_homogeneous(False) ++ box_save_button.pack_start(save_button, expand=False) ++ save_button.show() ++ ++ box_hidden_network.pack_start(box_save_button, expand=False) ++ box_save_button.show() ++ ++ workspace.pack_start(box_hidden_network, expand=False) ++ box_hidden_network.show() ++ + scrolled = gtk.ScrolledWindow() + scrolled.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) + scrolled.add_with_viewport(workspace) +@@ -200,6 +369,15 @@ def setup(self): + self._clear_history_button.connect( \ + 'clicked', self.__network_configuration_reset_cb) + ++ if self._model.is_hidden_network_connect_package_available(): ++ ++ ssids = self._model.get_ssids() ++ if len(ssids) == 0: ++ self._widget_table._add_widget('') ++ else: ++ for ssid in ssids: ++ self._widget_table._add_widget(ssid) ++ + def undo(self): + self._button.disconnect(self._radio_change_handler) + self._entry.disconnect(self._jabber_change_handler) +@@ -259,3 +437,7 @@ def __network_configuration_reset_cb(self, widget): + self._model.clear_networks() + if not self._model.have_networks(): + self._clear_history_button.set_sensitive(False) ++ ++ def __save_button_clicked_cb(self, save_button): ++ self._model.set_ssids(self._widget_table._get_entries()) ++ save_button.set_sensitive(False) +-- +1.7.6 + |