After using randr to get a list of monitors, sort the list such that the
2009-02-19 Ray Strode <rstrode@redhat.com> * gdk/x11/gdkscreen-x11.c (monitor_compare_function), (init_randr13): After using randr to get a list of monitors, sort the list such that the biggest output of "cloned" outputs comes first in the list. This helps apps that don't generally handle overlapping outputs to work better in randr clone mode. svn path=/trunk/; revision=22386
This commit is contained in:
11
ChangeLog
11
ChangeLog
@ -1,3 +1,14 @@
|
|||||||
|
2009-02-19 Ray Strode <rstrode@redhat.com>
|
||||||
|
|
||||||
|
* gdk/x11/gdkscreen-x11.c
|
||||||
|
(monitor_compare_function), (init_randr13):
|
||||||
|
After using randr to get a list of monitors,
|
||||||
|
sort the list such that the biggest output
|
||||||
|
of "cloned" outputs comes first in the list.
|
||||||
|
This helps apps that don't generally handle
|
||||||
|
overlapping outputs to work better in randr
|
||||||
|
clone mode.
|
||||||
|
|
||||||
2009-02-19 Sven Neumann <sven@gimp.org>
|
2009-02-19 Sven Neumann <sven@gimp.org>
|
||||||
|
|
||||||
* gdk/directfb/gdkwindow-directfb.c
|
* gdk/directfb/gdkwindow-directfb.c
|
||||||
|
@ -663,6 +663,31 @@ init_fake_xinerama (GdkScreen *screen)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
monitor_compare_function (GdkX11Monitor *monitor1,
|
||||||
|
GdkX11Monitor *monitor2)
|
||||||
|
{
|
||||||
|
/* Sort the leftmost/topmost monitors first.
|
||||||
|
* For "cloned" monitors, sort the bigger ones first
|
||||||
|
* (giving preference to taller monitors over wider
|
||||||
|
* monitors)
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (monitor1->geometry.x != monitor2->geometry.x)
|
||||||
|
return monitor1->geometry.x - monitor2->geometry.x;
|
||||||
|
|
||||||
|
if (monitor1->geometry.y != monitor2->geometry.y)
|
||||||
|
return monitor1->geometry.y - monitor2->geometry.y;
|
||||||
|
|
||||||
|
if (monitor1->geometry.height != monitor2->geometry.height)
|
||||||
|
return - (monitor1->geometry.height - monitor2->geometry.height);
|
||||||
|
|
||||||
|
if (monitor1->geometry.width != monitor2->geometry.width)
|
||||||
|
return - (monitor1->geometry.width - monitor2->geometry.width);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
init_randr13 (GdkScreen *screen)
|
init_randr13 (GdkScreen *screen)
|
||||||
{
|
{
|
||||||
@ -732,6 +757,8 @@ init_randr13 (GdkScreen *screen)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_array_sort (monitors,
|
||||||
|
(GCompareFunc) monitor_compare_function);
|
||||||
screen_x11->n_monitors = monitors->len;
|
screen_x11->n_monitors = monitors->len;
|
||||||
screen_x11->monitors = (GdkX11Monitor *)g_array_free (monitors, FALSE);
|
screen_x11->monitors = (GdkX11Monitor *)g_array_free (monitors, FALSE);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user