Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/rpms/sugar/0071-Connecting-to-Hidden-Wireless-Networks.patch
diff options
context:
space:
mode:
Diffstat (limited to 'rpms/sugar/0071-Connecting-to-Hidden-Wireless-Networks.patch')
-rw-r--r--rpms/sugar/0071-Connecting-to-Hidden-Wireless-Networks.patch310
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
+