Comment 0 for bug 266932

Revision history for this message
Cyphase (cyphase) wrote : Vino restores wallpaper when someone disconnects, even if someone else is still connected

Binary package hint: vino

Vino 2.23.91-0ubuntu1 on Intrepid

As far as I can tell, this isn't a programming error, it's a logic error. I have a separate computer running Intrepid, on which Vino is configured to disable the wallpaper if someone is connected. I VNC'ed into it, and the wallpaper was disabled. Then, to try out the latest Vinagre, I VNC'ed from the Intrepid system to the Intrepid system. At this point both my main system and the Intrepid system are VNC'ed into the Intrepid system. When I closed Vinagre on the Intrepid system, Vino restored the wallpaper. Obviously, this isn't the preferred behavior. It should keep it disabled as long as anyone is connected. I tried disabling the "Disable the wallpaper when connected" option, then re-enabling it, but the wallpaper still showed. When I disconnected then reconnected, it hid the wallpaper, and would not show it if I disabled the hide wallpaper option. Also, if I connect, which causes the wallpaper to be disabled, then disable the hide wallpaper option and disconnect, it doesn't re-enable the wallpaper. Here's how I think it should happen, starting with no one connected and wallpaper enabled (I don't know anything about the Vino code, so I'm just making up function/variable names):

<code>

vinoDisabledWallpaper = false # default value

def ConnectionEstablished(...):
 ...
 if GConf("/desktop/gnome/remote_access/disable_background") == true: # If Vino is set to disable the background
  if IsWallpaperAlreadyDisabled() == true: # If wallpaper is already disabled by the user
   return # Than it's already disabled
  else:
   DisableWallpaper()
   vinoDisabledWallpaper = true # So you know it was disabled by Vino, and not by the user.
         # You wouldn't want to enable the wallpaper if the user had manually disabled it.

def ConnectionTerminated(...):
 ...
 if IsAnyoneConnected() == false && isWallpaperDisabled = true: # If no one is still connected and
              # Vino disabled the wallpaper
  EnableWallpaper() # Even if (especially if) someone disabled the hide wallpaper option, it should enable the wallpaper

def EnableHideWallpaperOption(...): # Enabling the "Disable the wallpaper when connected" option
 ...
 if IsAnyoneConnected() == true: # If someone is connected
  if IsWallpaperAlreadyDisabled() == true: # If wallpaper is already disabled by the user
   return # Than it's already disabled
  else:
   DisableWallpaper()
   vinoDisabledWallpaper = true # So you know it was disabled by Vino, and not by the user.
         # You wouldn't want to enable the wallpaper if the user had manually disabled it.

def DisableHideWallpaperOption(...): # Disabling the "Disable the wallpaper when connected" option
 ...
 if vinoDisabledWallpaper == true:
  EnableWallpaper()
  vinoDisabledWallpaper = false

</code>