[gtk+/gtk-2-18] Be a bit more forgiving about invalid monitor number



commit caded18ecfa66801769ceb472a494231ca47b300
Author: Matthias Clasen <mclasen redhat com>
Date:   Fri Nov 27 18:39:15 2009 -0500

    Be a bit more forgiving about invalid monitor number
    
    By moving the g_return_if_fail() checks into individual monitor functions.
    See bug 561130.

 gdk/x11/gdkscreen-x11.c |  102 ++++++++++++++++++++++++++---------------------
 1 files changed, 56 insertions(+), 46 deletions(-)
---
diff --git a/gdk/x11/gdkscreen-x11.c b/gdk/x11/gdkscreen-x11.c
index 1faa827..987bcfc 100644
--- a/gdk/x11/gdkscreen-x11.c
+++ b/gdk/x11/gdkscreen-x11.c
@@ -205,7 +205,7 @@ gdk_screen_get_height_mm (GdkScreen *screen)
 gint
 gdk_screen_get_number (GdkScreen *screen)
 {
-  g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);  
+  g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);
   
   return GDK_SCREEN_X11 (screen)->screen_num;
 }
@@ -338,42 +338,26 @@ gdk_screen_x11_finalize (GObject *object)
 
 /**
  * gdk_screen_get_n_monitors:
- * @screen: a #GdkScreen.
+ * @screen: a #GdkScreen
  *
  * Returns the number of monitors which @screen consists of.
  *
- * Returns: number of monitors which @screen consists of.
+ * Returns: number of monitors which @screen consists of
  *
  * Since: 2.2
- **/
-gint 
+ */
+gint
 gdk_screen_get_n_monitors (GdkScreen *screen)
 {
   g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);
