[gnome-panel] [panel] Keep in memory the configured monitor for a toplevel



commit 276ab7e4921af86bfeacdd956978ae9ca35bf5bf
Author: Vincent Untz <vuntz gnome org>
Date:   Fri Aug 14 18:01:06 2009 +0200

    [panel] Keep in memory the configured monitor for a toplevel
    
    We were forgetting the configured monitor, which meant that after a
    monitor disappears once, we cannot go back to what the user really
    configured once the monitor appears again.

 gnome-panel/panel-toplevel.c |   32 ++++++++++++++------------------
 1 files changed, 14 insertions(+), 18 deletions(-)
---
diff --git a/gnome-panel/panel-toplevel.c b/gnome-panel/panel-toplevel.c
index a223166..cb75e4d 100644
--- a/gnome-panel/panel-toplevel.c
+++ b/gnome-panel/panel-toplevel.c
@@ -91,7 +91,7 @@ struct _PanelToplevelPrivate {
 	/* this is used when the configured monitor is missing. We keep it so
 	 * we can move the toplevel to the right monitor when it becomes
 	 * available */
-	int                     missing_monitor;
+	int                     configured_monitor;
 
 	int                     hide_delay;
 	int                     unhide_delay;
@@ -4493,7 +4493,7 @@ panel_toplevel_init (PanelToplevel *toplevel)
 	toplevel->priv->x_right         = -1;
 	toplevel->priv->y_bottom        = -1;
 	toplevel->priv->monitor         = 0;
-	toplevel->priv->missing_monitor = -1;
+	toplevel->priv->configured_monitor = -1;
 	toplevel->priv->hide_delay      = DEFAULT_HIDE_DELAY;
 	toplevel->priv->unhide_delay    = DEFAULT_UNHIDE_DELAY;
 	toplevel->priv->auto_hide_size  = DEFAULT_AUTO_HIDE_SIZE;
@@ -5013,10 +5013,6 @@ panel_toplevel_set_monitor_internal (PanelToplevel *toplevel,
 				     int            monitor,
 				     gboolean       force_resize)
 {
-	/* if we finally use the missing monitor, then the world is at peace */
-	if (toplevel->priv->missing_monitor == monitor)
-		toplevel->priv->missing_monitor = -1;
-
 	if (toplevel->priv->monitor == monitor)
 		return;
 
@@ -5041,15 +5037,16 @@ panel_toplevel_update_monitor (PanelToplevel *toplevel)
 {
 	GdkScreen *screen;
 
-	if (toplevel->priv->missing_monitor == -1)
+	if (toplevel->priv->configured_monitor == -1 ||
+	    toplevel->priv->configured_monitor == toplevel->priv->monitor)
 		return;
 
 	screen = gtk_window_get_screen (GTK_WINDOW (toplevel));
-	if (toplevel->priv->missing_monitor >= panel_multiscreen_monitors (screen))
+	if (toplevel->priv->configured_monitor >= panel_multiscreen_monitors (screen))
 		return;
 
 	panel_toplevel_set_monitor_internal (toplevel,
-					     toplevel->priv->missing_monitor,
+					     toplevel->priv->configured_monitor,
 					     FALSE);
 }
 
@@ -5061,20 +5058,19 @@ panel_toplevel_set_monitor (PanelToplevel *toplevel,
 
 	g_return_if_fail (PANEL_IS_TOPLEVEL (toplevel));
 
-	if (toplevel->priv->monitor == monitor)
+	if (toplevel->priv->configured_monitor == monitor)
 		return;
 
-	/* Ignore non-existing monitors, and keep the old one. The main use
-	 * case is when logging in after having used a multiscreen environment.
+	toplevel->priv->configured_monitor = monitor;
+
+	/* Only use the configured monitor if it's existing. Else, we ignore
+	 * the non-existing monitor, and keep the old one. The main use case is
+	 * when logging in after having used a multiscreen environment.
 	 * We will put the panel on the monitor 0 for this session, and it will
 	 * move back to the right monitor next time. */
 	screen = gtk_window_get_screen (GTK_WINDOW (toplevel));
-	if (monitor >= panel_multiscreen_monitors (screen)) {
-		toplevel->priv->missing_monitor = monitor;
-		return;
-	}
-
-	panel_toplevel_set_monitor_internal (toplevel, monitor, TRUE);
+	if (monitor < panel_multiscreen_monitors (screen))
+		panel_toplevel_set_monitor_internal (toplevel, monitor, TRUE);
 
 	g_object_notify (G_OBJECT (toplevel), "monitor");
 }



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