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.
This commit is contained in:
Michael Natterer 2014-05-19 14:37:32 +02:00
parent 35f8355af4
commit bbf01ebabf
11 changed files with 32 additions and 11 deletions

View file

@ -86,7 +86,7 @@ resolution_calibrate_dialog (GtkWidget *resolution_entry,
screen = gtk_widget_get_screen (dialog); screen = gtk_widget_get_screen (dialog);
monitor = gdk_screen_get_monitor_at_window (screen, monitor = gdk_screen_get_monitor_at_window (screen,
gtk_widget_get_window (resolution_entry)); 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_width = rect.width - 300 - (rect.width % 100);
ruler_height = rect.height - 300 - (rect.height % 100); ruler_height = rect.height - 300 - (rect.height % 100);

View file

@ -1090,7 +1090,7 @@ gimp_image_window_new (Gimp *gimp,
GdkRectangle rect; GdkRectangle rect;
gchar geom[32]; gchar geom[32];
gdk_screen_get_monitor_geometry (screen, monitor, &rect); gdk_screen_get_monitor_workarea (screen, monitor, &rect);
/* FIXME: image window placement /* FIXME: image window placement
* *
@ -1415,7 +1415,7 @@ gimp_image_window_shrink_wrap (GimpImageWindow *window,
monitor = gdk_screen_get_monitor_at_window (screen, monitor = gdk_screen_get_monitor_at_window (screen,
gtk_widget_get_window (widget)); 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)); width = SCALEX (active_shell, gimp_image_get_width (image));
height = SCALEY (active_shell, gimp_image_get_height (image)); height = SCALEY (active_shell, gimp_image_get_height (image));

View file

@ -23,6 +23,8 @@
#include <gegl.h> #include <gegl.h>
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include "libgimpwidgets/gimpwidgets.h"
#include "gui-types.h" #include "gui-types.h"
#include "core/gimp.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)); screen = gtk_widget_get_screen (GTK_WIDGET (dock_columns));
monitor = gimp_widget_get_monitor (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 /* Remember the size so we can set the new dock window to the same
* size * size

View file

@ -457,7 +457,7 @@ gimp_container_popup_show (GimpContainerPopup *popup,
screen = gtk_widget_get_screen (widget); screen = gtk_widget_get_screen (widget);
monitor = gdk_screen_get_monitor_at_point (screen, orig_x, orig_y); 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) if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
{ {

View file

@ -26,6 +26,7 @@
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include "libgimpconfig/gimpconfig.h" #include "libgimpconfig/gimpconfig.h"
#include "libgimpwidgets/gimpwidgets.h"
#include "widgets-types.h" #include "widgets-types.h"
@ -625,6 +626,7 @@ gimp_session_info_apply_geometry (GimpSessionInfo *info,
gboolean apply_stored_monitor) gboolean apply_stored_monitor)
{ {
GdkRectangle rect; GdkRectangle rect;
GdkRectangle work_rect;
gchar geom[32]; gchar geom[32];
gint monitor; gint monitor;
gint width; 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_geometry (screen, monitor, &rect);
gdk_screen_get_monitor_workarea (screen, monitor, &work_rect);
info->p->x += rect.x; info->p->x += rect.x;
info->p->y += rect.y; info->p->y += rect.y;
@ -675,8 +678,12 @@ gimp_session_info_apply_geometry (GimpSessionInfo *info,
height = requisition.height; height = requisition.height;
} }
info->p->x = CLAMP (info->p->x, rect.x, rect.x + rect.width - width); info->p->x = CLAMP (info->p->x,
info->p->y = CLAMP (info->p->y, rect.y, rect.y + rect.height - height); 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) if (info->p->right_align && info->p->bottom_align)
{ {

View file

@ -813,7 +813,7 @@ gimp_ui_manager_menu_position (GtkMenu *menu,
&screen, &pointer_x, &pointer_y, NULL); &screen, &pointer_x, &pointer_y, NULL);
monitor = gdk_screen_get_monitor_at_point (screen, pointer_x, pointer_y); 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); gtk_menu_set_screen (menu, screen);

View file

@ -229,7 +229,7 @@ gimp_view_popup_timeout (GimpViewPopup *popup)
y = popup->button_y - (popup->popup_height / 2); y = popup->button_y - (popup->popup_height / 2);
monitor = gdk_screen_get_monitor_at_point (screen, x, y); 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); x = CLAMP (x, rect.x, rect.x + rect.width - popup->popup_width);
y = CLAMP (y, rect.y, rect.y + rect.height - popup->popup_height); y = CLAMP (y, rect.y, rect.y + rect.height - popup->popup_height);

View file

@ -91,7 +91,7 @@ gimp_menu_position (GtkMenu *menu,
screen = gtk_widget_get_screen (widget); screen = gtk_widget_get_screen (widget);
monitor = gdk_screen_get_monitor_at_point (screen, *x, *y); 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); gtk_menu_set_screen (menu, screen);
@ -177,7 +177,7 @@ gimp_button_menu_position (GtkWidget *button,
screen = gtk_widget_get_screen (button); screen = gtk_widget_get_screen (button);
monitor = gdk_screen_get_monitor_at_point (screen, *x, *y); 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); gtk_menu_set_screen (menu, screen);

View file

@ -206,3 +206,11 @@ gdk_cairo_get_clip_rectangle (cairo_t *cr,
return clip_exists; 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);
}

View file

@ -69,6 +69,9 @@ GdkModifierType gtk_widget_get_modifier_mask (GtkWidget *widget,
gboolean gdk_cairo_get_clip_rectangle (cairo_t *cr, gboolean gdk_cairo_get_clip_rectangle (cairo_t *cr,
GdkRectangle *rect); GdkRectangle *rect);
void gdk_screen_get_monitor_workarea (GdkScreen *screen,
gint monitor_num,
GdkRectangle *dest);
#endif /* __GIMP_3_MIGRATION_H__ */ #endif /* __GIMP_3_MIGRATION_H__ */

View file

@ -2,6 +2,7 @@ EXPORTS
gdk_cairo_get_clip_rectangle gdk_cairo_get_clip_rectangle
gdk_event_triggers_context_menu gdk_event_triggers_context_menu
gdk_keymap_get_modifier_mask gdk_keymap_get_modifier_mask
gdk_screen_get_monitor_workarea
gimp_aspect_type_get_type gimp_aspect_type_get_type
gimp_browser_add_search_types gimp_browser_add_search_types
gimp_browser_get_type gimp_browser_get_type