vino r879 - in trunk: . capplet server



Author: jwendell
Date: Sat Jul 26 02:11:08 2008
New Revision: 879
URL: http://svn.gnome.org/viewvc/vino?rev=879&view=rev

Log:
2008-07-25  Jorge Pereira  <jorge jorgepereira com br>

	* capplet/vino-preferences.c:
	(vino_preferences_dialog_update_for_allowed),
	(vino_preferences_dialog_disable_background_toggled),
	(vino_preferences_dialog_disable_background_notify),
	(vino_preferences_dialog_setup_disable_background_toggle),
	(vino_preferences_dialog_init):
	* capplet/vino-preferences.glade:
	* server/Makefile.am:
	* server/vino-background.c: (vino_background_handler),
	(vino_background_draw):
	* server/vino-background.h:
	* server/vino-prefs.c: (vino_prefs_disable_background_changed),
	(vino_prefs_create_server), (vino_prefs_init):
	* server/vino-server.c: (vino_server_set_disable_background),
	(vino_server_get_disable_background),
	(vino_server_client_accepted), (vino_server_client_disconnected),
	(vino_server_set_property), (vino_server_get_property),
	(vino_server_class_init):
	* server/vino-server.h:
	* server/vino-server.schemas.in:
	New feature to disable wallpaper when connected to vino.
	Close #515072.


Added:
   trunk/server/vino-background.c
   trunk/server/vino-background.h
Modified:
   trunk/ChangeLog
   trunk/capplet/vino-preferences.c
   trunk/capplet/vino-preferences.glade
   trunk/server/Makefile.am
   trunk/server/vino-prefs.c
   trunk/server/vino-server.c
   trunk/server/vino-server.h
   trunk/server/vino-server.schemas.in

Modified: trunk/capplet/vino-preferences.c
==============================================================================
--- trunk/capplet/vino-preferences.c	(original)
+++ trunk/capplet/vino-preferences.c	Sat Jul 26 02:11:08 2008
@@ -54,8 +54,9 @@
 #define VINO_PREFS_USE_ALTERNATIVE_PORT   VINO_PREFS_DIR "/use_alternative_port"
 #define VINO_PREFS_ALTERNATIVE_PORT       VINO_PREFS_DIR "/alternative_port"
 #define VINO_PREFS_LOCK_SCREEN            VINO_PREFS_DIR "/lock_screen_on_disconnect"
+#define VINO_PREFS_DISABLE_BACKGROUND     VINO_PREFS_DIR "/disable_background"
 
-#define N_LISTENERS 12
+#define N_LISTENERS 13
 
 #define VINO_DBUS_BUS_NAME  "org.gnome.Vino"
 #define VINO_DBUS_INTERFACE "org.gnome.VinoScreen"
@@ -83,6 +84,7 @@
   GtkWidget   *use_alternative_port_toggle;
   GtkWidget   *alternative_port_entry;
   GtkWidget   *lock_screen_toggle;
+  GtkWidget   *disable_background_toggle;
   GtkTooltips *tips;
 
   guint        listeners [N_LISTENERS];
@@ -176,6 +178,7 @@
   gtk_widget_set_sensitive (dialog->alternative_port_entry,      allowed &&
 			    gconf_client_get_bool (dialog->client, VINO_PREFS_USE_ALTERNATIVE_PORT, NULL));
   gtk_widget_set_sensitive (dialog->lock_screen_toggle,          allowed);
+  gtk_widget_set_sensitive (dialog->disable_background_toggle,   allowed);
 }
 
 static void
@@ -1003,6 +1006,67 @@
 }
 
 static void
