[Xfce4-commits] [apps/xfdashboard] 01/02: Do not assume that each XfdashboardWindowTrackerMonitorX11 object instance created is valid and will represent the first monitor connected. Instead assume it is invalid with a negative monitor index and set up as soon as a valid monitor index was set.

noreply at xfce.org noreply at xfce.org
Wed May 3 09:24:25 CEST 2017


This is an automated email from the git hooks/post-receive script.

nomad pushed a commit to branch master
in repository apps/xfdashboard.

commit 9295801e08fb574d291c0dcd1e00e46910b5f305
Author: Stephan Haller <nomad at froevel.de>
Date:   Wed May 3 07:08:36 2017 +0200

    Do not assume that each XfdashboardWindowTrackerMonitorX11 object instance created is valid and will represent the first monitor connected. Instead assume it is invalid with a negative monitor index and set up as soon as a valid monitor index was set.
---
 libxfdashboard/x11/window-tracker-monitor-x11.c | 44 +++++++++++--------------
 1 file changed, 20 insertions(+), 24 deletions(-)

diff --git a/libxfdashboard/x11/window-tracker-monitor-x11.c b/libxfdashboard/x11/window-tracker-monitor-x11.c
index 66a08d0..b8fad07 100644
--- a/libxfdashboard/x11/window-tracker-monitor-x11.c
+++ b/libxfdashboard/x11/window-tracker-monitor-x11.c
@@ -91,6 +91,7 @@ static void _xfdashboard_window_tracker_monitor_x11_update_primary(XfdashboardWi
 #endif
 
 	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_MONITOR(self));
+	g_return_if_fail(self->priv->monitorIndex>=0);
 
 	priv=self->priv;
 
@@ -136,6 +137,7 @@ static void _xfdashboard_window_tracker_monitor_x11_update_geometry(XfdashboardW
 #endif
 
 	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_MONITOR_X11(self));
+	g_return_if_fail(self->priv->monitorIndex>=0);
 
 	priv=self->priv;
 
@@ -180,6 +182,20 @@ static void _xfdashboard_window_tracker_monitor_x11_update_geometry(XfdashboardW
 	}
 }
 
+/* Number of monitors, primary monitor or size of any monitor changed */
+static void _xfdashboard_window_tracker_monitor_x11_on_monitors_changed(XfdashboardWindowTrackerMonitorX11 *self,
+																		gpointer inUserData)
+{
+	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_MONITOR_X11(self));
+	g_return_if_fail(GDK_IS_SCREEN(inUserData));
+
+	/* Update primary monitor flag */
+	_xfdashboard_window_tracker_monitor_x11_update_primary(self);
+
+	/* Update geometry of monitor */
+	_xfdashboard_window_tracker_monitor_x11_update_geometry(self);
+}
+
 /* Set monitor index this object belongs to and to monitor */
 static void _xfdashboard_window_tracker_monitor_x11_set_index(XfdashboardWindowTrackerMonitorX11 *self,
 																gint inIndex)
@@ -215,6 +231,9 @@ static void _xfdashboard_window_tracker_monitor_x11_set_index(XfdashboardWindowT
 		/* Update geometry of monitor */
 		_xfdashboard_window_tracker_monitor_x11_update_geometry(self);
 
+		/* Connect signals now we have a valid monitor index set */
+		g_signal_connect_swapped(priv->screen, "monitors-changed", G_CALLBACK(_xfdashboard_window_tracker_monitor_x11_on_monitors_changed), self);
+
 		/* Notify about property change */
 		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardWindowTrackerMonitorX11Properties[PROP_MONITOR_INDEX]);
 	}
@@ -223,20 +242,6 @@ static void _xfdashboard_window_tracker_monitor_x11_set_index(XfdashboardWindowT
 	g_object_thaw_notify(G_OBJECT(self));
 }
 
-/* Number of monitors, primary monitor or size of any monitor changed */
-static void _xfdashboard_window_tracker_monitor_x11_on_monitors_changed(XfdashboardWindowTrackerMonitorX11 *self,
-																			gpointer inUserData)
-{
-	g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_MONITOR_X11(self));
-	g_return_if_fail(GDK_IS_SCREEN(inUserData));
-
-	/* Update primary monitor flag */
-	_xfdashboard_window_tracker_monitor_x11_update_primary(self);
-
-	/* Update geometry of monitor */
-	_xfdashboard_window_tracker_monitor_x11_update_geometry(self);
-}
-
 
 /* IMPLEMENTATION: Interface XfdashboardWindowTrackerMonitor */
 
@@ -410,20 +415,11 @@ static void xfdashboard_window_tracker_monitor_x11_init(XfdashboardWindowTracker
 	priv=self->priv=XFDASHBOARD_WINDOW_TRACKER_MONITOR_X11_GET_PRIVATE(self);
 
 	/* Set default values */
-	priv->monitorIndex=0;
+	priv->monitorIndex=-1;
 	priv->isPrimary=FALSE;
 	priv->screen=gdk_screen_get_default();
 	priv->geometry.x=0;
 	priv->geometry.y=0;
 	priv->geometry.width=0;
 	priv->geometry.height=0;
-
-	/* Get initial primary monitor flag */
-	_xfdashboard_window_tracker_monitor_x11_update_primary(self);
-
-	/* Get initial geometry of monitor */
-	_xfdashboard_window_tracker_monitor_x11_update_geometry(self);
-
-	/* Connect signals */
-	g_signal_connect_swapped(priv->screen, "monitors-changed", G_CALLBACK(_xfdashboard_window_tracker_monitor_x11_on_monitors_changed), self);
 }

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list