[gnome-control-center] Add initial implementation of the new Sharing panel



commit b30d0133b98aa3288df2a70bf24279569adf2ab8
Author: Thomas Wood <thomas wood intel com>
Date:   Mon Jan 14 17:58:44 2013 +0000

    Add initial implementation of the new Sharing panel
    
    https://bugzilla.gnome.org/show_bug.cgi?id=687772

 configure.ac                                     |    3 +
 man/gnome-control-center.xml                     |    8 +
 panels/Makefile.am                               |    3 +-
 panels/sharing/Makefile.am                       |   52 +
 panels/sharing/cc-media-sharing.c                |  142 +++
 panels/sharing/cc-media-sharing.h                |   30 +
 panels/sharing/cc-remote-login.c                 |  148 +++
 panels/sharing/cc-remote-login.h                 |   30 +
 panels/sharing/cc-sharing-panel.c                |  767 ++++++++++++++
 panels/sharing/cc-sharing-panel.h                |   73 ++
 panels/sharing/file-share-properties.c           |   60 ++
 panels/sharing/file-share-properties.h           |   25 +
 panels/sharing/gnome-sharing-panel.desktop.in.in |   13 +
 panels/sharing/sharing.gresource.xml             |    6 +
 panels/sharing/sharing.ui                        | 1181 ++++++++++++++++++++++
 panels/sharing/vino-preferences.c                |  113 ++
 panels/sharing/vino-preferences.h                |   50 +
 po/POTFILES.in                                   |    3 +
 po/POTFILES.skip                                 |    1 +
 shell/Makefile.am                                |    1 +
 shell/cc-panel-loader.c                          |    2 +
 21 files changed, 2710 insertions(+), 1 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index a8803cc..75d87de 100644
--- a/configure.ac
+++ b/configure.ac
@@ -165,6 +165,7 @@ PKG_CHECK_MODULES(USER_ACCOUNTS_PANEL, $COMMON_MODULES
                   gdk-pixbuf-2.0 >= $GDKPIXBUF_REQUIRED_VERSION
                   pwquality
                   accountsservice >= $ACCOUNTSSERVICE_REQUIRED_VERSION)
+PKG_CHECK_MODULES(SHARING_PANEL, $COMMON_MODULES egg-list-box)
 
 PKG_CHECK_MODULES(GVC, gobject-2.0 libpulse libpulse-mainloop-glib)
 AM_CONDITIONAL(HAVE_INTROSPECTION, false)
@@ -432,6 +433,8 @@ panels/online-accounts/icons/48x48/Makefile
 panels/online-accounts/icons/256x256/Makefile
 panels/search/Makefile
 panels/search/gnome-search-panel.desktop.in
+panels/sharing/Makefile
+panels/sharing/gnome-sharing-panel.desktop.in
 panels/sound/Makefile
 panels/sound/gvc/Makefile
 panels/sound/data/Makefile
diff --git a/man/gnome-control-center.xml b/man/gnome-control-center.xml
index 321f8e4..d05aac4 100644
--- a/man/gnome-control-center.xml
+++ b/man/gnome-control-center.xml
@@ -235,6 +235,14 @@
                         </varlistentry>
 
                         <varlistentry>
+                                <term><option>sharing</option></term>
+
+                                <listitem><para>The sharing panel contains
+                                settings that control what is shared over the
+                                network.</para></listitem>
+                        </varlistentry>
+
+                        <varlistentry>
                                 <term><option>sound</option></term>
 
                                 <listitem><para>The sound panel shows
diff --git a/panels/Makefile.am b/panels/Makefile.am
index a805b4c..7becf2c 100644
--- a/panels/Makefile.am
+++ b/panels/Makefile.am
@@ -16,7 +16,8 @@ SUBDIRS= \
 	user-accounts \
 	datetime \
 	search \
-	privacy
+	privacy \
+	sharing
 
 if BUILD_WACOM
 SUBDIRS += wacom
