summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViktor Odintsev <zakhams@gmail.com>2017-07-02 17:03:27 +0300
committerViktor Odintsev <ninetls@xfce.org>2017-07-02 17:03:27 +0300
commit050a52ed2d44b1b5c16af4b85c518c16dd3c51d9 (patch)
tree450a39579a8e56b2c7d5109e866694f96922be6d
parent5b10f726c28c68d0ebc972754b08f5ea199d36b1 (diff)
downloadxfwm4-050a52ed2d44b1b5c16af4b85c518c16dd3c51d9.tar.gz
Handle GDK display/screen/monitor deprecations
-rw-r--r--common/xfwm-common.c51
-rw-r--r--common/xfwm-common.h9
-rw-r--r--src/client.c4
-rw-r--r--src/events.c6
-rw-r--r--src/menu.c33
-rw-r--r--src/placement.c6
-rw-r--r--src/screen.c18
-rw-r--r--src/tabwin.c18
-rw-r--r--src/workspaces.c4
9 files changed, 117 insertions, 32 deletions
diff --git a/common/xfwm-common.c b/common/xfwm-common.c
index b6c9ae25f..a89fc9307 100644
--- a/common/xfwm-common.c
+++ b/common/xfwm-common.c
@@ -72,3 +72,54 @@ xfwm_get_screen_dimensions (gint *width, gint *height)
*height = gdk_screen_height ();
#endif
}
+
+
+
+void
+xfwm_get_monitor_geometry (GdkScreen *screen,
+ gint monitor_num,
+ GdkRectangle *geometry)
+{
+#if GTK_CHECK_VERSION(3, 22, 0)
+ GdkDisplay *display;
+ GdkMonitor *monitor;
+
+ display = gdk_screen_get_display (screen);
+ monitor = gdk_display_get_monitor (display, monitor_num);
+ gdk_monitor_get_geometry (monitor, geometry);
+#else
+ gdk_screen_get_monitor_geometry (screen, monitor_num, geometry);
+#endif
+}
+
+
+
+void
+xfwm_get_primary_monitor_geometry (GdkScreen *screen,
+ GdkRectangle *geometry)
+{
+#if GTK_CHECK_VERSION(3, 22, 0)
+ GdkDisplay *display;
+ GdkMonitor *monitor;
+
+ display = gdk_screen_get_display (screen);
+ monitor = gdk_display_get_primary_monitor (display);
+ gdk_monitor_get_geometry (monitor, geometry);
+#else
+ gdk_screen_get_monitor_geometry (screen,
+ gdk_screen_get_primary_monitor (screen),
+ geometry);
+#endif
+}
+
+
+
+gint
+xfwm_get_n_monitors (GdkScreen *screen)
+{
+#if GTK_CHECK_VERSION(3, 22, 0)
+ return gdk_display_get_n_monitors (gdk_screen_get_display (screen));
+#else
+ return gdk_screen_get_n_monitors (screen);
+#endif
+}
diff --git a/common/xfwm-common.h b/common/xfwm-common.h
index eb2ed4182..742767fb5 100644
--- a/common/xfwm-common.h
+++ b/common/xfwm-common.h
@@ -29,4 +29,13 @@ void xfwm_widget_reparent (GtkWidget *widget,
void xfwm_get_screen_dimensions (gint *width,
gint *height);
+void xfwm_get_monitor_geometry (GdkScreen *screen,
+ gint monitor_num,
+ GdkRectangle *geometry);
+
+void xfwm_get_primary_monitor_geometry (GdkScreen *screen,
+ GdkRectangle *geometry);
+
+gint xfwm_get_n_monitors (GdkScreen *screen);
+
#endif /* !__COMMON_H__ */
diff --git a/src/client.c b/src/client.c
index 4085e756b..e4f58cff2 100644
--- a/src/client.c
+++ b/src/client.c
@@ -42,6 +42,8 @@
#include <gtk/gtk.h>
#include <libxfce4util/libxfce4util.h>
+#include <common/xfwm-common.h>
+
#include "client.h"
#include "compositor.h"
#include "focus.h"
@@ -3079,7 +3081,7 @@ void clientSetFullscreenMonitor (Client *c, gint top, gint bottom, gint left, gi
screen_info = c->screen_info;
display_info = screen_info->display_info;
- num_monitors = gdk_screen_get_n_monitors (screen_info->gscr);
+ num_monitors = xfwm_get_n_monitors (screen_info->gscr);
if ((top >= 0) && (top < num_monitors) &&
(bottom >= 0) && (bottom < num_monitors) &&
(left >= 0) && (left < num_monitors) &&
diff --git a/src/events.c b/src/events.c
index e8b6b348a..0c7e3ae62 100644
--- a/src/events.c
+++ b/src/events.c
@@ -43,6 +43,8 @@
#include <libxfce4util/libxfce4util.h>
#include <libxfce4ui/libxfce4ui.h>
+#include <common/xfwm-common.h>
+
#include "misc.h"
#include "workspaces.h"
#include "settings.h"
@@ -2765,7 +2767,7 @@ size_changed_cb(GdkScreen *gscreen, gpointer data)
g_return_if_fail (screen_info);
display_info = screen_info->display_info;
- if (gdk_screen_get_n_monitors (screen_info->gscr) == 0)
+ if (xfwm_get_n_monitors (screen_info->gscr) == 0)
{
/*
* Recent Xorg drivers disable the output when the lid
@@ -2811,7 +2813,7 @@ monitors_changed_cb(GdkScreen *gscreen, gpointer data)
g_return_if_fail (screen_info);
display_info = screen_info->display_info;
- if (gdk_screen_get_n_monitors (screen_info->gscr) == 0)
+ if (xfwm_get_n_monitors (screen_info->gscr) == 0)
{
/*
* Recent Xorg drivers disable the output when the lid
diff --git a/src/menu.c b/src/menu.c
index 9dcab0cfa..e8869ee89 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -34,6 +34,8 @@
#include <string.h>
#include <libxfce4util/libxfce4util.h>
+#include <common/xfwm-common.h>
+
#include "event_filter.h"
#include "menu.h"
#include "misc.h"
@@ -98,35 +100,50 @@ popup_position_func (GtkMenu * menu, gint * x, gint * y, gboolean * push_in,
{
GtkRequisition req;
GdkPoint *pos;
- gint monitor;
+#if GTK_CHECK_VERSION(3, 22, 0)
+ GdkDisplay *display;
+ GdkMonitor *monitor;
+#else
GdkScreen *screen;
+ gint monitor_num;
+#endif
+ gint width;
+ gint height;
pos = user_data;
gtk_widget_size_request (GTK_WIDGET (menu), &req);
+ xfwm_get_screen_dimensions (&width, &height);
+
if (pos->x >= 0)
{
*x = pos->x;
- *x = CLAMP (*x, 0, MAX (0, gdk_screen_width () - req.width));
+ *x = CLAMP (*x, 0, MAX (0, width - req.width));
}
else
{
- *x = (gdk_screen_width () - req.width) / 2;
+ *x = (width - req.width) / 2;
}
if (pos->x >= 0)
{
*y = pos->y;
- *y = CLAMP (*y, 0, MAX (0, gdk_screen_height () - req.height));
+ *y = CLAMP (*y, 0, MAX (0, height - req.height));
}
else
{
- *y = (gdk_screen_height () - req.height) / 2;
+ *y = (height - req.height) / 2;
}
- screen = gtk_widget_get_screen (GTK_WIDGET(menu));
- monitor = gdk_screen_get_monitor_at_point (screen, *x, *y);
- gtk_menu_set_monitor (GTK_MENU (menu), monitor);
+#if GTK_CHECK_VERSION(3, 22, 0)
+ display = gtk_widget_get_display (GTK_WIDGET (menu));
+ monitor = gdk_display_get_monitor_at_point (display, *x, *y);
+ gtk_menu_place_on_monitor (GTK_MENU (menu), monitor);
+#else
+ screen = gtk_widget_get_screen (GTK_WIDGET (menu));
+ monitor_num = gdk_screen_get_monitor_at_point (screen, *x, *y);
+ gtk_menu_set_monitor (GTK_MENU (menu), monitor_num);
+#endif
g_free (user_data);
}
diff --git a/src/placement.c b/src/placement.c
index 9090a3f2a..d679bf83a 100644
--- a/src/placement.c
+++ b/src/placement.c
@@ -29,6 +29,8 @@
#include <glib.h>
#include <libxfce4util/libxfce4util.h>
+#include <common/xfwm-common.h>
+
#include "screen.h"
#include "misc.h"
#include "client.h"
@@ -771,9 +773,7 @@ clientInitPosition (Client * c)
position = (c->size->flags & (PPosition | USPosition));
n_monitors = myScreenGetNumMonitors (c->screen_info);
- gdk_screen_get_monitor_geometry (screen_info->gscr,
- gdk_screen_get_primary_monitor (screen_info->gscr),
- &rect);
+ xfwm_get_primary_monitor_geometry (screen_info->gscr, &rect);
is_transient = clientIsTransient (c);
if (position || is_transient || (c->type & (WINDOW_TYPE_DONT_PLACE | WINDOW_TYPE_DIALOG)))
diff --git a/src/screen.c b/src/screen.c
index cfb38846c..0d80916d0 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -44,6 +44,8 @@
#include <libsn/sn.h>
#endif
+#include <common/xfwm-common.h>
+
#include "display.h"
#include "screen.h"
#include "misc.h"
@@ -632,7 +634,7 @@ myScreenComputeSize (ScreenInfo *screen_info)
width = 0;
height = 0;
- num_monitors = gdk_screen_get_n_monitors (screen_info->gscr);
+ num_monitors = xfwm_get_n_monitors (screen_info->gscr);
if (num_monitors == 0)
{
@@ -641,13 +643,13 @@ myScreenComputeSize (ScreenInfo *screen_info)
for (i = 0; i < num_monitors; i++)
{
- gdk_screen_get_monitor_geometry (screen_info->gscr, i, &monitor);
+ xfwm_get_monitor_geometry (screen_info->gscr, i, &monitor);
width = MAX (monitor.x + monitor.width, width);
height = MAX (monitor.y + monitor.height, height);
}
- screen_info->logical_width = gdk_screen_get_width (screen_info->gscr);
- screen_info->logical_height = gdk_screen_get_height (screen_info->gscr);
+ screen_info->logical_width = WidthOfScreen (screen_info->xscreen);
+ screen_info->logical_height = HeightOfScreen (screen_info->xscreen);
if ((width != screen_info->logical_width) || (height != screen_info->logical_height))
{
g_warning ("output size (%dx%d) and logical screen size (%dx%d) do not match",
@@ -718,14 +720,14 @@ myScreenRebuildMonitorIndex (ScreenInfo *screen_info)
* the bigger ones first (giving preference to taller monitors
* over wider monitors)
*/
- num_monitors = gdk_screen_get_n_monitors (screen_info->gscr);
+ num_monitors = xfwm_get_n_monitors (screen_info->gscr);
for (i = 0; i < num_monitors; i++)
{
- gdk_screen_get_monitor_geometry (screen_info->gscr, i, &monitor);
+ xfwm_get_monitor_geometry (screen_info->gscr, i, &monitor);
cloned = FALSE;
for (j = 0; j < (gint) screen_info->monitors_index->len; j++)
{
- gdk_screen_get_monitor_geometry (screen_info->gscr, j, &previous);
+ xfwm_get_monitor_geometry (screen_info->gscr, j, &previous);
if ((previous.x == monitor.x) && (previous.y == monitor.y))
{
cloned = TRUE;
@@ -788,7 +790,7 @@ myScreenFindMonitorAtPoint (ScreenInfo *screen_info, gint x, gint y, GdkRectangl
gint monitor_index;
monitor_index = myScreenGetMonitorIndex (screen_info, i);
- gdk_screen_get_monitor_geometry (screen_info->gscr, monitor_index, &monitor);
+ xfwm_get_monitor_geometry (screen_info->gscr, monitor_index, &monitor);
if ((x >= monitor.x) && (x < (monitor.x + monitor.width)) &&
(y >= monitor.y) && (y < (monitor.y + monitor.height)))
diff --git a/src/tabwin.c b/src/tabwin.c
index def337f54..83c3b8ba0 100644
--- a/src/tabwin.c
+++ b/src/tabwin.c
@@ -65,6 +65,9 @@
#include <gdk/gdk.h>
#include <gtk/gtk.h>
#include <libxfce4util/libxfce4util.h>
+
+#include <common/xfwm-common.h>
+
#include "icons.h"
#include "focus.h"
#include "tabwin.h"
@@ -383,7 +386,7 @@ getMinMonitorWidth (ScreenInfo *screen_info)
for (min_width = i = 0; i < num_monitors; i++)
{
GdkRectangle monitor;
- gdk_screen_get_monitor_geometry (screen_info->gscr, i, &monitor);
+ xfwm_get_monitor_geometry (screen_info->gscr, i, &monitor);
if (min_width == 0 || monitor.width < min_width)
min_width = monitor.width;
}
@@ -397,7 +400,7 @@ getMinMonitorHeight (ScreenInfo *screen_info)
for (min_height = i = 0; i < num_monitors; i++)
{
GdkRectangle monitor;
- gdk_screen_get_monitor_geometry (screen_info->gscr, i, &monitor);
+ xfwm_get_monitor_geometry (screen_info->gscr, i, &monitor);
if (min_height == 0 || monitor.height < min_height)
{
min_height = monitor.height;
@@ -609,9 +612,7 @@ createWindowlist (ScreenInfo *screen_info, TabwinWidget *tabwin_widget)
static gboolean
tabwinConfigure (TabwinWidget *tabwin_widget, GdkEventConfigure *event)
{
- GtkWindow *window;
GdkRectangle monitor;
- GdkScreen *screen;
gint x, y;
g_return_val_if_fail (tabwin_widget != NULL, FALSE);
@@ -622,12 +623,11 @@ tabwinConfigure (TabwinWidget *tabwin_widget, GdkEventConfigure *event)
return FALSE;
}
- window = GTK_WINDOW(tabwin_widget);
- screen = gtk_window_get_screen(window);
- gdk_screen_get_monitor_geometry (screen, tabwin_widget->monitor_num, &monitor);
+ xfwm_get_monitor_geometry (gtk_widget_get_screen (GTK_WIDGET (tabwin_widget)),
+ tabwin_widget->monitor_num, &monitor);
x = monitor.x + (monitor.width - event->width) / 2;
y = monitor.y + (monitor.height - event->height) / 2;
- gtk_window_move (window, x, y);
+ gtk_window_move (GTK_WINDOW (tabwin_widget), x, y);
tabwin_widget->width = event->width;
tabwin_widget->height = event->height;
@@ -848,7 +848,7 @@ tabwinCreateWidget (Tabwin *tabwin, ScreenInfo *screen_info, gint monitor_num)
gtk_widget_style_get (GTK_WIDGET(tabwin_widget), "border-radius", &border_radius, NULL);
gtk_container_set_border_width (GTK_CONTAINER (tabwin_widget), border_radius + 4);
gtk_window_set_position (GTK_WINDOW (tabwin_widget), GTK_WIN_POS_NONE);
- gdk_screen_get_monitor_geometry (screen_info->gscr, tabwin_widget->monitor_num, &monitor);
+ xfwm_get_monitor_geometry (screen_info->gscr, tabwin_widget->monitor_num, &monitor);
gtk_window_move (GTK_WINDOW (tabwin_widget), monitor.x + monitor.width / 2,
monitor.y + monitor.height / 2);
diff --git a/src/workspaces.c b/src/workspaces.c
index 1006d6ec0..62c370295 100644
--- a/src/workspaces.c
+++ b/src/workspaces.c
@@ -35,6 +35,8 @@
#include <gtk/gtk.h>
#include <libxfce4util/libxfce4util.h>
+#include <common/xfwm-common.h>
+
#include "display.h"
#include "screen.h"
#include "misc.h"
@@ -546,7 +548,7 @@ workspaceUpdateArea (ScreenInfo *screen_info)
screen_info->margins[i] = screen_info->gnome_margins[i];
}
- gdk_screen_get_monitor_geometry (screen_info->gscr, gdk_screen_get_primary_monitor(screen_info->gscr), &workarea);
+ xfwm_get_primary_monitor_geometry (screen_info->gscr, &workarea);
for (c = screen_info->clients, i = 0; i < screen_info->client_count; c = c->next, i++)
{