[gimp] libgimpwidgets, app: add gdk_screen_get_monitor_workarea()



commit bbf01ebabffdca5eeee3d0264ddd0d1af159f696
Author: Michael Natterer <mitch gimp org>
Date:   Mon May 19 14:37:32 2014 +0200

    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 5efeb14..cab655c 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 184b810..98d46d7 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 bf5c7eb..0f65d26 100644
--- a/app/gui/gimpuiconfigurer.c
+++ b/app/gui/gimpuiconfigurer.c
@@ -23,6 +23,8 @@
 #include <gegl.h>
 #include <gtk/gtk.h>
 
+#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 533124f..876e4ca 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 ef31e38..6f3642f 100644
--- a/app/widgets/gimpsessioninfo.c
+++ b/app/widgets/gimpsessioninfo.c
@@ -26,6 +26,7 @@
 #include <gtk/gtk.h>
 
 #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 c79889c..381ab07 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 9489a2f..e094cfc 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 d047042..543ada2 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 44eca9a..7a071a0 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 daf338c..41a1c7b 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 1d91bad..a433946 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


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