diff --git a/panels/sharing/Makefile.am b/panels/sharing/Makefile.am
new file mode 100644
index 0000000..464b1a1
--- /dev/null
+++ b/panels/sharing/Makefile.am
@@ -0,0 +1,52 @@
+# This is used in PANEL_CFLAGS
+cappletname = sharing
+
+uidir = $(pkgdatadir)/ui/sharing
+
+AM_CPPFLAGS =						\
+	$(PANEL_CFLAGS)					\
+	$(SHARING_PANEL_CFLAGS)				\
+	$(NULL)
+
+noinst_LTLIBRARIES = libsharing.la
+
+BUILT_SOURCES = 		\
+	cc-sharing-resources.c	\
+	cc-sharing-resources.h	\
+	$(NULL)
+
+libsharing_la_SOURCES =		\
+	$(BUILT_SOURCES)	\
+	cc-sharing-panel.c	\
+	cc-sharing-panel.h	\
+	cc-remote-login.c	\
+	cc-remote-login.h	\
+	cc-media-sharing.c	\
+	cc-media-sharing.h	\
+	vino-preferences.c	\
+	vino-preferences.h	\
+	file-share-properties.c \
+	file-share-properties.h \
+	$(NULL)
+
+
+resource_files = $(shell glib-compile-resources --generate-dependencies $(srcdir)/sharing.gresource.xml)
+cc-sharing-resources.c: sharing.gresource.xml $(resource_files)
+	$(AM_V_GEN) glib-compile-resources --target=$@ --sourcedir=$(srcdir) --generate-source --c-name cc_sharing $<
+cc-sharing-resources.h: sharing.gresource.xml $(resource_files)
+	$(AM_V_GEN) glib-compile-resources --target=$@ --sourcedir=$(srcdir) --generate-header --c-name cc_sharing $<
+
+
+libsharing_la_LIBADD = $(PANEL_LIBS) $(SHARING_PANEL_LIBS)
+libsharing_la_LDFLAGS = $(PANEL_LDFLAGS)
+
+ INTLTOOL_DESKTOP_RULE@
+
+desktopdir = $(datadir)/applications
+desktop_in_files = gnome-sharing-panel.desktop.in
+desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
+
+CLEANFILES = $(desktop_in_files) $(desktop_DATA)
+EXTRA_DIST = $(resource_files)
+
+-include $(top_srcdir)/git.mk
diff --git a/panels/sharing/cc-media-sharing.c b/panels/sharing/cc-media-sharing.c
new file mode 100644
index 0000000..03dcc9e
--- /dev/null
+++ b/panels/sharing/cc-media-sharing.c
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2013 Intel, Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Author: Thomas Wood <thomas wood intel com>
+ *
+ */
+
+#include "cc-media-sharing.h"
+
+static GKeyFile*
+cc_media_sharing_open_key_file (void)
+{
+  gchar *path;
+  GKeyFile *file;
+
+  file = g_key_file_new ();
+
+  path = g_build_filename (g_get_user_config_dir (), "rygel.conf", NULL);
+
+  g_key_file_load_from_file (file, path,
+                             G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS,
+                             NULL);
+
+  g_free (path);
+
+  return file;
+}
+
+void
+cc_media_sharing_get_preferences (gboolean   *enabled,
+                                  gchar    ***folders)
+{
+  GKeyFile *file;
+
+  file = cc_media_sharing_open_key_file ();
+
+  if (enabled)
+   *enabled = g_key_file_get_boolean (file, "general", "upnp-enabled", NULL);
+
+  if (folders)
+    {
+      gsize length;
+      gchar **str_list;
+
+      str_list = g_key_file_get_string_list (file, "MediaExport", "uris",
+                                             &length, NULL);
+
+      *folders = str_list;
+
+      while (str_list && *str_list)
+        {
+          if (g_str_equal (*str_list, "@MUSIC@"))
+            {
+              g_free (*str_list);
+              *str_list = g_strdup (g_get_user_special_dir (G_USER_DIRECTORY_MUSIC));
+            }
+
+          if (g_str_equal (*str_list, "@VIDEOS@"))
+            {
+              g_free (*str_list);
+              *str_list = g_strdup (g_get_user_special_dir (G_USER_DIRECTORY_VIDEOS));
+            }
+
+          if (g_str_equal (*str_list, "@PICTURES@"))
+            {
+              g_free (*str_list);
+              *str_list = g_strdup (g_get_user_special_dir (G_USER_DIRECTORY_PICTURES));
+            }
+          str_list++;
+        }
+    }
+
+  g_key_file_free (file);
+}
+
+void
+cc_media_sharing_set_preferences (gboolean   enabled,
+                                  gchar    **folders)
+{
+  GKeyFile *file;
+  gchar **str_list;
+  gchar *path;
+  gsize length;
+  gchar *data;
+
+  file = cc_media_sharing_open_key_file ();
+
+  g_key_file_set_boolean (file, "general", "upnp-enabled", enabled);
+
+  str_list = folders;
+  length = 0;
+
+  while (str_list && *str_list)
+    {
+      if (g_str_equal (*str_list, g_get_user_special_dir (G_USER_DIRECTORY_MUSIC)))
+        {
+          g_free (*str_list);
+          *str_list = g_strdup ("@MUSIC@");
+        }
+
+      if (g_str_equal (*str_list, g_get_user_special_dir (G_USER_DIRECTORY_VIDEOS)))
+        {
+          g_free (*str_list);
+          *str_list = g_strdup ("@VIDEOS@");
+        }
+
+      if (g_str_equal (*str_list, g_get_user_special_dir (G_USER_DIRECTORY_PICTURES)))
+        {
+          g_free (*str_list);
+          *str_list = g_strdup ("@PICTURES@");
+        }
+
+      str_list++;
+      length++;
+    }
+
+  g_key_file_set_string_list (file, "MediaExport", "uris", (const gchar**) folders, length);
+
+  data = g_key_file_to_data (file, NULL, NULL);
+
+  path = g_build_filename (g_get_user_config_dir (), "rygel.conf", NULL);
+
+  g_file_set_contents (path, data, -1, NULL);
+
+  g_free (path);
+
+  g_key_file_free (file);
+}
diff --git a/panels/sharing/cc-media-sharing.h b/panels/sharing/cc-media-sharing.h
new file mode 100644
index 0000000..4a81c5f
--- /dev/null
+++ b/panels/sharing/cc-media-sharing.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2013 Intel, Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Author: Thomas Wood <thomas wood intel com>
+ *
+ */
+
+#ifndef __CC_MEDIA_SHARING_H__
+#define __CC_MEDIA_SHARING_H__
+
+#include <glib.h>
+
+void cc_media_sharing_get_preferences (gboolean *enabled, gchar ***folders);
+void cc_media_sharing_set_preferences (gboolean enabled, gchar **folders);
+
+#endif /* __CC_MEDIA_SHARING_H__ */
diff --git a/panels/sharing/cc-remote-login.c b/panels/sharing/cc-remote-login.c
new file mode 100644
index 0000000..0d04604
--- /dev/null
+++ b/panels/sharing/cc-remote-login.c
@@ -0,0 +1,148 @@
+/*
+ * Copyright (C) 2013 Intel, Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Author: Thomas Wood <thomas wood intel com>
+ *
+ */
+#include "cc-remote-login.h"
+#include <gio/gio.h>
+
+#define SSHD_SERVICE "sshd.service"
+
+static void
+active_state_ready_callback (GObject      *source_object,
+                             GAsyncResult *result,
+                             gpointer      gtkswitch)
+{
+  GVariant *active_variant, *tmp_variant;
+  const gchar *active_state;
+  gboolean active;
+  GError *error = NULL;
+
+  active_variant = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source_object),
+                                                  result, &error);
+
+  if (!active_variant)
+    {
+      g_warning ("Error getting remote login state: %s", error->message);
+      g_clear_error (&error);
+      return;
+    }
+
+  g_variant_get (active_variant, "(v)", &tmp_variant);
+  active_state = g_variant_get_string (tmp_variant, NULL);
+
+  active = g_str_equal (active_state, "active");
+
+  g_variant_unref (active_variant);
+  g_variant_unref (tmp_variant);
+
+  /* set the switch to the correct state */
+  gtk_switch_set_active (gtkswitch, active);
+
+  /* TODO: enable the switch when cc_remote_login_set_enabled is implemented */
+  /* gtk_widget_set_sensitive (gtkswitch, TRUE); */
+}
+
+static void
+path_ready_callback (GObject      *source_object,
+                     GAsyncResult *result,
+                     gpointer      gtkswitch)
+{
+  GVariant *path_variant;
+  gchar *object_path;
+  GError *error = NULL;
+
+  path_variant = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source_object),
+                                                result, &error);
+
+  if (!path_variant)
+    {
+      g_warning ("Error getting remote login state: %s", error->message);
+      g_clear_error (&error);
+      return;
+    }
+
+  g_variant_get (path_variant, "(o)", &object_path);
+
+  g_dbus_connection_call (G_DBUS_CONNECTION (source_object),
+                          "org.freedesktop.systemd1",
+                          object_path,
+                          "org.freedesktop.DBus.Properties",
+                          "Get",
+                          g_variant_new ("(ss)",
+                                         "org.freedesktop.systemd1.Unit",
+                                         "ActiveState"),
+                          (GVariantType*) "(v)",
+                          G_DBUS_CALL_FLAGS_NONE,
+                          -1,
+                          NULL,
+                          active_state_ready_callback,
+                          gtkswitch);
+
+
+  g_variant_unref (path_variant);
+
+}
+
+static void
+bus_ready_callback (GObject      *source_object,
+                    GAsyncResult *result,
+                    gpointer      gtkswitch)
+{
+  GDBusConnection *connection;
+  GError *error = NULL;
+
+  connection = g_bus_get_finish (result, &error);
+
+  if (!connection)
+    {
+      g_warning ("Error getting remote login state: %s", error->message);
+      g_clear_error (&error);
+      return;
+    }
+
+  g_dbus_connection_call (connection,
+                          "org.freedesktop.systemd1",
+                          "/org/freedesktop/systemd1",
+                          "org.freedesktop.systemd1.Manager",
+                          "GetUnit",
+                          g_variant_new ("(s)", SSHD_SERVICE),
+                          (GVariantType*) "(o)",
+                          G_DBUS_CALL_FLAGS_NONE,
+                          -1,
+                          NULL,
+                          path_ready_callback,
+                          gtkswitch);
+}
+
+
+void
+cc_remote_login_get_enabled (GtkSwitch *gtkswitch)
+{
+  /* disable the switch until the current state is known */
+  gtk_widget_set_sensitive (gtkswitch, FALSE);
+
+  g_bus_get (G_BUS_TYPE_SYSTEM, NULL, bus_ready_callback, gtkswitch);
+}
+
+gboolean
+cc_remote_login_set_enabled (gboolean  enabled)
+{
+  /* not implemented yet */
+  return FALSE;
+}
diff --git a/panels/sharing/cc-remote-login.h b/panels/sharing/cc-remote-login.h
new file mode 100644
index 0000000..fe6b6d2
--- /dev/null
+++ b/panels/sharing/cc-remote-login.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2013 Intel, Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Author: Thomas Wood <thomas wood intel com>
+ *
+ */
+
+#ifndef __CC_REMOTE_LOGIN_H__
+#define __CC_REMOTE_LOGIN_H__
+
+#include <gtk/gtk.h>
+
+void cc_remote_login_get_enabled (GtkSwitch *gtkswitch);
+gboolean cc_remote_login_set_enabled (gboolean  enabled);
+
+#endif /* __CC_REMOTE_LOGIN_H__ **/
diff --git a/panels/sharing/cc-sharing-panel.c b/panels/sharing/cc-sharing-panel.c
new file mode 100644
index 0000000..5c7bfe5
--- /dev/null
+++ b/panels/sharing/cc-sharing-panel.c
@@ -0,0 +1,767 @@
+/*
+ * Copyright (C) 2013 Intel, Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Author: Thomas Wood <thomas wood intel com>
+ *
+ */
+
+#include "cc-sharing-panel.h"
+#include "egg-list-box/egg-list-box.h"
+#include "shell/cc-hostname-entry.h"
+
+#include "cc-sharing-resources.h"
+#include "vino-preferences.h"
+#include "cc-remote-login.h"
+#include "file-share-properties.h"
+#include "cc-media-sharing.h"
+
+#include <glib/gi18n.h>
+
+CC_PANEL_REGISTER (CcSharingPanel, cc_sharing_panel)
+
+#define PANEL_PRIVATE(o) \
+  (G_TYPE_INSTANCE_GET_PRIVATE ((o), CC_TYPE_SHARING_PANEL, CcSharingPanelPrivate))
+
+
+static GtkWidget *
+_gtk_builder_get_widget (GtkBuilder  *builder,
+                         const gchar *name)
+{
+  GtkWidget *w;
+
+  w = (GtkWidget*) gtk_builder_get_object (builder, name);
+
+  g_assert (w != NULL);
+
+  return w;
+}
+
+#define WID(y) _gtk_builder_get_widget (priv->builder, y)
+
+#define VINO_SCHEMA_ID "org.gnome.Vino"
+#define FILE_SHARING_SCHEMA_ID "org.gnome.desktop.file-sharing"
+
+struct _CcSharingPanelPrivate
+{
+  GtkBuilder *builder;
+
+  GtkWidget *hostname_entry;
+
+  GtkWidget *bluetooth_sharing_dialog;
+  GtkWidget *media_sharing_dialog;
+  GtkWidget *personal_file_sharing_dialog;
+  GtkWidget *remote_login_dialog;
+  GtkWidget *screen_sharing_dialog;
+};
+
+static void
+cc_sharing_panel_dispose (GObject *object)
+{
+  CcSharingPanelPrivate *priv = CC_SHARING_PANEL (object)->priv;
+
+  g_clear_object (&priv->builder);
+
+  if (priv->bluetooth_sharing_dialog)
+    {
+      gtk_widget_destroy (priv->bluetooth_sharing_dialog);
+      priv->bluetooth_sharing_dialog = NULL;
+    }
+
+  if (priv->media_sharing_dialog)
+    {
+      gtk_widget_destroy (priv->media_sharing_dialog);
+      priv->media_sharing_dialog = NULL;
+    }
+
+  if (priv->personal_file_sharing_dialog)
+    {
+      gtk_widget_destroy (priv->personal_file_sharing_dialog);
+      priv->personal_file_sharing_dialog = NULL;
+    }
+
+  if (priv->remote_login_dialog)
+    {
+    gtk_widget_destroy (priv->remote_login_dialog);
+    priv->remote_login_dialog = NULL;
+    }
+
+  if (priv->screen_sharing_dialog)
+    {
+      gtk_widget_destroy (priv->screen_sharing_dialog);
+      priv->screen_sharing_dialog = NULL;
+    }
+
+  G_OBJECT_CLASS (cc_sharing_panel_parent_class)->dispose (object);
+}
+
+static void
+cc_sharing_panel_class_init (CcSharingPanelClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  g_type_class_add_private (klass, sizeof (CcSharingPanelPrivate));
+
+  object_class->dispose = cc_sharing_panel_dispose;
+}
+
+static void
+cc_sharing_panel_run_dialog (CcSharingPanel *self,
+                             const gchar    *dialog_name)
+{
+  CcSharingPanelPrivate *priv = self->priv;
+  GtkWidget *dialog, *parent;
+
+  dialog = WID (dialog_name);
+
+  parent = cc_shell_get_toplevel (cc_panel_get_shell (CC_PANEL (self)));
+
+  gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent));
+  gtk_dialog_run (GTK_DIALOG (dialog));
+}
+
+static void
+cc_sharing_panel_main_list_box_child_activated (EggListBox     *listbox,
+                                                GtkWidget      *widget,
+                                                CcSharingPanel *self)
+{
+  gchar *widget_name, *found;
+
+  widget_name = g_strdup (gtk_buildable_get_name (GTK_BUILDABLE (widget)));
+
+  if (!widget_name)
+    return;
+
+  egg_list_box_select_child (listbox, NULL);
+
+  /* replace "button" with "dialog" */
+  found = g_strrstr (widget_name, "button");
+
+  if (!found)
+    goto out;
+
+  memcpy (found, "dialog", 6);
+
+  cc_sharing_panel_run_dialog (self, widget_name);
+
+out:
+  g_free (widget_name);
+}
+
+static void
+cc_sharing_panel_main_list_box_update_separator (GtkWidget **separator,
+                                                 GtkWidget *child,
+                                                 GtkWidget *before,
+                                                 gpointer user_data)
+{
+  if (before == NULL)
+    {
+      g_clear_object (separator);
+      return;
+    }
+
+  if (*separator != NULL)
+    return;
+
+  *separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+  g_object_ref_sink (*separator);
+}
+
+static gboolean
+cc_sharing_panel_switch_to_label_transform_func (GBinding     *binding,
+                                                 const GValue *source_value,
+                                                 GValue       *target_value,
+                                                 gpointer      user_data)
+{
+  gboolean active;
+
+  if (!G_VALUE_HOLDS_BOOLEAN (source_value))
+    return FALSE;
+
+  if (!G_VALUE_HOLDS_STRING (target_value))
+    return FALSE;
+
+  active = g_value_get_boolean (source_value);
+
+  if (active)
+    g_value_set_string (target_value, C_("service is enabled", "On"));
+  else
+    g_value_set_string (target_value, C_("service is disabled", "Off"));
+
+  return TRUE;
+}
+
+static void
+cc_sharing_panel_bind_switch_to_label (GtkWidget *gtkswitch,
+                                       GtkWidget *label)
+{
+  g_object_bind_property_full (gtkswitch, "active", label, "label",
+                               G_BINDING_SYNC_CREATE,
+                               cc_sharing_panel_switch_to_label_transform_func,
+                               NULL, NULL, NULL);
+}
+
+static void
+cc_sharing_panel_bind_switch_to_widgets (GtkWidget *gtkswitch,
+                                         GtkWidget *first_widget,
+                                         ...)
+{
+  va_list w;
+  GtkWidget *widget;
+
+  va_start (w, first_widget);
+
+  g_object_bind_property (gtkswitch, "active", first_widget,
+                          "sensitive", G_BINDING_SYNC_CREATE);
+
+  while ((widget = va_arg (w, GtkWidget*)))
+    {
+      g_object_bind_property (gtkswitch, "active", widget,
+                              "sensitive", G_BINDING_SYNC_CREATE);
+    }
+
+  va_end (w);
+}
+
+static gboolean
+bluetooth_get_accept_files (GValue   *value,
+                            GVariant *variant,
+                            gpointer  user_data)
+{
+  gboolean bonded;
+
+  bonded = g_str_equal (g_variant_get_string (variant, NULL), "bonded");
+
+  g_value_set_boolean (value, bonded);
+
+  return TRUE;
+}
+
+static GVariant *
+bluetooth_set_accept_files (const GValue       *value,
+                            const GVariantType *type,
+                            gpointer            user_data)
+{
+  if (g_value_get_boolean (value))
+    return g_variant_new_string ("bonded");
+  else
+    return g_variant_new_string ("always");
+}
+
+static void
+cc_sharing_panel_setup_bluetooth_sharing_dialog (CcSharingPanel *self)
+{
+  CcSharingPanelPrivate *priv = self->priv;
+  GSettings *settings;
+
+  cc_sharing_panel_bind_switch_to_label (WID ("share-public-folder-switch"),
+                                         WID ("bluetooth-sharing-status-label"));
+
+  cc_sharing_panel_bind_switch_to_widgets (WID ("share-public-folder-switch"),
+                                           WID ("only-share-trusted-devices-switch"),
+                                           WID ("only-share-trusted-devices-label"),
+                                           NULL);
+
+  cc_sharing_panel_bind_switch_to_widgets (WID ("save-received-files-to-downloads-switch"),
+                                           WID ("receive-files-grid"),
+                                           NULL);
+
+  settings = g_settings_new (FILE_SHARING_SCHEMA_ID);
+  g_settings_bind (settings, "bluetooth-enabled",
+                   WID ("share-public-folder-switch"), "active",
+                   G_SETTINGS_BIND_DEFAULT);
+  g_settings_bind (settings, "bluetooth-require-pairing",
+                   WID ("only-share-trusted-devices-switch"), "active",
+                   G_SETTINGS_BIND_DEFAULT);
+  g_settings_bind (settings, "bluetooth-obexpush-enabled",
+                   WID ("save-received-files-to-downloads-switch"), "active",
+                   G_SETTINGS_BIND_DEFAULT);
+
+  g_settings_bind_with_mapping (settings, "bluetooth-accept-files",
+                                WID ("only-receive-from-trusted-devices-switch"),
+                                "active",
+                                G_SETTINGS_BIND_DEFAULT,
+                                bluetooth_get_accept_files,
+                                bluetooth_set_accept_files, NULL, NULL);
+
+}
+
+static void
+cc_sharing_panel_add_folder (GtkWidget      *button,
+                             CcSharingPanel *self)
+{
+  CcSharingPanelPrivate *priv = self->priv;
+  GtkWidget *dialog;
+  GtkListStore *store;
+  gchar *folder;
+
+  dialog = gtk_file_chooser_dialog_new (_("Choose a Folder"),
+                                        GTK_WINDOW (gtk_widget_get_toplevel (button)),
+                                        GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+                                        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                                        GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+                                        NULL);
+  gtk_dialog_run (GTK_DIALOG (dialog));
+
+  gtk_widget_hide (dialog);
+
+  store = (GtkListStore *) gtk_builder_get_object (priv->builder,
+                                                   "shared-folders-liststore");
+
+  folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog));
+
+  if (folder && !g_str_equal (folder, ""))
+    gtk_list_store_insert_with_values (store, NULL, -1, 0, folder, -1);
+
+  g_free (folder);
+
+  gtk_widget_destroy (dialog);
+}
+
+static void
+cc_sharing_panel_remove_folder (GtkButton      *button,
+                                CcSharingPanel *self)
+{
+  CcSharingPanelPrivate *priv = self->priv;
+  GtkTreeSelection *selection;
+  GtkTreeIter iter;
+  GtkTreeModel *model;
+
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (WID ("shared-folders-treeview")));
+
+  gtk_tree_selection_get_selected (selection, &model, &iter);
+
+  gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+}
+
+static void
+cc_sharing_panel_selection_changed (GtkTreeSelection *selection,
+                                    CcSharingPanel   *self)
+{
+  CcSharingPanelPrivate *priv = self->priv;
+
+  if (gtk_tree_selection_count_selected_rows (selection) > 0)
+    gtk_widget_set_sensitive (WID ("remove-button"), TRUE);
+  else
+    gtk_widget_set_sensitive (WID ("remove-button"), FALSE);
+}
+
+static void
+cc_sharing_panel_media_sharing_dialog_response (GtkDialog      *dialog,
+                                                gint            reponse_id,
+                                                CcSharingPanel *self)
+{
+  CcSharingPanelPrivate *priv = self->priv;
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+  gboolean valid;
+  GPtrArray *folders;
+
+  model = (GtkTreeModel *) gtk_builder_get_object (priv->builder,
+                                                   "shared-folders-liststore");
+
+  valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model), &iter);
+  folders = g_ptr_array_new_with_free_func (g_free);
+
+  while (valid)
+    {
+      gchar *folder;
+
+      gtk_tree_model_get (model, &iter, 0, &folder, -1);
+
+      g_ptr_array_add (folders, folder);
+
+      valid = gtk_tree_model_iter_next (model, &iter);
+    }
+
+  g_ptr_array_add (folders, NULL);
+
+  cc_media_sharing_set_preferences (gtk_switch_get_active (GTK_SWITCH (WID ("share-media-switch"))),
+                                    (gchar **) folders->pdata);
+
+
+  g_ptr_array_free (folders, TRUE);
+}
+
+static void
+cc_sharing_panel_setup_media_sharing_dialog (CcSharingPanel *self)
+{
+  CcSharingPanelPrivate *priv = self->priv;
+  gchar **folders, **list;
+  gboolean enabled;
+  GtkListStore *store;
+
+  cc_sharing_panel_bind_switch_to_label (WID ("share-media-switch"),
+                                         WID ("media-sharing-status-label"));
+
+
+  cc_sharing_panel_bind_switch_to_widgets (WID ("share-media-switch"),
+                                           WID ("shared-folders-box"),
+                                           NULL);
+
+  g_signal_connect (WID ("add-button"), "clicked",
+                    G_CALLBACK (cc_sharing_panel_add_folder), self);
+  g_signal_connect (WID ("remove-button"), "clicked",
+                    G_CALLBACK (cc_sharing_panel_remove_folder), self);
+
+  g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (WID ("shared-folders-treeview"))),
+                    "changed", G_CALLBACK (cc_sharing_panel_selection_changed), self);
+
+  g_signal_connect (WID ("media-sharing-dialog"), "response",
+                    G_CALLBACK (cc_sharing_panel_media_sharing_dialog_response),
+                    self);
+
+  cc_media_sharing_get_preferences (&enabled, &folders);
+
+  gtk_switch_set_active (GTK_SWITCH (WID ("share-media-switch")), enabled);
+
+  list = folders;
+  store = (GtkListStore *) gtk_builder_get_object (priv->builder,
+                                                   "shared-folders-liststore");
+  while (list && *list)
+    {
+      gtk_list_store_insert_with_values (store, NULL, -1, 0, *list, -1);
+      list++;
+    }
+
+  g_strfreev (folders);
+}
+
+static gboolean
+cc_sharing_panel_label_activate_link (GtkLabel *label,
+                                      gchar    *uri,
+                                      GtkMenu  *menu)
+{
+  gtk_menu_popup (menu, NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time ());
+
+  g_object_set_data_full (G_OBJECT (menu), "uri-text", g_strdup (uri), g_free);
+
+  return TRUE;
+}
+
+static void
+copy_uri_to_clipboard (GtkMenuItem *item,
+                       GtkMenu     *menu)
+{
+  GtkClipboard *clipboard;
+  const gchar *text;
+
+  text = g_object_get_data (G_OBJECT (menu), "uri-text");
+
+  clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
+  gtk_clipboard_set_text (clipboard, text, -1);
+}
+
+static void
+cc_sharing_panel_setup_label_with_hostname (CcSharingPanel *self,
+                                            GtkWidget      *label)
+{
+  gchar *text;
+  gchar *hostname;
+  GtkWidget *menu;
+  GtkWidget *menu_item;
+
+  /* create the menu */
+  menu = gtk_menu_new ();
+
+  menu_item = gtk_menu_item_new_with_label (_("Copy"));
+  gtk_widget_show (menu_item);
+
+  g_signal_connect (menu_item, "activate", G_CALLBACK (copy_uri_to_clipboard),
+                    menu);
+
+  gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+
+  /* set the hostname */
+  hostname = cc_hostname_entry_get_hostname (CC_HOSTNAME_ENTRY (self->priv->hostname_entry));
+
+  text = g_strdup_printf (gtk_label_get_label (GTK_LABEL (label)), hostname,
+                          hostname);
+
+  gtk_label_set_label (GTK_LABEL (label), text);
+
+  /* show the menu when the link is activated */
+  g_signal_connect (label, "activate-link",
+                    G_CALLBACK (cc_sharing_panel_label_activate_link), menu);
+
+  /* destroy the menu when the label is destroyed */
+  g_signal_connect_swapped (label, "destroy", G_CALLBACK (gtk_widget_destroy),
+                            menu);
+
+  g_free (hostname);
+  g_free (text);
+}
+
+static gboolean
+file_sharing_get_require_password (GValue   *value,
+                                   GVariant *variant,
+                                   gpointer  user_data)
+{
+  if (g_str_equal (g_variant_get_string (variant, NULL), "always"))
+    g_value_set_boolean (value, TRUE);
+  else
+    g_value_set_boolean (value, FALSE);
+
+  return TRUE;
+}
+
+static GVariant *
+file_sharing_set_require_password (const GValue       *value,
+                                   const GVariantType *type,
+                                   gpointer            user_data)
+{
+  if (g_value_get_boolean (value))
+    return g_variant_new_string ("always");
+  else
+    return g_variant_new_string ("never");
+}
+
+static void
+file_sharing_password_changed (GtkEntry *entry)
+{
+  file_share_write_out_password (gtk_entry_get_text (entry));
+}
+
+static void
+cc_sharing_panel_setup_personal_file_sharing_dialog (CcSharingPanel *self)
+{
+  CcSharingPanelPrivate *priv = self->priv;
+  GSettings *settings;
+
+
+  cc_sharing_panel_bind_switch_to_label (WID ("share-public-folder-on-network-switch"),
+                                         WID ("personal-file-sharing-status-label"));
+
+  cc_sharing_panel_bind_switch_to_widgets (WID ("share-public-folder-on-network-switch"),
+                                           WID ("require-password-grid"),
+                                           NULL);
+
+  cc_sharing_panel_bind_switch_to_widgets (WID ("personal-file-sharing-require-password-switch"),
+                                           WID ("personal-file-sharing-password-entry"),
+                                           WID ("personal-file-sharing-password-label"),
+                                           NULL);
+
+  cc_sharing_panel_setup_label_with_hostname (self,
+                                              WID ("personal-file-sharing-label"));
+
+  /* the password cannot be read, so just make sure the entry is not empty */
+  gtk_entry_set_text (GTK_ENTRY (WID ("personal-file-sharing-password-entry")),
+                      "password");
+
+  settings = g_settings_new (FILE_SHARING_SCHEMA_ID);
+  g_settings_bind (settings, "enabled",
+                   WID ("share-public-folder-on-network-switch"), "active",
+                   G_SETTINGS_BIND_DEFAULT);
+
+  g_settings_bind_with_mapping (settings, "require-password",
+                                WID ("personal-file-sharing-require-password-switch"),
+                                "active",
+                                G_SETTINGS_BIND_DEFAULT,
+                                file_sharing_get_require_password,
+                                file_sharing_set_require_password, NULL, NULL);
+
+  g_signal_connect (WID ("personal-file-sharing-password-entry"),
+                    "notify::text", G_CALLBACK (file_sharing_password_changed),
+                    NULL);
+}
+
+static void
+remote_login_switch_activate (GtkSwitch      *remote_login_switch,
+                              CcSharingPanel *self)
+{
+  cc_remote_login_set_enabled (gtk_switch_get_active (remote_login_switch));
+}
+
+static void
+cc_sharing_panel_setup_remote_login_dialog (CcSharingPanel *self)
+{
+  CcSharingPanelPrivate *priv = self->priv;
+
+  cc_sharing_panel_bind_switch_to_label (WID ("remote-login-switch"),
+                                         WID ("remote-login-status-label"));
+
+  cc_sharing_panel_setup_label_with_hostname (self, WID ("remote-login-label"));
+
+  g_signal_connect (WID ("remote-login-switch"), "notify::active",
+                    G_CALLBACK (remote_login_switch_activate), self);
+  gtk_widget_set_sensitive (WID ("remote-login-switch"), FALSE);
+
+  cc_remote_login_get_enabled (GTK_SWITCH (WID ("remote-login-switch")));
+
+}
+
+static gboolean
+cc_sharing_panel_check_schema_available (CcSharingPanel *self,
+                                         const gchar *schema_id)
+{
+  const gchar * const* schema_list;
+
+  if (schema_id == NULL)
+    return FALSE;
+
+  schema_list = g_settings_list_schemas ();
+
+  while (*schema_list)
+    {
+      if (g_str_equal (*schema_list, schema_id))
+        return TRUE;
+
+      schema_list++;
+    }
+
+  return FALSE;
+}
+
+static void
+cc_sharing_panel_setup_screen_sharing_dialog (CcSharingPanel *self)
+{
+  CcSharingPanelPrivate *priv = self->priv;
+  GSettings *settings;
+
+  cc_sharing_panel_bind_switch_to_label (WID ("remote-view-switch"),
+                                         WID ("screen-sharing-status-label"));
+
+  cc_sharing_panel_bind_switch_to_widgets (WID ("remote-view-switch"),
+                                           WID ("remote-control-switch"),
+                                           WID ("remote-control-label"),
+                                           WID ("remote-control-grid"),
+                                           NULL);
+
+  cc_sharing_panel_bind_switch_to_widgets (WID ("remote-control-switch"),
+                                           WID ("approve-all-connections-switch"),
+                                           WID ("remote-control-require-password-switch"),
+                                           WID ("remote-control-require-password-label"),
+                                           WID ("approve-all-connections-label"),
+                                           WID ("password-box"),
+                                           NULL);
+
+  cc_sharing_panel_bind_switch_to_widgets (WID ("remote-control-require-password-switch"),
+                                           WID ("remote-control-password-entry"),
+                                           WID ("remote-control-password-label"),
+                                           NULL);
+
+  cc_sharing_panel_setup_label_with_hostname (self,
+                                              WID ("screen-sharing-label"));
+
+  /* settings bindings */
+  settings = g_settings_new (VINO_SCHEMA_ID);
+  g_settings_bind (settings, "enabled", WID ("remote-view-switch"), "active",
+                   G_SETTINGS_BIND_DEFAULT);
+  g_settings_bind (settings, "view-only", WID ("remote-control-switch"),
+                   "active",
+                   G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_INVERT_BOOLEAN);
+  g_settings_bind (settings, "prompt-enabled",
+                   WID ("approve-all-connections-switch"), "active",
+                   G_SETTINGS_BIND_DEFAULT);
+  g_settings_bind_with_mapping (settings, "authentication-methods",
+                                WID ("remote-control-require-password-switch"),
+                                "active",
+                                G_SETTINGS_BIND_DEFAULT,
+                                vino_get_authtype, vino_set_authtype, NULL, NULL);
+
+  g_settings_bind_with_mapping (settings, "vnc-password",
+                                WID ("remote-control-password-entry"),
+                                "text",
+                                G_SETTINGS_BIND_DEFAULT,
+                                vino_get_password, vino_set_password, NULL, NULL);
+}
+
+static void
+cc_sharing_panel_init (CcSharingPanel *self)
+{
+  CcSharingPanelPrivate *priv = self->priv = PANEL_PRIVATE (self);
+  GError *err = NULL;
+  gchar *objects[] = {
+      "sharing-panel",
+      "bluetooth-sharing-dialog",
+      "shared-folders-liststore",
+      "media-sharing-dialog",
+      "personal-file-sharing-dialog",
+      "remote-login-dialog",
+      "screen-sharing-dialog",
+      NULL };
+
+  g_resources_register (cc_sharing_get_resource ());
+
+  priv->builder = gtk_builder_new ();
+
+  gtk_builder_add_objects_from_resource (priv->builder,
+                                         "/org/gnome/control-center/sharing/sharing.ui",
+                                         objects, &err);
+
+  if (err)
+    g_error ("Error loading CcSharingPanel user interface: %s", err->message);
+
+  priv->hostname_entry = WID ("hostname-entry");
+
+  gtk_container_add (GTK_CONTAINER (self), WID ("sharing-panel"));
+
+  g_signal_connect (WID ("main-list-box"), "child-activated",
+                    G_CALLBACK (cc_sharing_panel_main_list_box_child_activated), self);
+
+  priv->bluetooth_sharing_dialog = WID ("bluetooth-sharing-dialog");
+  priv->media_sharing_dialog = WID ("media-sharing-dialog");
+  priv->personal_file_sharing_dialog = WID ("personal-file-sharing-dialog");
+  priv->remote_login_dialog = WID ("remote-login-dialog");
+  priv->screen_sharing_dialog = WID ("screen-sharing-dialog");
+
+  g_signal_connect (priv->bluetooth_sharing_dialog, "response",
+                    G_CALLBACK (gtk_widget_hide), NULL);
+  g_signal_connect (priv->media_sharing_dialog, "response",
+                    G_CALLBACK (gtk_widget_hide), NULL);
+  g_signal_connect (priv->personal_file_sharing_dialog, "response",
+                    G_CALLBACK (gtk_widget_hide), NULL);
+  g_signal_connect (priv->remote_login_dialog, "response",
+                    G_CALLBACK (gtk_widget_hide), NULL);
+  g_signal_connect (priv->screen_sharing_dialog, "response",
+                    G_CALLBACK (gtk_widget_hide), NULL);
+
+  egg_list_box_set_activate_on_single_click (EGG_LIST_BOX (WID ("main-list-box")),
+                                             TRUE);
+  egg_list_box_set_separator_funcs (EGG_LIST_BOX (WID ("main-list-box")),
+                                    cc_sharing_panel_main_list_box_update_separator,
+                                    NULL, NULL);
+
+  /* bluetooth */
+  if (cc_sharing_panel_check_schema_available (self, FILE_SHARING_SCHEMA_ID))
+    cc_sharing_panel_setup_bluetooth_sharing_dialog (self);
+  else
+    gtk_widget_hide (WID ("bluetooth-sharing-button"));
+
+  /* media sharing */
+  cc_sharing_panel_setup_media_sharing_dialog (self);
+
+  /* personal file sharing */
+  if (cc_sharing_panel_check_schema_available (self, FILE_SHARING_SCHEMA_ID))
+    cc_sharing_panel_setup_personal_file_sharing_dialog (self);
+  else
+    gtk_widget_hide (WID ("personal-file-sharing-button"));
+
+  /* remote login */
+  cc_sharing_panel_setup_remote_login_dialog (self);
+
+  /* screen sharing */
+  if (cc_sharing_panel_check_schema_available (self, VINO_SCHEMA_ID))
+    cc_sharing_panel_setup_screen_sharing_dialog (self);
+  else
+    gtk_widget_hide (WID ("screen-sharing-button"));
+}
+
+CcSharingPanel *
+cc_sharing_panel_new (void)
+{
+  return g_object_new (CC_TYPE_SHARING_PANEL, NULL);
+}
diff --git a/panels/sharing/cc-sharing-panel.h b/panels/sharing/cc-sharing-panel.h
new file mode 100644
index 0000000..9004fd8
--- /dev/null
+++ b/panels/sharing/cc-sharing-panel.h
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2013 Intel, Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Author: Thomas Wood <thomas wood intel com>
+ *
+ */
+
+#ifndef __CC_SHARING_PANEL_H__
+#define __CC_SHARING_PANEL_H__
+
+#include <shell/cc-shell.h>
+
+G_BEGIN_DECLS
+
+#define CC_TYPE_SHARING_PANEL cc_sharing_panel_get_type()
+
+#define CC_SHARING_PANEL(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+  CC_TYPE_SHARING_PANEL, CcSharingPanel))
+
+#define CC_SHARING_PANEL_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), \
+  CC_TYPE_SHARING_PANEL, CcSharingPanelClass))
+
+#define CC_SHARING_IS_PANEL(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+  CC_TYPE_SHARING_PANEL))
+
+#define CC_SHARING_IS_PANEL_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+  CC_TYPE_SHARING_PANEL))
+
+#define CC_SHARING_PANEL_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+  CC_TYPE_SHARING_PANEL, CcSharingPanelClass))
+
+typedef struct _CcSharingPanel CcSharingPanel;
+typedef struct _CcSharingPanelClass CcSharingPanelClass;
+typedef struct _CcSharingPanelPrivate CcSharingPanelPrivate;
+
+struct _CcSharingPanel
+{
+  CcPanel parent;
+
+  CcSharingPanelPrivate *priv;
+};
+
+struct _CcSharingPanelClass
+{
+  CcPanelClass parent_class;
+};
+
+GType cc_sharing_panel_get_type (void) G_GNUC_CONST;
+
+CcSharingPanel *cc_sharing_panel_new (void);
+
+G_END_DECLS
+
+#endif /* __CC_SHARING_PANEL_H__ */
diff --git a/panels/sharing/file-share-properties.c b/panels/sharing/file-share-properties.c
new file mode 100644
index 0000000..1be0d7a
--- /dev/null
+++ b/panels/sharing/file-share-properties.c
@@ -0,0 +1,60 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
+
+/*
+ *  Copyright (C) 2004 Red Hat, Inc.
+ *
+ *  Nautilus is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as
+ *  published by the Free Software Foundation; either version 2 of the
+ *  License, or (at your option) any later version.
+ *
+ *  Nautilus is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  Authors: Alexander Larsson <alexl redhat com>
+ *
+ */
+
+#include "file-share-properties.h"
+
+#include <string.h>
+#include <stdio.h>
+
+#include <glib.h>
+
+
+#define REALM "Please log in as the user guest"
+#define USER "guest"
+
+void
+file_share_write_out_password (const char *password)
+{
+    char *to_hash;
+    char *ascii_digest;
+    char *line;
+    char *filename;
+    FILE *file;
+
+    to_hash = g_strdup_printf ("%s:%s:%s", USER, REALM, password);
+    ascii_digest = g_compute_checksum_for_string (G_CHECKSUM_MD5, to_hash, strlen (to_hash));
+    g_free (to_hash);
+    line = g_strdup_printf ("%s:%s:%s\n", USER, REALM, ascii_digest);
+    g_free (ascii_digest);
+
+    filename = g_build_filename (g_get_user_config_dir (), "user-share", "passwd", NULL);
+
+    file = fopen (filename, "w");
+    if (file != NULL) {
+	fwrite (line, strlen (line), 1, file);
+	fclose (file);
+    }
+
+    g_free (filename);
+    g_free (line);
+}
diff --git a/panels/sharing/file-share-properties.h b/panels/sharing/file-share-properties.h
new file mode 100644
index 0000000..d82455c
--- /dev/null
+++ b/panels/sharing/file-share-properties.h
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2013 Intel, Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef __FILE_SHARE_PROPERTIES_H__
+#define __FILE_SHARE_PROPERTIES_H__
+
+void file_share_write_out_password (const char *password);
+
+#endif /* __FILE_SHARE_PROPERTIES_H__ */
diff --git a/panels/sharing/gnome-sharing-panel.desktop.in.in b/panels/sharing/gnome-sharing-panel.desktop.in.in
new file mode 100644
index 0000000..46e754a
--- /dev/null
+++ b/panels/sharing/gnome-sharing-panel.desktop.in.in
@@ -0,0 +1,13 @@
+[Desktop Entry]
+_Name=Sharing
+_Comment=Sharing
+Exec=gnome-control-center sharing
+Icon=preferences-desktop-sharing
+Terminal=false
+Type=Application
+StartupNotify=true
+Categories=GNOME;GTK;Settings;DesktopSettings;X-GNOME-Settings-Panel;X-GNOME-PersonalSettings
+OnlyShowIn=GNOME;Unity;
+X-GNOME-Settings-Panel=sharing
+# Translators: those are keywords for the sharing control-center panel
+_Keywords=Share, sharing, ssh, host, name, remote, desktop, bluetooth, obex
diff --git a/panels/sharing/sharing.gresource.xml b/panels/sharing/sharing.gresource.xml
new file mode 100644
index 0000000..347355d
--- /dev/null
+++ b/panels/sharing/sharing.gresource.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+  <gresource prefix="/org/gnome/control-center/sharing">
+    <file preprocess="xml-stripblanks">sharing.ui</file>
+  </gresource>
+</gresources>
diff --git a/panels/sharing/sharing.ui b/panels/sharing/sharing.ui
new file mode 100644
index 0000000..56b7e85
--- /dev/null
+++ b/panels/sharing/sharing.ui
@@ -0,0 +1,1181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkDialog" id="bluetooth-sharing-dialog">
+    <property name="can_focus">False</property>
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">Bluetooth Sharing</property>
+    <property name="type_hint">dialog</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox6">
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area6">
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="button6">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkGrid" id="grid1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkLabel" id="label1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="margin_bottom">12</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Bluetooth Sharing allows you to share files with other Bluetooth enabled devices</property>
+                <property name="wrap">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+                <property name="width">2</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkSwitch" id="share-public-folder-switch">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkSwitch" id="only-share-trusted-devices-switch">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">2</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">start</property>
+                <property name="hexpand">True</property>
+                <property name="label" translatable="yes">&lt;b&gt;Share Public Folder&lt;/b&gt;</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="only-share-trusted-devices-label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">start</property>
+                <property name="label" translatable="yes">Only share with Trusted Devices</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">2</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkGrid" id="receive-files-grid">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkLabel" id="label4">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="halign">start</property>
+                    <property name="hexpand">True</property>
+                    <property name="label" translatable="yes">Only Receive From Trusted Devices</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">0</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkSwitch" id="only-receive-from-trusted-devices-switch">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">0</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">4</property>
+                <property name="width">2</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label5">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">start</property>
+                <property name="label" translatable="yes">&lt;b&gt;Save Received Files to Downloads Folder&lt;/b&gt;</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">3</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkSwitch" id="save-received-files-to-downloads-switch">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">3</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">button6</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkWindow" id="main-window">
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkBox" id="sharing-panel">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="margin_left">128</property>
+        <property name="margin_right">128</property>
+        <property name="margin_top">16</property>
+        <property name="margin_bottom">16</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkLabel" id="label6">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">0</property>
+            <property name="label" translatable="yes">&lt;b&gt;Computer Name&lt;/b&gt;</property>
+            <property name="use_markup">True</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="CcHostnameEntry" id="hostname-entry">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="margin_bottom">12</property>
+            <property name="invisible_char">â</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkScrolledWindow" id="scrolledwindow2">
+            <property name="width_request">400</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="vexpand">True</property>
+            <property name="vscrollbar_policy">never</property>
+            <property name="shadow_type">in</property>
+            <child>
+              <object class="GtkViewport" id="viewport1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="EggListBox" id="main-list-box">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <child>
+                      <object class="GtkBox" id="bluetooth-sharing-button">
+                        <property name="border-width">12</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkLabel" id="label7">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="halign">start</property>
+                            <property name="hexpand">True</property>
+                            <property name="label">Bluetooth Sharing</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="bluetooth-sharing-status-label">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label">Off</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkBox" id="personal-file-sharing-button">
+                        <property name="border-width">12</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkLabel" id="label8">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="halign">start</property>
+                            <property name="hexpand">True</property>
+                            <property name="label">Personal File Sharing</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="personal-file-sharing-status-label">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label">Off</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkBox" id="screen-sharing-button">
+                        <property name="border-width">12</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkLabel" id="label9">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="halign">start</property>
+                            <property name="hexpand">True</property>
+                            <property name="label">Screen Sharing</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="screen-sharing-status-label">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label">Off</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkBox" id="media-sharing-button">
+                        <property name="border-width">12</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkLabel" id="label10">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="halign">start</property>
+                            <property name="hexpand">True</property>
+                            <property name="label">Media Sharing</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="media-sharing-status-label">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label">Off</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkBox" id="remote-login-button">
+                        <property name="border-width">12</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkLabel" id="label11">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="halign">start</property>
+                            <property name="hexpand">True</property>
+                            <property name="label">Remote Login</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="remote-login-status-label">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label">Off</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label12">
+            <property name="can_focus">False</property>
+            <property name="xalign">0</property>
+            <property name="label" translatable="yes">Some services are disabled because of no network access.</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">7</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+  <object class="GtkDialog" id="media-sharing-dialog">
+    <property name="can_focus">False</property>
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">Media Sharing</property>
+    <property name="type_hint">dialog</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox2">
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area2">
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="button9">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkGrid" id="grid4">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkLabel" id="label13">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="margin_bottom">12</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Share Music, Photos and Videos with others on the current network.</property>
+                <property name="wrap">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+                <property name="width">2</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkSwitch" id="share-media-switch">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="halign">end</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label14">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">start</property>
+                <property name="hexpand">True</property>
+                <property name="label" translatable="yes">&lt;b&gt;Share Media On This Network&lt;/b&gt;</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label15">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Shared Folders</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">2</property>
+                <property name="width">2</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkBox" id="shared-folders-box">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="orientation">vertical</property>
+                <child>
+                  <object class="GtkScrolledWindow" id="scrolledwindow1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="vexpand">True</property>
+                    <property name="shadow_type">in</property>
+                    <child>
+                      <object class="GtkTreeView" id="shared-folders-treeview">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="model">shared-folders-liststore</property>
+                        <property name="headers_visible">False</property>
+                        <property name="headers_clickable">False</property>
+                        <property name="search_column">0</property>
+                        <child internal-child="selection">
+                          <object class="GtkTreeSelection" id="treeview-selection"/>
+                        </child>
+                        <child>
+                          <object class="GtkTreeViewColumn" id="treeviewcolumn1">
+                            <property name="title" translatable="yes">column</property>
+                            <child>
+                              <object class="GtkCellRendererText" id="cellrenderertext1"/>
+                              <attributes>
+                                <attribute name="text">0</attribute>
+                              </attributes>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkToolbar" id="toolbar">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="toolbar_style">icons</property>
+                    <property name="icon_size">1</property>
+                    <style>
+                      <class name="inline-toolbar"/>
+                    </style>
+                    <child>
+                      <object class="GtkToolButton" id="add-button">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Add Folder</property>
+                        <property name="use_underline">True</property>
+                        <property name="icon_name">list-add-symbolic</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="homogeneous">True</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkToolButton" id="remove-button">
+                        <property name="visible">True</property>
+                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Remove Folder</property>
+                        <property name="use_underline">True</property>
+                        <property name="icon_name">list-remove-symbolic</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="homogeneous">True</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">3</property>
+                <property name="width">2</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">button9</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkDialog" id="personal-file-sharing-dialog">
+    <property name="can_focus">False</property>
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">Personal File Sharing</property>
+    <property name="type_hint">dialog</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox5">
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area5">
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="button7">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkGrid" id="grid2">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkLabel" id="personal-file-sharing-label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="margin_bottom">12</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Personal File Sharing allows you to share your Public folder with others on your current network using: &lt;a href="dav://%s"&gt;dav://%s&lt;/a&gt;</property>
+                <property name="use_markup">True</property>
+                <property name="wrap">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+                <property name="width">2</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkSwitch" id="share-public-folder-on-network-switch">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="halign">end</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label16">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">start</property>
+                <property name="hexpand">True</property>
+                <property name="label" translatable="yes">&lt;b&gt;Share Public Folder On This Network&lt;/b&gt;</property>
+                <property name="use_markup">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkGrid" id="require-password-grid">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkLabel" id="label17">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="halign">start</property>
+                    <property name="label" translatable="yes">Require Password</property>
+                    <property name="use_markup">True</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">0</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="personal-file-sharing-password-label">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="halign">start</property>
+                    <property name="hexpand">True</property>
+                    <property name="label" translatable="yes">Password</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">1</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkSwitch" id="personal-file-sharing-require-password-switch">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="halign">end</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">0</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkEntry" id="personal-file-sharing-password-entry">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="visibility">False</property>
+                    <property name="invisible_char">â</property>
+                    <property name="shadow_type">none</property>
+                    <property name="invisible_char_set">True</property>
+                    <property name="input_purpose">password</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">1</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">2</property>
+                <property name="width">2</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">button7</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkDialog" id="remote-login-dialog">
+    <property name="can_focus">False</property>
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">Remote Login</property>
+    <property name="type_hint">dialog</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox4">
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area4">
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="button8">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox" id="box9">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="orientation">vertical</property>
+            <child>
+              <object class="GtkGrid" id="grid5">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkLabel" id="remote-login-label">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="margin_bottom">12</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Allow remote users to connect using the Secure Shell command:
+&lt;a href="ssh %s"&gt;ssh %s&lt;/a&gt;</property>
+                    <property name="use_markup">True</property>
+                    <property name="wrap">True</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">0</property>
+                    <property name="width">2</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkSwitch" id="remote-login-switch">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="halign">end</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">1</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label19">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="halign">start</property>
+                    <property name="hexpand">True</property>
+                    <property name="label" translatable="yes">&lt;b&gt;Remote Login&lt;/b&gt;</property>
+                    <property name="use_markup">True</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">1</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">button8</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkDialog" id="screen-sharing-dialog">
+    <property name="can_focus">False</property>
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">Screen Sharing</property>
+    <property name="type_hint">dialog</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox1">
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area1">
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="button10">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox" id="box8">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="orientation">vertical</property>
+            <child>
+              <object class="GtkGrid" id="grid3">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkLabel" id="screen-sharing-label">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="margin_bottom">12</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Allow remote users to view or control your screen by connecting to: &lt;a href="vnc://%s"&gt;vnc://%s&lt;/a&gt;</property>
+                    <property name="use_markup">True</property>
+                    <property name="wrap">True</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">0</property>
+                    <property name="width">2</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkSwitch" id="remote-view-switch">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="halign">end</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">1</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkSwitch" id="remote-control-switch">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="halign">end</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">2</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label20">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="halign">start</property>
+                    <property name="hexpand">True</property>
+                    <property name="label" translatable="yes">&lt;b&gt;Remote View&lt;/b&gt;</property>
+                    <property name="use_markup">True</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">1</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="remote-control-label">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="halign">start</property>
+                    <property name="label" translatable="yes">&lt;b&gt;Remote Control&lt;/b&gt;</property>
+                    <property name="use_markup">True</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">2</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkGrid" id="remote-control-grid">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <child>
+                      <object class="GtkLabel" id="remote-control-require-password-label">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">Require Password</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">1</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="approve-all-connections-label">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="halign">start</property>
+                        <property name="hexpand">True</property>
+                        <property name="label" translatable="yes">Approve All Connections</property>
+                        <property name="use_markup">True</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">0</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkSwitch" id="remote-control-require-password-switch">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="halign">end</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">1</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkSwitch" id="approve-all-connections-switch">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="halign">end</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">0</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkBox" id="password-box">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkLabel" id="remote-control-password-label">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="halign">start</property>
+                            <property name="hexpand">True</property>
+                            <property name="label" translatable="yes">Password</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkEntry" id="remote-control-password-entry">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="visibility">False</property>
+                            <property name="invisible_char">â</property>
+                            <property name="shadow_type">none</property>
+                            <property name="invisible_char_set">True</property>
+                            <property name="input_purpose">password</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">2</property>
+                        <property name="width">2</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">3</property>
+                    <property name="width">2</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">button10</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkListStore" id="shared-folders-liststore">
+    <columns>
+      <!-- column-name Folder -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
+</interface>
diff --git a/panels/sharing/vino-preferences.c b/panels/sharing/vino-preferences.c
new file mode 100644
index 0000000..f92d5c3
--- /dev/null
+++ b/panels/sharing/vino-preferences.c
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2003 Sun Microsystems, Inc.
+ * Copyright (C) 2006 Jonh Wendell <wendell bani com br> 
+ * Copyright  2010 Codethink Limited
+ * Copyright (C) 2013 Intel, Inc
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ *      Mark McLoughlin <mark skynet ie>
+ *      Jonh Wendell <wendell bani com br>
+ *      Ryan Lortie <desrt desrt ca>
+ */
+
+#include "vino-preferences.h"
+#include <string.h>
+
+#include <glib/gi18n.h>
+
+gboolean
+vino_get_authtype (GValue   *value,
+                   GVariant *variant,
+                   gpointer  user_data)
+{
+  GVariantIter iter;
+  const gchar *type;
+
+  g_variant_iter_init (&iter, variant);
+  g_value_set_boolean (value, TRUE);
+
+  while (g_variant_iter_next (&iter, "s", &type))
+    if (strcmp (type, "none") == 0)
+      g_value_set_boolean (value, FALSE);
+
+  return TRUE;
+}
+
+GVariant *
+vino_set_authtype (const GValue       *value,
+                   const GVariantType *type,
+                   gpointer            user_data)
+{
+  const gchar *authtype;
+
+  if (g_value_get_boolean (value))
+    authtype = "vnc";
+  else
+    authtype = "none";
+
+  return g_variant_new_strv (&authtype, 1);
+}
+
+gboolean
+vino_get_password (GValue   *value,
+                   GVariant *variant,
+                   gpointer  user_data)
+{
+  const gchar *setting;
+
+  setting = g_variant_get_string (variant, NULL);
+
+  if (strcmp (setting, "keyring") == 0)
+    {
+      /* "keyring" is the default value, even though vino doesn't support it at
+       * the moment */
+
+      g_value_set_static_string (value, "");
+      return TRUE;
+    }
+  else
+    {
+      gchar *decoded;
+      gsize length;
+      gboolean ok;
+
+      decoded = (gchar *) g_base64_decode (setting, &length);
+
+      if ((ok = g_utf8_validate (decoded, length, NULL)))
+        g_value_take_string (value, g_strndup (decoded, length));
+
+      return ok;
+    }
+}
+
+GVariant *
+vino_set_password (const GValue       *value,
+                   const GVariantType *type,
+                   gpointer            user_data)
+{
+  const gchar *string;
+  gchar *base64;
+
+  string = g_value_get_string (value);
+
+  base64 = g_base64_encode ((guchar *) string, strlen (string));
+  return g_variant_new_from_data (G_VARIANT_TYPE_STRING,
+                                  base64, strlen (base64) + 1,
+                                  TRUE, g_free, base64);
+}
+
diff --git a/panels/sharing/vino-preferences.h b/panels/sharing/vino-preferences.h
new file mode 100644
index 0000000..98ec938
--- /dev/null
+++ b/panels/sharing/vino-preferences.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2003 Sun Microsystems, Inc.
+ * Copyright (C) 2006 Jonh Wendell <wendell bani com br> 
+ * Copyright  2010 Codethink Limited
+ * Copyright (C) 2013 Intel, Inc
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ *      Mark McLoughlin <mark skynet ie>
+ *      Jonh Wendell <wendell bani com br>
+ *      Ryan Lortie <desrt desrt ca>
+ */
+
+#ifndef __VINO_PREFERENCES_H__
+#define __VINO_PREFERENCES_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+GVariant * vino_set_authtype (const GValue       *value,
+                              const GVariantType *type,
+                              gpointer            user_data);
+gboolean vino_get_authtype (GValue   *value,
+                            GVariant *variant,
+                            gpointer  user_data);
+
+GVariant *
+vino_set_password (const GValue       *value,
+                   const GVariantType *type,
+                   gpointer            user_data);
+gboolean
+vino_get_password (GValue   *value,
+                   GVariant *variant,
+                   gpointer  user_data);
+
+#endif /* __VINO_PREFERENCES_H__ */
diff --git a/po/POTFILES.in b/po/POTFILES.in
index dea1a86..031ac17 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -98,6 +98,9 @@ panels/search/cc-search-panel.c
 panels/search/gnome-search-panel.desktop.in.in
 [type: gettext/glade]panels/search/search-locations-dialog.ui
 [type: gettext/glade]panels/search/search.ui