+vino_preferences_dialog_disable_background_toggled (GtkToggleButton       *toggle,
+                                                    VinoPreferencesDialog *dialog)
+{
+  gboolean disable_background;
+
+  disable_background = gtk_toggle_button_get_active (toggle);
+
+  gconf_client_set_bool (dialog->client, VINO_PREFS_DISABLE_BACKGROUND, disable_background, NULL);
+}
+
+static void
+vino_preferences_dialog_disable_background_notify (GConfClient           *client,
+                                                   guint                  cnx_id,
+                                                   GConfEntry            *entry,
+                                                   VinoPreferencesDialog *dialog)
+{
+  gboolean disable_background;
+
+  if (!entry->value || entry->value->type != GCONF_VALUE_BOOL)
+    return;
+
+  disable_background = gconf_value_get_bool (entry->value) != FALSE;
+
+  if (disable_background != gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->disable_background_toggle)))
+    {
+      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->disable_background_toggle), disable_background);
+    }
+}
+
+static gboolean
+vino_preferences_dialog_setup_disable_background_toggle (VinoPreferencesDialog *dialog)
+{
+  gboolean disable_background;
+
+  dialog->disable_background_toggle = glade_xml_get_widget (dialog->xml, "disable_background_toggle");
+  g_assert (dialog->disable_background_toggle != NULL);
+
+  disable_background = gconf_client_get_bool (dialog->client, VINO_PREFS_DISABLE_BACKGROUND, NULL);
+
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->disable_background_toggle), disable_background);
+
+  g_signal_connect (dialog->disable_background_toggle, "toggled",
+		    G_CALLBACK (vino_preferences_dialog_disable_background_toggled), dialog);
+
+  if (!gconf_client_key_is_writable (dialog->client, VINO_PREFS_DISABLE_BACKGROUND, NULL))
+    {
+      gtk_widget_set_sensitive (dialog->disable_background_toggle, FALSE);
+      gtk_widget_show (dialog->writability_warning);
+    }
+
+  dialog->listeners [dialog->n_listeners] = 
+    gconf_client_notify_add (dialog->client,
+			     VINO_PREFS_DISABLE_BACKGROUND,
+			     (GConfClientNotifyFunc) vino_preferences_dialog_disable_background_notify,
+			     dialog, NULL, NULL);
+  dialog->n_listeners++;
+
+  return disable_background;
+}
+
+static void
 vino_preferences_server_updated (DBusGProxy *proxy,
                                  const char *name,
                                  const char *prev_owner,
@@ -1436,6 +1500,7 @@
   vino_preferences_dialog_setup_alternative_port_entry      (dialog);
   vino_preferences_dialog_setup_use_alternative_port_toggle (dialog);
   vino_preferences_dialog_setup_lock_screen_toggle          (dialog);
+  vino_preferences_dialog_setup_disable_background_toggle   (dialog);
 
   g_assert (dialog->n_listeners == dialog->expected_listeners);
 

Modified: trunk/capplet/vino-preferences.glade
==============================================================================
--- trunk/capplet/vino-preferences.glade	(original)
+++ trunk/capplet/vino-preferences.glade	Sat Jul 26 02:11:08 2008
@@ -392,7 +392,6 @@
                           <widget class="GtkImage" id="network_icon">
                             <property name="visible">True</property>
                             <property name="yalign">0</property>
-                            <property name="stock">gtk-missing-image</property>
                             <property name="icon_size">6</property>
                             <property name="icon_name">network-workgroup</property>
                           </widget>
@@ -460,6 +459,20 @@
                                 <property name="position">1</property>
                               </packing>
                             </child>
+                            <child>
+                              <widget class="GtkCheckButton" id="disable_background_toggle">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="tooltip" translatable="yes">Disable the wallpaper when successfull connection</property>
+                                <property name="label" translatable="yes">Disable the _wallpaper when connected</property>
+                                <property name="use_underline">True</property>
+                                <property name="response_id">0</property>
+                                <property name="draw_indicator">True</property>
+                              </widget>
+                              <packing>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
                           </widget>
                           <packing>
                             <property name="expand">False</property>
@@ -500,7 +513,6 @@
                           <widget class="GtkImage" id="network_icon2">
                             <property name="visible">True</property>
                             <property name="yalign">0</property>
-                            <property name="stock">gtk-missing-image</property>
                             <property name="icon_size">6</property>
                             <property name="icon_name">system-lock-screen</property>
                           </widget>
@@ -570,7 +582,7 @@
                     <property name="visible">True</property>
                     <property name="spacing">6</property>
                     <child>
-                      <widget class="GtkLabel" id="label1">
+                      <widget class="GtkLabel" id="label2">
                         <property name="visible">True</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="xalign">0</property>
@@ -587,7 +599,6 @@
                           <widget class="GtkImage" id="notification_icon">
                             <property name="visible">True</property>
                             <property name="yalign">0</property>
-                            <property name="stock">gtk-missing-image</property>
                             <property name="icon_size">6</property>
                             <property name="icon_name">gnome-panel-notification-area</property>
                           </widget>
@@ -667,7 +678,7 @@
               </packing>
             </child>
             <child>
-              <widget class="GtkLabel" id="label2">
+              <widget class="GtkLabel" id="label3">
                 <property name="visible">True</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                 <property name="label" translatable="yes">Advanced</property>

Modified: trunk/server/Makefile.am
==============================================================================
--- trunk/server/Makefile.am	(original)
+++ trunk/server/Makefile.am	Sat Jul 26 02:11:08 2008
@@ -67,6 +67,8 @@
 	vino-status-icon.h \
 	vino-dbus-listener.c \
 	vino-dbus-listener.h \
+	vino-background.c \
+	vino-background.h \
 	$(VINO_HTTP_SRC) \
 	$(CORBA_SRCLIST) \
 	$(NULL)

Added: trunk/server/vino-background.c
==============================================================================
--- (empty file)
+++ trunk/server/vino-background.c	Sat Jul 26 02:11:08 2008
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2008 Jorge Pereira <jorge jorgepereira com br>
+ *
+ * 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:
+ *      Jorge Pereira <jorge jorgepereira com br>
+ */
+
+#include <gconf/gconf-client.h>
+#include "vino-background.h"
+
+#define VINO_PREFS_DISABLE_BACKGROUND   "/desktop/gnome/remote_access/disable_background"
+#define GNOME_BACKGROUND_DRAW           "/desktop/gnome/background/draw_background"
+
+void 
+vino_background_handler (int sig)
+{
+  GConfClient *client = gconf_client_get_default ();
+  
+  if (gconf_client_get_bool (client, VINO_PREFS_DISABLE_BACKGROUND, NULL) &&
+      !gconf_client_get_bool (client, GNOME_BACKGROUND_DRAW, NULL))
+    gconf_client_set_bool (client, GNOME_BACKGROUND_DRAW, TRUE, NULL);
+
+  g_object_unref (client);
+}
+
+void 
+vino_background_draw (gboolean option)
+{
+  GConfClient *client = gconf_client_get_default ();
+
+  if (option && !gconf_client_get_bool (client, GNOME_BACKGROUND_DRAW, NULL))
+    gconf_client_set_bool (client, GNOME_BACKGROUND_DRAW, TRUE, NULL);
+  else if (!option && gconf_client_get_bool (client, GNOME_BACKGROUND_DRAW, NULL))
+         gconf_client_set_bool (client, GNOME_BACKGROUND_DRAW, FALSE, NULL);
+
+  g_object_unref (client);
+}
+

Added: trunk/server/vino-background.h
==============================================================================
--- (empty file)
+++ trunk/server/vino-background.h	Sat Jul 26 02:11:08 2008
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2008 Jorge Pereira <jorge jorgepereira com br>
+ *
+ * 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:
+ *      Jorge Pereira <jorge jorgepereira com br>
+ */
+
+#ifndef __VINO_BACKGROUND_H__
+#define __VINO_BACKGROUND_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+void vino_background_handler (int sig);
+void vino_background_draw (gboolean option);
+
+G_END_DECLS
+
+#endif /* __VINO_BACKGROUND_H__ */

Modified: trunk/server/vino-prefs.c
==============================================================================
--- trunk/server/vino-prefs.c	(original)
+++ trunk/server/vino-prefs.c	Sat Jul 26 02:11:08 2008
@@ -26,9 +26,11 @@
 
 #include <string.h>
 #include <gconf/gconf-client.h>
+#include <signal.h>
 #include "vino-util.h"
 #include "vino-mdns.h"
 #include "vino-status-icon.h"
+#include "vino-background.h"
 
 #define VINO_PREFS_DIR                    "/desktop/gnome/remote_access"
 #define VINO_PREFS_ENABLED                VINO_PREFS_DIR "/enabled"
@@ -42,8 +44,9 @@
 #define VINO_PREFS_VNC_PASSWORD           VINO_PREFS_DIR "/vnc_password"
 #define VINO_PREFS_LOCK_SCREEN            VINO_PREFS_DIR "/lock_screen_on_disconnect"
 #define VINO_PREFS_ICON_VISIBILITY        VINO_PREFS_DIR "/icon_visibility"
+#define VINO_PREFS_DISABLE_BACKGROUND     VINO_PREFS_DIR "/disable_background"
 
-#define VINO_N_LISTENERS 11
+#define VINO_N_LISTENERS 12
 
 static GConfClient *vino_client  = NULL;
 static GSList      *vino_servers = NULL;
@@ -59,6 +62,7 @@
 static gboolean        vino_use_alternative_port = FALSE;
 static int             vino_alternative_port     = VINO_SERVER_DEFAULT_PORT;
 static gboolean        vino_lock_screen          = FALSE;
+static gboolean        vino_disable_background   = FALSE;
 static VinoStatusIconVisibility vino_icon_visibility = VINO_STATUS_ICON_VISIBILITY_CLIENT;
 
 static void
@@ -392,6 +396,30 @@
     }
 }
 