-  
-  return GDK_SCREEN_X11 (screen)->n_monitors;
-}
-
-static GdkX11Monitor *
-get_monitor (GdkScreen *screen,
-	     int	monitor_num)
-{
-  GdkScreenX11 *screen_x11;
 
-  g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
-  
-  screen_x11 = GDK_SCREEN_X11 (screen);
-  
-  g_return_val_if_fail (monitor_num < screen_x11->n_monitors, NULL);
-  g_return_val_if_fail (monitor_num >= 0, NULL);
-  
-  return &(screen_x11->monitors[monitor_num]);
+  return GDK_SCREEN_X11 (screen)->n_monitors;
 }
 
 /**
  * gdk_screen_get_monitor_width_mm:
  * @screen: a #GdkScreen
- * @monitor_num: number of the monitor
+ * @monitor_num: number of the monitor, between 0 and gdk_screen_get_n_monitors (screen)
  *
  * Gets the width in millimeters of the specified monitor, if available.
  *
@@ -385,15 +369,21 @@ gint
 gdk_screen_get_monitor_width_mm	(GdkScreen *screen,
 				 gint       monitor_num)
 {
-  return get_monitor (screen, monitor_num)->width_mm;
+  GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);
+
+  g_return_val_if_fail (GDK_IS_SCREEN (screen), -1);
+  g_return_val_if_fail (monitor_num >= 0, -1);
+  g_return_val_if_fail (monitor_num < screen_x11->n_monitors, -1);
+
+  return screen_x11->monitors[monitor_num].width_mm;
 }
 
 /**
  * gdk_screen_get_monitor_height_mm:
  * @screen: a #GdkScreen
- * @monitor_num: number of the monitor
+ * @monitor_num: number of the monitor, between 0 and gdk_screen_get_n_monitors (screen)
  *
- * Gets the height in millimeters of the specified monitor. 
+ * Gets the height in millimeters of the specified monitor.
  *
  * Returns: the height of the monitor, or -1 if not available
  *
@@ -403,18 +393,24 @@ gint
 gdk_screen_get_monitor_height_mm (GdkScreen *screen,
                                   gint       monitor_num)
 {
-  return get_monitor (screen, monitor_num)->height_mm;
+  GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);
+
+  g_return_val_if_fail (GDK_IS_SCREEN (screen), -1);
+  g_return_val_if_fail (monitor_num >= 0, -1);
+  g_return_val_if_fail (monitor_num < screen_x11->n_monitors, -1);
+
+  return screen_x11->monitors[monitor_num].height_mm;
 }
 
 /**
  * gdk_screen_get_monitor_plug_name:
  * @screen: a #GdkScreen
- * @monitor_num: number of the monitor
+ * @monitor_num: number of the monitor, between 0 and gdk_screen_get_n_monitors (screen)
  *
- * Returns the output name of the specified monitor. 
+ * Returns the output name of the specified monitor.
  * Usually something like VGA, DVI, or TV, not the actual
  * product name of the display device.
- * 
+ *
  * Returns: a newly-allocated string containing the name of the monitor,
  *   or %NULL if the name cannot be determined
  *
@@ -424,16 +420,22 @@ gchar *
 gdk_screen_get_monitor_plug_name (GdkScreen *screen,
 				  gint       monitor_num)
 {
-  return g_strdup (get_monitor (screen, monitor_num)->output_name);
+  GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);
+
+  g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
+  g_return_val_if_fail (monitor_num >= 0, NULL);
+  g_return_val_if_fail (monitor_num < screen_x11->n_monitors, NULL);
+
+  return g_strdup (screen_x11->monitors[monitor_num].output_name);
 }
 
 /**
  * gdk_x11_screen_get_monitor_output:
  * @screen: a #GdkScreen
- * @monitor_num: number of the monitor 
+ * @monitor_num: number of the monitor, between 0 and gdk_screen_get_n_monitors (screen)
  *
  * Gets the XID of the specified output/monitor.
- * If the X server does not support version 1.2 of the RANDR 
+ * If the X server does not support version 1.2 of the RANDR
  * extension, 0 is returned.
  *
  * Returns: the XID of the monitor
@@ -444,34 +446,42 @@ XID
 gdk_x11_screen_get_monitor_output (GdkScreen *screen,
                                    gint       monitor_num)
 {
-  return get_monitor (screen, monitor_num)->output;
+  GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);
+
+  g_return_val_if_fail (GDK_IS_SCREEN (screen), None);
+  g_return_val_if_fail (monitor_num >= 0, None);
+  g_return_val_if_fail (monitor_num < screen_x11->n_monitors, None);
+
+  return screen_x11->monitors[monitor_num].output;
 }
 
 /**
  * gdk_screen_get_monitor_geometry:
- * @screen : a #GdkScreen.
- * @monitor_num: the monitor number. 
+ * @screen : a #GdkScreen
+ * @monitor_num: the monitor number, between 0 and gdk_screen_get_n_monitors (screen)
  * @dest : a #GdkRectangle to be filled with the monitor geometry
  *
- * Retrieves the #GdkRectangle representing the size and position of 
+ * Retrieves the #GdkRectangle representing the size and position of
  * the individual monitor within the entire screen area.
- * 
- * Note that the size of the entire screen area can be retrieved via 
+ *
+ * Note that the size of the entire screen area can be retrieved via
  * gdk_screen_get_width() and gdk_screen_get_height().
  *
  * Since: 2.2
- **/
-void 
+ */
+void
 gdk_screen_get_monitor_geometry (GdkScreen    *screen,
 				 gint          monitor_num,
 				 GdkRectangle *dest)
 {
-  if (dest) 
-    {
-      GdkX11Monitor *monitor = get_monitor (screen, monitor_num);
+  GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);
 
-      *dest = monitor->geometry;
-    }
+  g_return_if_fail (GDK_IS_SCREEN (screen));
+  g_return_if_fail (monitor_num >= 0);
+  g_return_if_fail (monitor_num < screen_x11->n_monitors);
+
+  if (dest)
+    *dest = screen_x11->monitors[monitor_num].geometry;
 }
 
 /**



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