diff options
author | Erwann Chenede - <erwann.chenede@sun.com> | 2002-05-01 17:22:54 +0000 |
---|---|---|
committer | Erwann Chenede <erwannc@src.gnome.org> | 2002-05-01 17:22:54 +0000 |
commit | 2325caf979da21cb7be31f9382722e3d35d0e499 (patch) | |
tree | d42d47d4e91e3a6ebd37cdb1e30c3ad570bdb527 /gdk/gdkscreen.c | |
parent | ec72bb76d47157ebf6331fce20e11b6e487e27c5 (diff) | |
download | gtk+-2325caf979da21cb7be31f9382722e3d35d0e499.tar.gz |
remove virtualization and made it cross platform. fix #79961 fixed
2002-05-01 Erwann Chenede - <erwann.chenede@sun.com>
* gdk/gdkscreen.[hc] (gdk_screen_x11_get_monitor_at_window):
remove virtualization and made it cross platform. fix #79961
* gdk/x11/gdkdisplay-x11.c (check_solaris_xinerama):
fixed initialization bugs.
* gdk/x11/gdkscreen-x11.[hc] (gdk_screen_get_monitor_geometry):
* tests/testxinerama.c:
* gtk/gtkwindow.c (gtk_window_compute_configure_request):
* gtk/gtkmenu.c (gtk_menu_position):
take a GdkRectangle argument instead of returning
a GdkRectangle * and propagated the changes. fix #79974
Diffstat (limited to 'gdk/gdkscreen.c')
-rw-r--r-- | gdk/gdkscreen.c | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/gdk/gdkscreen.c b/gdk/gdkscreen.c index f1097fd169..ccd55e351b 100644 --- a/gdk/gdkscreen.c +++ b/gdk/gdkscreen.c @@ -275,24 +275,24 @@ gdk_screen_get_n_monitors (GdkScreen *screen) * gdk_screen_get_monitor_geometry: * @screen : a #GdkScreen. * @monitor_num: the monitor number. + * @dest : a #GdkRectangle to be filled with the monitor geometry * - * Returns a #GdkRectangle representing the size and start + * Retrieves the #GdkRectangle representing the size and start * coordinates of the individual monitor within the the entire virtual * screen. * * Note that the virtual screen coordinates can be retrieved via * gdk_screen_get_width() and gdk_screen_get_height(). * - * Returns: the size and start position of the monitor wrt to - * the virtual screen. **/ -GdkRectangle * -gdk_screen_get_monitor_geometry (GdkScreen *screen, - gint monitor_num) +void +gdk_screen_get_monitor_geometry (GdkScreen *screen, + gint monitor_num, + GdkRectangle *dest) { - g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL); + g_return_if_fail (GDK_IS_SCREEN (screen)); - return GDK_SCREEN_GET_CLASS (screen)->get_monitor_geometry (screen, monitor_num); + GDK_SCREEN_GET_CLASS (screen)->get_monitor_geometry (screen, monitor_num, dest); } /** @@ -328,9 +328,29 @@ gdk_screen_get_monitor_at_point (GdkScreen *screen, **/ gint gdk_screen_get_monitor_at_window (GdkScreen *screen, - GdkNativeWindow anid) + GdkWindow *window) { + gint num_monitors, i, sum = 0, screen_num = 0; + GdkRectangle win_rect; g_return_val_if_fail (GDK_IS_SCREEN (screen), -1); - return GDK_SCREEN_GET_CLASS (screen)->get_monitor_at_window (screen, anid); + gdk_window_get_geometry (window, &win_rect.x, &win_rect.y, &win_rect.width, + &win_rect.height, NULL); + gdk_window_get_origin (window, &win_rect.x, &win_rect.y); + num_monitors = gdk_screen_get_n_monitors (screen); + + for (i=0;i<num_monitors;i++) + { + GdkRectangle tmp_monitor, intersect; + + gdk_screen_get_monitor_geometry (screen, i, &tmp_monitor); + gdk_rectangle_intersect (&win_rect, &tmp_monitor, &intersect); + + if (intersect.width * intersect.height > sum) + { + sum = intersect.width * intersect.height; + screen_num = i; + } + } + return screen_num; } |