+static void
+vino_prefs_disable_background_changed (GConfClient *client,
+                                       guint       cnxn_id,
+                                       GConfEntry  *entry)
+{
+  gboolean  disable_background;
+  GSList   *l;
+
+  if (!entry->value || entry->value->type != GCONF_VALUE_BOOL)
+    return;
+
+  disable_background = gconf_value_get_bool (entry->value) != FALSE;
+
+  if (vino_disable_background == disable_background)
+    return;
+
+  vino_disable_background = disable_background;
+
+  dprintf (PREFS, "Disable background changed: %s\n", vino_disable_background ? "(true)" : "(false)");
+
+  for (l = vino_servers; l; l = l->next)
+    vino_server_set_disable_background (l->data, disable_background);
+}
+
 void
 vino_prefs_create_server (GdkScreen *screen)
 {
@@ -410,7 +438,8 @@
 			 "vnc-password",         vino_vnc_password,
 			 "on-hold",              !vino_enabled,
 			 "screen",               screen,
-                         "lock-screen",          vino_lock_screen,
+             "lock-screen",          vino_lock_screen,
+             "disable-background",   vino_disable_background,
 			 NULL);
 
   vino_servers = g_slist_prepend (vino_servers, server);
@@ -427,6 +456,10 @@
   GSList *auth_methods_list, *l;
   int i = 0;
   char *key_str;
