summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Kareh <[email protected]>2018-03-29 16:09:16 -0400
committerlukefromdc <[email protected]>2018-04-04 21:53:21 -0400
commitef78aa3fe9043d256f269b4aa25234e42b9eecae (patch)
tree53c4185c0857e159d610c92eca71eee9698177c4
parentcfd502157420406aa56a6b5319f0bd8dc90df8e4 (diff)
downloadcaja-ef78aa3fe9043d256f269b4aa25234e42b9eecae.tar.bz2
caja-ef78aa3fe9043d256f269b4aa25234e42b9eecae.tar.xz
Scale screen dimensions
-rw-r--r--eel/eel-background.c5
-rw-r--r--eel/eel-editable-label.c10
-rw-r--r--eel/eel-gtk-extensions.c26
-rw-r--r--libcaja-private/caja-icon-container.c18
-rw-r--r--src/caja-desktop-window.c14
-rw-r--r--src/caja-window.c6
-rw-r--r--src/file-manager/fm-desktop-icon-view.c6
7 files changed, 60 insertions, 25 deletions
diff --git a/eel/eel-background.c b/eel/eel-background.c
index e9b4b2cf..02b4d857 100644
--- a/eel/eel-background.c
+++ b/eel/eel-background.c
@@ -308,8 +308,9 @@ drawable_get_adjusted_size (EelBackground *self,
if (self->details->is_desktop)
{
GdkScreen *screen = gtk_widget_get_screen (self->details->widget);
- *width = WidthOfScreen (gdk_x11_screen_get_xscreen (screen));
- *height = HeightOfScreen (gdk_x11_screen_get_xscreen (screen));
+ gint scale = gtk_widget_get_scale_factor (self->details->widget);
+ *width = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
+ *height = HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
}
else
{
diff --git a/eel/eel-editable-label.c b/eel/eel-editable-label.c
index 8fcda95f..da43cb0e 100644
--- a/eel/eel-editable-label.c
+++ b/eel/eel-editable-label.c
@@ -1049,6 +1049,7 @@ eel_editable_label_ensure_layout (EelEditableLabel *label,
else
{
gint wrap_width;
+ gint scale;
pango_layout_set_width (label->layout, -1);
pango_layout_get_extents (label->layout, NULL, &logical_rect);
@@ -1059,9 +1060,10 @@ eel_editable_label_ensure_layout (EelEditableLabel *label,
longest_paragraph = width;
wrap_width = get_label_wrap_width (label);
+ scale = gtk_widget_get_scale_factor (widget);
width = MIN (width, wrap_width);
width = MIN (width,
- PANGO_SCALE * (WidthOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) + 1) / 2);
+ PANGO_SCALE * (WidthOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) / scale + 1) / 2);
pango_layout_set_width (label->layout, width);
pango_layout_get_extents (label->layout, NULL, &logical_rect);
@@ -3046,6 +3048,7 @@ popup_position_func (GtkMenu *menu,
GtkWidget *widget;
GtkRequisition req;
GtkAllocation allocation;
+ gint scale;
label = EEL_EDITABLE_LABEL (user_data);
widget = GTK_WIDGET (label);
@@ -3056,12 +3059,13 @@ popup_position_func (GtkMenu *menu,
gtk_widget_get_preferred_size (widget, &req, NULL);
gtk_widget_get_allocation (widget, &allocation);
+ scale = gtk_widget_get_scale_factor (widget);
*x += allocation.width / 2;
*y += allocation.height;
- *x = CLAMP (*x, 0, MAX (0, WidthOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) - req.width));
- *y = CLAMP (*y, 0, MAX (0, HeightOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) - req.height));
+ *x = CLAMP (*x, 0, MAX (0, WidthOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) / scale - req.width));
+ *y = CLAMP (*y, 0, MAX (0, HeightOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) / scale - req.height));
}
static void
diff --git a/eel/eel-gtk-extensions.c b/eel/eel-gtk-extensions.c
index 21366fb4..ede45cfe 100644
--- a/eel/eel-gtk-extensions.c
+++ b/eel/eel-gtk-extensions.c
@@ -86,16 +86,22 @@ eel_gtk_window_get_geometry_string (GtkWindow *window)
static void
sanity_check_window_position (int *left, int *top)
{
+ GdkScreen *screen;
+ gint scale;
+
g_assert (left != NULL);
g_assert (top != NULL);
+ screen = gdk_screen_get_default ();
+ scale = gdk_window_get_scale_factor (gdk_screen_get_root_window (screen));
+
/* Make sure the top of the window is on screen, for
* draggability (might not be necessary with all window managers,
* but seems reasonable anyway). Make sure the top of the window
* isn't off the bottom of the screen, or so close to the bottom
* that it might be obscured by the panel.
*/
- *top = CLAMP (*top, 0, HeightOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) - MINIMUM_ON_SCREEN_HEIGHT);
+ *top = CLAMP (*top, 0, HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale - MINIMUM_ON_SCREEN_HEIGHT);
/* FIXME bugzilla.eazel.com 669:
* If window has negative left coordinate, set_uposition sends it
@@ -108,22 +114,28 @@ sanity_check_window_position (int *left, int *top)
* the screen, or so close to the right edge that it might be
* obscured by the panel.
*/
- *left = CLAMP (*left, 0, WidthOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) - MINIMUM_ON_SCREEN_WIDTH);
+ *left = CLAMP (*left, 0, WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale - MINIMUM_ON_SCREEN_WIDTH);
}
static void
sanity_check_window_dimensions (guint *width, guint *height)
{
+ GdkScreen *screen;
+ gint scale;
+
g_assert (width != NULL);
g_assert (height != NULL);
+ screen = gdk_screen_get_default ();
+ scale = gdk_window_get_scale_factor (gdk_screen_get_root_window (screen));
+
/* Pin the size of the window to the screen, so we don't end up in
* a state where the window is so big essential parts of it can't
* be reached (might not be necessary with all window managers,
* but seems reasonable anyway).
*/
- *width = MIN (*width, WidthOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())));
- *height = MIN (*height, HeightOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())));
+ *width = MIN (*width, WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale);
+ *height = MIN (*height, HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale);
}
/**
@@ -153,6 +165,7 @@ eel_gtk_window_set_initial_geometry (GtkWindow *window,
GdkScreen *screen;
int real_left, real_top;
int screen_width, screen_height;
+ int scale;
g_return_if_fail (GTK_IS_WINDOW (window));
@@ -168,8 +181,9 @@ eel_gtk_window_set_initial_geometry (GtkWindow *window,
real_top = top;
screen = gtk_window_get_screen (window);
- screen_width = WidthOfScreen (gdk_x11_screen_get_xscreen (screen));
- screen_height = HeightOfScreen (gdk_x11_screen_get_xscreen (screen));
+ scale = gtk_widget_get_scale_factor (GTK_WIDGET (window));
+ screen_width = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
+ screen_height = HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
/* This is sub-optimal. GDK doesn't allow us to set win_gravity
* to South/East types, which should be done if using negative
diff --git a/libcaja-private/caja-icon-container.c b/libcaja-private/caja-icon-container.c
index eb13b23f..5f941eab 100644
--- a/libcaja-private/caja-icon-container.c
+++ b/libcaja-private/caja-icon-container.c
@@ -326,6 +326,7 @@ icon_set_position (CajaIcon *icon,
int item_width, item_height;
int height_above, width_left;
int min_x, max_x, min_y, max_y;
+ int scale;
if (icon->x == x && icon->y == y)
{
@@ -354,12 +355,13 @@ icon_set_position (CajaIcon *icon,
For now, we have a cheesy workaround:
*/
+ scale = gtk_widget_get_scale_factor (GTK_WIDGET (container));
container_x = 0;
container_y = 0;
- container_width = WidthOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) - container_x
+ container_width = WidthOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) / scale - container_x
- container->details->left_margin
- container->details->right_margin;
- container_height = HeightOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) - container_y
+ container_height = HeightOfScreen (gdk_x11_screen_get_xscreen (gdk_screen_get_default ())) / scale - container_y
- container->details->top_margin
- container->details->bottom_margin;
pixels_per_unit = EEL_CANVAS (container)->pixels_per_unit;
@@ -5239,6 +5241,7 @@ caja_icon_container_search_position_func (CajaIconContainer *container,
gint x, y;
gint cont_x, cont_y;
gint cont_width, cont_height;
+ gint scale;
GdkWindow *cont_window;
GdkScreen *screen;
GtkRequisition requisition;
@@ -5247,6 +5250,7 @@ caja_icon_container_search_position_func (CajaIconContainer *container,
cont_window = gtk_widget_get_window (GTK_WIDGET (container));
+ scale = gtk_widget_get_scale_factor (GTK_WIDGET (container));
screen = gdk_window_get_screen (cont_window);
monitor_num = gdk_display_get_monitor_at_window (gdk_screen_get_display (screen),
@@ -5262,9 +5266,9 @@ caja_icon_container_search_position_func (CajaIconContainer *container,
gtk_widget_get_preferred_size (search_dialog, &requisition, NULL);
- if (cont_x + cont_width - requisition.width > WidthOfScreen (gdk_x11_screen_get_xscreen (screen)))
+ if (cont_x + cont_width - requisition.width > WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale)
{
- x = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) - requisition.width;
+ x = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale - requisition.width;
}
else if (cont_x + cont_width - requisition.width < 0)
{
@@ -6025,6 +6029,7 @@ key_press_event (GtkWidget *widget,
GdkScreen *screen;
gboolean text_modified;
gulong popup_menu_id;
+ gint scale;
caja_icon_container_ensure_interactive_directory (container);
@@ -6040,9 +6045,10 @@ key_press_event (GtkWidget *widget,
/* Move the entry off screen */
screen = gtk_widget_get_screen (GTK_WIDGET (container));
+ scale = gtk_widget_get_scale_factor (GTK_WIDGET (container));
gtk_window_move (GTK_WINDOW (container->details->search_window),
- WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) + 1,
- HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) + 1);
+ WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale + 1,
+ HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale + 1);
gtk_widget_show (container->details->search_window);
/* Send the event to the window. If the preedit_changed signal is emitted
diff --git a/src/caja-desktop-window.c b/src/caja-desktop-window.c
index 2aa0c2f5..16242dcd 100644
--- a/src/caja-desktop-window.c
+++ b/src/caja-desktop-window.c
@@ -114,9 +114,12 @@ caja_desktop_window_screen_size_changed (GdkScreen *screen,
CajaDesktopWindow *window)
{
int width_request, height_request;
+ int scale;
- width_request = WidthOfScreen (gdk_x11_screen_get_xscreen (screen));
- height_request = HeightOfScreen (gdk_x11_screen_get_xscreen (screen));
+ scale = gdk_window_get_scale_factor (gdk_screen_get_root_window (screen));
+
+ width_request = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
+ height_request = HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
g_object_set (window,
"width_request", width_request,
@@ -130,9 +133,12 @@ caja_desktop_window_new (CajaApplication *application,
{
CajaDesktopWindow *window;
int width_request, height_request;
+ int scale;
+
+ scale = gdk_window_get_scale_factor (gdk_screen_get_root_window (screen));
- width_request = WidthOfScreen (gdk_x11_screen_get_xscreen (screen));
- height_request = HeightOfScreen (gdk_x11_screen_get_xscreen (screen));
+ width_request = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
+ height_request = HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
window = CAJA_DESKTOP_WINDOW
(gtk_widget_new (caja_desktop_window_get_type(),
diff --git a/src/caja-window.c b/src/caja-window.c
index ac22b6d8..132ffd96 100644
--- a/src/caja-window.c
+++ b/src/caja-window.c
@@ -507,7 +507,8 @@ caja_window_zoom_to_default (CajaWindow *window)
static guint
get_max_forced_height (GdkScreen *screen)
{
- return (HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) * 90) / 100;
+ gint scale = gdk_window_get_scale_factor (gdk_screen_get_root_window (screen));
+ return (HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale * 90) / 100;
}
/* Code should never force the window wider than this size.
@@ -516,7 +517,8 @@ get_max_forced_height (GdkScreen *screen)
static guint
get_max_forced_width (GdkScreen *screen)
{
- return (WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) * 90) / 100;
+ gint scale = gdk_window_get_scale_factor (gdk_screen_get_root_window (screen));
+ return (WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale * 90) / 100;
}
/* This must be called when construction of CajaWindow is finished,
diff --git a/src/file-manager/fm-desktop-icon-view.c b/src/file-manager/fm-desktop-icon-view.c
index 8cbf0b62..42186a70 100644
--- a/src/file-manager/fm-desktop-icon-view.c
+++ b/src/file-manager/fm-desktop-icon-view.c
@@ -392,10 +392,12 @@ realized_callback (GtkWidget *widget, FMDesktopIconView *desktop_icon_view)
GdkWindow *root_window;
GdkScreen *screen;
GtkAllocation allocation;
+ gint scale;
g_return_if_fail (desktop_icon_view->details->root_window == NULL);
screen = gtk_widget_get_screen (widget);
+ scale = gtk_widget_get_scale_factor (widget);
/* Ugly HACK for the problem that the views realize at the
* wrong size and then get resized. (This is a problem with
@@ -405,8 +407,8 @@ realized_callback (GtkWidget *widget, FMDesktopIconView *desktop_icon_view)
*/
allocation.x = 0;
allocation.y = 0;
- allocation.width = WidthOfScreen (gdk_x11_screen_get_xscreen (screen));
- allocation.height = HeightOfScreen (gdk_x11_screen_get_xscreen (screen));
+ allocation.width = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
+ allocation.height = HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale;
gtk_widget_size_allocate (GTK_WIDGET(get_icon_container(desktop_icon_view)),
&allocation);