+panels/sharing/cc-sharing-panel.c
+panels/sharing/gnome-sharing-panel.desktop.in.in
+[type: gettext/glade]panels/sharing/sharing.ui
 panels/sound/cc-sound-panel.c
 panels/sound/data/gnome-sound-panel.desktop.in.in
 panels/sound/data/sounds/gnome-sounds-default.xml.in.in
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
index 1995fca..383b5bf 100644
--- a/po/POTFILES.skip
+++ b/po/POTFILES.skip
@@ -15,6 +15,7 @@ panels/privacy/gnome-privacy-panel.desktop.in
 panels/region/gnome-region-panel.desktop.in
 panels/screen/gnome-screen-panel.desktop.in
 panels/search/gnome-search-panel.desktop.in
+panels/sharing/gnome-sharing-panel.desktop.in
 panels/sound/data/gnome-sound-panel.desktop.in
 panels/sound/data/sounds/gnome-sounds-default.xml.in
 panels/universal-access/gnome-universal-access-panel.desktop.in
diff --git a/shell/Makefile.am b/shell/Makefile.am
index a238cb1..75454e3 100644
--- a/shell/Makefile.am
+++ b/shell/Makefile.am
@@ -59,6 +59,7 @@ gnome_control_center_LDADD =						\
 	$(top_builddir)/panels/region/libregion.la			\
 	$(top_builddir)/panels/screen/libscreen.la			\
 	$(top_builddir)/panels/search/libsearch.la			\