+  
+  signal (SIGQUIT, vino_background_handler); /* Ctrl+C */
+  signal (SIGTERM, vino_background_handler); /* kill -15 */
+  signal (SIGSEGV, vino_background_handler); /* Segmentation fault */
 
   vino_client = gconf_client_get_default ();
 
@@ -502,6 +535,11 @@
   dprintf (PREFS, "Lock screen on disconnect: %s\n",
            vino_lock_screen ? "(true)" : "(false)");
 
+  vino_disable_background = gconf_client_get_bool (vino_client,
+                                                   VINO_PREFS_DISABLE_BACKGROUND,
+                                                   NULL);
+  dprintf (PREFS, "Disable background: %s\n", vino_disable_background ? "(true)" : "(false)");
+
   key_str = gconf_client_get_string (vino_client,
                                      VINO_PREFS_ICON_VISIBILITY,
                                      NULL);
@@ -592,6 +630,14 @@
 
   i++;
 
+  vino_listeners [i] =
+    gconf_client_notify_add (vino_client,
+			     VINO_PREFS_DISABLE_BACKGROUND,
+			     (GConfClientNotifyFunc) vino_prefs_disable_background_changed,
+			     NULL, NULL, NULL);
+
+  i++;
+
   g_assert (i == VINO_N_LISTENERS);
 }
 
@@ -619,3 +665,4 @@
   g_object_unref (vino_client);
   vino_client = NULL;
 }
+

Modified: trunk/server/vino-server.c
==============================================================================
--- trunk/server/vino-server.c	(original)
+++ trunk/server/vino-server.c	Sat Jul 26 02:11:08 2008
@@ -36,6 +36,7 @@
 #include "vino-dbus-listener.h"
 #include "vino-util.h"
 #include "vino-enums.h"
+#include "vino-background.h"
 #include <sys/poll.h>
 #include <dbus/dbus-glib.h>
 #include <gtk/gtk.h>
@@ -82,6 +83,7 @@
   guint             last_auth_failed : 1;
   guint             use_alternative_port : 1;
   guint             lock_screen : 1;
+  guint             disable_background : 1;
 };
 
 struct _VinoClient
@@ -111,7 +113,8 @@
   PROP_AUTH_METHODS,
   PROP_VNC_PASSWORD,
   PROP_PORT,
