summaryrefslogtreecommitdiff
path: root/mate-panel/panel-multimonitor.c
diff options
context:
space:
mode:
Diffstat (limited to 'mate-panel/panel-multimonitor.c')
-rw-r--r--mate-panel/panel-multimonitor.c68
1 files changed, 35 insertions, 33 deletions
diff --git a/mate-panel/panel-multimonitor.c b/mate-panel/panel-multimonitor.c
index d2127436..c7ac14cc 100644
--- a/mate-panel/panel-multimonitor.c
+++ b/mate-panel/panel-multimonitor.c
@@ -3,6 +3,7 @@
*
* Copyright (C) 2001 George Lebl <[email protected]>
* 2002 Sun Microsystems Inc.
+ * Copyright (C) 2012-2021 MATE Developers
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -70,7 +71,6 @@ _panel_multimonitor_output_should_be_first (Display *xdisplay,
unsigned long nitems;
unsigned long bytes_after;
unsigned char *prop;
- gboolean retval;
connector_type_atom = XInternAtom (xdisplay, "ConnectorType", False);
@@ -80,7 +80,7 @@ _panel_multimonitor_output_should_be_first (Display *xdisplay,
&nitems, &bytes_after, &prop) == Success) {
if (actual_type == XA_ATOM && nitems == 1 && actual_format == 32) {
char *connector_type = XGetAtomName (xdisplay, prop[0]);
- retval = g_strcmp0 (connector_type, "Panel") == 0;
+ gboolean retval = g_strcmp0 (connector_type, "Panel") == 0;
XFree (connector_type);
return retval;
}
@@ -104,7 +104,7 @@ panel_multimonitor_get_randr_monitors (int *monitors_ret,
Window xroot;
XRRScreenResources *resources;
RROutput primary;
- GArray *geometries;
+ GArray *geometries_array;
int scale;
int i;
@@ -158,9 +158,9 @@ panel_multimonitor_get_randr_monitors (int *monitors_ret,
/* Use scale factor to bring geometries down to device pixels to support HiDPI displays */
scale = gdk_monitor_get_scale_factor (monitor);
- geometries = g_array_sized_new (FALSE, FALSE,
- sizeof (GdkRectangle),
- resources->noutput);
+ geometries_array = g_array_sized_new (FALSE, FALSE,
+ sizeof (GdkRectangle),
+ resources->noutput);
for (i = 0; i < resources->noutput; i++) {
XRROutputInfo *output;
@@ -186,9 +186,9 @@ panel_multimonitor_get_randr_monitors (int *monitors_ret,
if (_panel_multimonitor_output_should_be_first (xdisplay,
resources->outputs[i],
output, primary))
- g_array_prepend_vals (geometries, &rect, 1);
+ g_array_prepend_vals (geometries_array, &rect, 1);
else
- g_array_append_vals (geometries, &rect, 1);
+ g_array_append_vals (geometries_array, &rect, 1);
}
XRRFreeOutputInfo (output);
@@ -196,19 +196,19 @@ panel_multimonitor_get_randr_monitors (int *monitors_ret,
XRRFreeScreenResources (resources);
- if (geometries->len == 0) {
+ if (geometries_array->len == 0) {
/* This can happen in at least one case:
* https://bugzilla.novell.com/show_bug.cgi?id=543876 where all
* monitors appear disconnected (possibly because the screen
* is behing a KVM switch) -- see comment #8.
* There might be other cases too, so we stay on the safe side.
*/
- g_array_free (geometries, TRUE);
+ g_array_free (geometries_array, TRUE);
return FALSE;
}
- *monitors_ret = geometries->len;
- *geometries_ret = (GdkRectangle *) g_array_free (geometries, FALSE);
+ *monitors_ret = geometries_array->len;
+ *geometries_ret = (GdkRectangle *) g_array_free (geometries_array, FALSE);
return TRUE;
}
@@ -221,39 +221,41 @@ panel_multimonitor_get_gdk_monitors (int *monitors_ret,
{
GdkDisplay *display;
int num_monitors;
- GdkRectangle *geometries;
+ GdkRectangle *geometries_array;
int i;
display = gdk_display_get_default ();
num_monitors = gdk_display_get_n_monitors (display);
- geometries = g_new (GdkRectangle, num_monitors);
+ geometries_array = g_new (GdkRectangle, num_monitors);
for (i = 0; i < num_monitors; i++)
- gdk_monitor_get_geometry (gdk_display_get_monitor (display, i), &(geometries[i]));
+ gdk_monitor_get_geometry (gdk_display_get_monitor (display, i), &(geometries_array[i]));
*monitors_ret = num_monitors;
- *geometries_ret = geometries;
+ *geometries_ret = geometries_array;
}
static void
panel_multimonitor_get_raw_monitors (int *monitors_ret,
GdkRectangle **geometries_ret)
{
- gboolean res = FALSE;
-
*monitors_ret = 0;
*geometries_ret = NULL;
#ifdef HAVE_X11
#ifdef HAVE_RANDR
if (GDK_IS_X11_DISPLAY (gdk_display_get_default ()) && have_randr)
- res = panel_multimonitor_get_randr_monitors (monitors_ret, geometries_ret);
+ {
+ gboolean res;
+
+ res = panel_multimonitor_get_randr_monitors (monitors_ret,
+ geometries_ret);
+ if (res && *monitors_ret > 0)
+ return;
+ }
#endif /* HAVE_RANDR */
#endif /* HAVE_X11 */
- if (res && *monitors_ret > 0)
- return;
-
panel_multimonitor_get_gdk_monitors (monitors_ret, geometries_ret);
}
@@ -275,11 +277,11 @@ panel_multimonitor_compress_overlapping_monitors (int *num_monitors_in
GdkRectangle **geometries_inout)
{
int num_monitors;
- GdkRectangle *geometries;
+ GdkRectangle *geometries_array;
int i;
num_monitors = *num_monitors_inout;
- geometries = *geometries_inout;
+ geometries_array = *geometries_inout;
/* http://bugzilla.gnome.org/show_bug.cgi?id=530969
* https://bugzilla.novell.com/show_bug.cgi?id=310208
@@ -330,27 +332,27 @@ panel_multimonitor_compress_overlapping_monitors (int *num_monitors_in
long max_pixels;
int j;
- max_pixels = pixels_in_rectangle (&geometries[i]);
+ max_pixels = pixels_in_rectangle (&geometries_array[i]);
j = i + 1;
while (j < num_monitors) {
- if (rectangle_overlaps (&geometries[i],
- &geometries[j])) {
+ if (rectangle_overlaps (&geometries_array[i],
+ &geometries_array[j])) {
long pixels;
- pixels = pixels_in_rectangle (&geometries[j]);
+ pixels = pixels_in_rectangle (&geometries_array[j]);
if (pixels > max_pixels) {
max_pixels = pixels;
/* keep the maximum */
- geometries[i] = geometries[j];
+ geometries_array[i] = geometries_array[j];
}
/* Shift the remaining monitors to the left */
if (num_monitors - j - 1 > 0)
- memmove (&geometries[j],
- &geometries[j + 1],
- sizeof (geometries[0]) * (num_monitors - j - 1));
+ memmove (&geometries_array[j],
+ &geometries_array[j + 1],
+ sizeof (geometries_array[0]) * (num_monitors - j - 1));
num_monitors--;
g_assert (num_monitors > 0);
@@ -360,7 +362,7 @@ panel_multimonitor_compress_overlapping_monitors (int *num_monitors_in
}
*num_monitors_inout = num_monitors;
- *geometries_inout = geometries;
+ *geometries_inout = geometries_array;
}
static gboolean