From bbf01ebabffdca5eeee3d0264ddd0d1af159f696 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Mon, 19 May 2014 14:37:32 +0200 Subject: [PATCH] libgimpwidgets, app: add gdk_screen_get_monitor_workarea() to the gimp3migration hack and use it where appropriate, so in the gtk3-port branch windows will not overlap with docks, panels etc. --- app/dialogs/resolution-calibrate-dialog.c | 2 +- app/display/gimpimagewindow.c | 4 ++-- app/gui/gimpuiconfigurer.c | 4 +++- app/widgets/gimpcontainerpopup.c | 2 +- app/widgets/gimpsessioninfo.c | 11 +++++++++-- app/widgets/gimpuimanager.c | 2 +- app/widgets/gimpview-popup.c | 2 +- app/widgets/gimpwidgets-utils.c | 4 ++-- libgimpwidgets/gimp3migration.c | 8 ++++++++ libgimpwidgets/gimp3migration.h | 3 +++ libgimpwidgets/gimpwidgets.def | 1 + 11 files changed, 32 insertions(+), 11 deletions(-) diff --git a/app/dialogs/resolution-calibrate-dialog.c b/app/dialogs/resolution-calibrate-dialog.c index 5efeb147f8..cab655c70c 100644 --- a/app/dialogs/resolution-calibrate-dialog.c +++ b/app/dialogs/resolution-calibrate-dialog.c @@ -86,7 +86,7 @@ resolution_calibrate_dialog (GtkWidget *resolution_entry, screen = gtk_widget_get_screen (dialog); monitor = gdk_screen_get_monitor_at_window (screen, gtk_widget_get_window (resolution_entry)); - gdk_screen_get_monitor_geometry (screen, monitor, &rect); + gdk_screen_get_monitor_workarea (screen, monitor, &rect); ruler_width = rect.width - 300 - (rect.width % 100); ruler_height = rect.height - 300 - (rect.height % 100); diff --git a/app/display/gimpimagewindow.c b/app/display/gimpimagewindow.c index 184b810c1e..98d46d7f77 100644 --- a/app/display/gimpimagewindow.c +++ b/app/display/gimpimagewindow.c @@ -1090,7 +1090,7 @@ gimp_image_window_new (Gimp *gimp, GdkRectangle rect; gchar geom[32]; - gdk_screen_get_monitor_geometry (screen, monitor, &rect); + gdk_screen_get_monitor_workarea (screen, monitor, &rect); /* FIXME: image window placement * @@ -1415,7 +1415,7 @@ gimp_image_window_shrink_wrap (GimpImageWindow *window, monitor = gdk_screen_get_monitor_at_window (screen, gtk_widget_get_window (widget)); - gdk_screen_get_monitor_geometry (screen, monitor, &rect); + gdk_screen_get_monitor_workarea (screen, monitor, &rect); width = SCALEX (active_shell, gimp_image_get_width (image)); height = SCALEY (active_shell, gimp_image_get_height (image)); diff --git a/app/gui/gimpuiconfigurer.c b/app/gui/gimpuiconfigurer.c index bf5c7ebb3b..0f65d268d9 100644 --- a/app/gui/gimpuiconfigurer.c +++ b/app/gui/gimpuiconfigurer.c @@ -23,6 +23,8 @@ #include #include +#include "libgimpwidgets/gimpwidgets.h" + #include "gui-types.h" #include "core/gimp.h" @@ -348,7 +350,7 @@ gimp_ui_configurer_move_docks_to_window (GimpUIConfigurer *ui_configurer, screen = gtk_widget_get_screen (GTK_WIDGET (dock_columns)); monitor = gimp_widget_get_monitor (GTK_WIDGET (dock_columns)); - gdk_screen_get_monitor_geometry (screen, monitor, &monitor_rect); + gdk_screen_get_monitor_workarea (screen, monitor, &monitor_rect); /* Remember the size so we can set the new dock window to the same * size diff --git a/app/widgets/gimpcontainerpopup.c b/app/widgets/gimpcontainerpopup.c index 533124f017..876e4ca608 100644 --- a/app/widgets/gimpcontainerpopup.c +++ b/app/widgets/gimpcontainerpopup.c @@ -457,7 +457,7 @@ gimp_container_popup_show (GimpContainerPopup *popup, screen = gtk_widget_get_screen (widget); monitor = gdk_screen_get_monitor_at_point (screen, orig_x, orig_y); - gdk_screen_get_monitor_geometry (screen, monitor, &rect); + gdk_screen_get_monitor_workarea (screen, monitor, &rect); if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) { diff --git a/app/widgets/gimpsessioninfo.c b/app/widgets/gimpsessioninfo.c index ef31e38ddd..6f3642f838 100644 --- a/app/widgets/gimpsessioninfo.c +++ b/app/widgets/gimpsessioninfo.c @@ -26,6 +26,7 @@ #include #include "libgimpconfig/gimpconfig.h" +#include "libgimpwidgets/gimpwidgets.h" #include "widgets-types.h" @@ -625,6 +626,7 @@ gimp_session_info_apply_geometry (GimpSessionInfo *info, gboolean apply_stored_monitor) { GdkRectangle rect; + GdkRectangle work_rect; gchar geom[32]; gint monitor; gint width; @@ -654,6 +656,7 @@ gimp_session_info_apply_geometry (GimpSessionInfo *info, } gdk_screen_get_monitor_geometry (screen, monitor, &rect); + gdk_screen_get_monitor_workarea (screen, monitor, &work_rect); info->p->x += rect.x; info->p->y += rect.y; @@ -675,8 +678,12 @@ gimp_session_info_apply_geometry (GimpSessionInfo *info, height = requisition.height; } - info->p->x = CLAMP (info->p->x, rect.x, rect.x + rect.width - width); - info->p->y = CLAMP (info->p->y, rect.y, rect.y + rect.height - height); + info->p->x = CLAMP (info->p->x, + work_rect.x, + work_rect.x + work_rect.width - width); + info->p->y = CLAMP (info->p->y, + work_rect.y, + work_rect.y + work_rect.height - height); if (info->p->right_align && info->p->bottom_align) { diff --git a/app/widgets/gimpuimanager.c b/app/widgets/gimpuimanager.c index c79889cc4a..381ab079eb 100644 --- a/app/widgets/gimpuimanager.c +++ b/app/widgets/gimpuimanager.c @@ -813,7 +813,7 @@ gimp_ui_manager_menu_position (GtkMenu *menu, &screen, &pointer_x, &pointer_y, NULL); monitor = gdk_screen_get_monitor_at_point (screen, pointer_x, pointer_y); - gdk_screen_get_monitor_geometry (screen, monitor, &rect); + gdk_screen_get_monitor_workarea (screen, monitor, &rect); gtk_menu_set_screen (menu, screen); diff --git a/app/widgets/gimpview-popup.c b/app/widgets/gimpview-popup.c index 9489a2f633..e094cfc5ac 100644 --- a/app/widgets/gimpview-popup.c +++ b/app/widgets/gimpview-popup.c @@ -229,7 +229,7 @@ gimp_view_popup_timeout (GimpViewPopup *popup) y = popup->button_y - (popup->popup_height / 2); monitor = gdk_screen_get_monitor_at_point (screen, x, y); - gdk_screen_get_monitor_geometry (screen, monitor, &rect); + gdk_screen_get_monitor_workarea (screen, monitor, &rect); x = CLAMP (x, rect.x, rect.x + rect.width - popup->popup_width); y = CLAMP (y, rect.y, rect.y + rect.height - popup->popup_height); diff --git a/app/widgets/gimpwidgets-utils.c b/app/widgets/gimpwidgets-utils.c index d047042506..543ada252f 100644 --- a/app/widgets/gimpwidgets-utils.c +++ b/app/widgets/gimpwidgets-utils.c @@ -91,7 +91,7 @@ gimp_menu_position (GtkMenu *menu, screen = gtk_widget_get_screen (widget); monitor = gdk_screen_get_monitor_at_point (screen, *x, *y); - gdk_screen_get_monitor_geometry (screen, monitor, &rect); + gdk_screen_get_monitor_workarea (screen, monitor, &rect); gtk_menu_set_screen (menu, screen); @@ -177,7 +177,7 @@ gimp_button_menu_position (GtkWidget *button, screen = gtk_widget_get_screen (button); monitor = gdk_screen_get_monitor_at_point (screen, *x, *y); - gdk_screen_get_monitor_geometry (screen, monitor, &rect); + gdk_screen_get_monitor_workarea (screen, monitor, &rect); gtk_menu_set_screen (menu, screen); diff --git a/libgimpwidgets/gimp3migration.c b/libgimpwidgets/gimp3migration.c index 44eca9ae57..7a071a0453 100644 --- a/libgimpwidgets/gimp3migration.c +++ b/libgimpwidgets/gimp3migration.c @@ -206,3 +206,11 @@ gdk_cairo_get_clip_rectangle (cairo_t *cr, return clip_exists; } + +void +gdk_screen_get_monitor_workarea (GdkScreen *screen, + gint monitor_num, + GdkRectangle *dest) +{ + gdk_screen_get_monitor_geometry (screen, monitor_num, dest); +} diff --git a/libgimpwidgets/gimp3migration.h b/libgimpwidgets/gimp3migration.h index daf338c1f9..41a1c7bf62 100644 --- a/libgimpwidgets/gimp3migration.h +++ b/libgimpwidgets/gimp3migration.h @@ -69,6 +69,9 @@ GdkModifierType gtk_widget_get_modifier_mask (GtkWidget *widget, gboolean gdk_cairo_get_clip_rectangle (cairo_t *cr, GdkRectangle *rect); +void gdk_screen_get_monitor_workarea (GdkScreen *screen, + gint monitor_num, + GdkRectangle *dest); #endif /* __GIMP_3_MIGRATION_H__ */ diff --git a/libgimpwidgets/gimpwidgets.def b/libgimpwidgets/gimpwidgets.def index 1d91bad713..a43394696c 100644 --- a/libgimpwidgets/gimpwidgets.def +++ b/libgimpwidgets/gimpwidgets.def @@ -2,6 +2,7 @@ EXPORTS gdk_cairo_get_clip_rectangle gdk_event_triggers_context_menu gdk_keymap_get_modifier_mask + gdk_screen_get_monitor_workarea gimp_aspect_type_get_type gimp_browser_add_search_types gimp_browser_get_type