-  PROP_LOCK_SCREEN
+  PROP_LOCK_SCREEN,
+  PROP_DISABLE_BACKGROUND
 };
 
 static enum rfbNewClientAction vino_server_auth_client (VinoServer *server,
@@ -166,20 +169,50 @@
 #undef GNOME_SCREENSAVER_PATH
 }
 
+void
+vino_server_set_disable_background (VinoServer *server,
+                                    gboolean disable_background)
+{
+  g_return_if_fail (VINO_IS_SERVER (server));
+
+  disable_background = disable_background != FALSE;
+
+  if (server->priv->disable_background != disable_background)
+    {
+      server->priv->disable_background = disable_background;
+
+      g_object_notify (G_OBJECT (server), "disable-background");
+    }
+}
+
+gboolean
+vino_server_get_disable_background (VinoServer *server)
+{
+  g_return_val_if_fail (VINO_IS_SERVER (server), FALSE);
+
+  return server->priv->disable_background;
+}
 
 static void
 vino_server_client_accepted (VinoServer *server,
                              VinoClient *client)
 {
   vino_status_icon_add_client (server->priv->icon, client);
+
+  if (vino_server_get_disable_background (server))
+     vino_background_draw (FALSE);
 }
 
+
 static void
 vino_server_client_disconnected (VinoServer *server,
                                  VinoClient *client)
 {
   if (vino_status_icon_remove_client (server->priv->icon, client))
     vino_server_lock_screen (server);
+
+  if (vino_server_get_disable_background (server))
+    vino_background_draw (TRUE);
 }
 
 static void
@@ -1016,6 +1049,9 @@
     case PROP_LOCK_SCREEN:
       vino_server_set_lock_screen (server, g_value_get_boolean (value));
       break;
+    case PROP_DISABLE_BACKGROUND:
+      vino_server_set_disable_background (server, g_value_get_boolean (value));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -1068,6 +1104,9 @@
     case PROP_LOCK_SCREEN:
       g_value_set_boolean (value, server->priv->lock_screen);
       break;
+    case PROP_DISABLE_BACKGROUND:
+      g_value_set_boolean (value, server->priv->disable_background);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -1240,6 +1279,18 @@
                                                          G_PARAM_STATIC_NICK |
                                                          G_PARAM_STATIC_BLURB));
 
+  g_object_class_install_property (gobject_class,
+				   PROP_DISABLE_BACKGROUND,
+				   g_param_spec_boolean ("disable-background",
+							 "Background on server",
+							 "Disable the background image on server",
+							 FALSE,
+                                                         G_PARAM_READWRITE   |
+                                                         G_PARAM_CONSTRUCT   |
+                                                         G_PARAM_STATIC_NAME |
+                                                         G_PARAM_STATIC_NICK |
+                                                         G_PARAM_STATIC_BLURB));
+
 }
 
 GType
@@ -1621,6 +1672,7 @@
     }
 }
 
+
 VinoStatusIcon *
 vino_server_get_status_icon (VinoServer *server)
 {
@@ -1628,3 +1680,4 @@
 
   return server->priv->icon;
 }
+

Modified: trunk/server/vino-server.h
==============================================================================
--- trunk/server/vino-server.h	(original)
+++ trunk/server/vino-server.h	Sat Jul 26 02:11:08 2008
@@ -101,6 +101,10 @@
 							   gboolean        lock_screen);
 gboolean             vino_server_get_lock_screen          (VinoServer     *server);
 
+void                 vino_server_set_disable_background   (VinoServer     *server,
+                                                           gboolean        disable_background);
+gboolean             vino_server_get_disable_background   (VinoServer     *server);
+
 #include "vino-status-icon.h"
 VinoStatusIcon      *vino_server_get_status_icon          (VinoServer     *server);
 

Modified: trunk/server/vino-server.schemas.in
==============================================================================
--- trunk/server/vino-server.schemas.in	(original)
+++ trunk/server/vino-server.schemas.in	Sat Jul 26 02:11:08 2008
@@ -201,5 +201,19 @@
       </locale>
     </schema>
 
+    <schema>
+      <key>/schemas/desktop/gnome/remote_access/disable_background</key>
+      <applyto>/desktop/gnome/remote_access/disable_background</applyto>
+      <owner>gnome</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+         <short>When true, disable the background on receive valid session</short>
+         <long>
+           When true, disable the background on receive valid session
+         </long>
+      </locale>
+    </schema>
+
   </schemalist>  
 </gconfschemafile>



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