+	$(top_builddir)/panels/sharing/libsharing.la			\
 	$(top_builddir)/panels/sound/libsound.la			\
 	$(top_builddir)/panels/universal-access/libuniversal-access.la	\
 	$(top_builddir)/panels/user-accounts/libuser-accounts.la
diff --git a/shell/cc-panel-loader.c b/shell/cc-panel-loader.c
index 0c699d3..8ab65a5 100644
--- a/shell/cc-panel-loader.c
+++ b/shell/cc-panel-loader.c
@@ -50,6 +50,7 @@ extern GType cc_privacy_panel_get_type (void);
 extern GType cc_region_panel_get_type (void);
 extern GType cc_screen_panel_get_type (void);
 extern GType cc_search_panel_get_type (void);
+extern GType cc_sharing_panel_get_type (void);
 extern GType cc_sound_panel_get_type (void);
 extern GType cc_ua_panel_get_type (void);
 extern GType cc_user_panel_get_type (void);
@@ -84,6 +85,7 @@ static struct {
   { "region",           cc_region_panel_get_type     },
   { "screen",           cc_screen_panel_get_type     },
   { "search",           cc_search_panel_get_type     },
+  { "sharing",          cc_sharing_panel_get_type    },
   { "sound",            cc_sound_panel_get_type      },
   { "universal-access", cc_ua_panel_get_type         },
   { "user-accounts",    cc_user_panel_get_type       },



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]