Migrate most of the code to GdkMonitor
This is the new API as of Gtk+ >= 3.22. Many warnings about the old API are still there because it is still used in case of failure. It seems there is no other way (seriously?)
This commit is contained in:
parent
bc6ad810ef
commit
451cf59418
|
@ -1539,12 +1539,36 @@ static int _desktop_get_workarea(Desktop * desktop)
|
||||||
unsigned char * p = NULL;
|
unsigned char * p = NULL;
|
||||||
unsigned long * u;
|
unsigned long * u;
|
||||||
int res;
|
int res;
|
||||||
|
#if GTK_CHECK_VERSION(3, 22, 0)
|
||||||
|
GdkMonitor * monitor;
|
||||||
|
int scale;
|
||||||
|
#endif
|
||||||
|
|
||||||
if(desktop->prefs.monitor >= 0 && desktop->prefs.monitor
|
if(desktop->prefs.monitor >= 0
|
||||||
< gdk_screen_get_n_monitors(desktop->screen))
|
#if GTK_CHECK_VERSION(3, 22, 0)
|
||||||
|
&& desktop->prefs.monitor
|
||||||
|
< gdk_screen_get_n_monitors(desktop->screen)
|
||||||
|
&& (monitor = gdk_display_get_monitor(desktop->display,
|
||||||
|
desktop->prefs.monitor)) != NULL
|
||||||
|
#else
|
||||||
|
&& desktop->prefs.monitor
|
||||||
|
< gdk_display_get_n_monitors(desktop->display)
|
||||||
|
#endif
|
||||||
|
)
|
||||||
{
|
{
|
||||||
|
#if GTK_CHECK_VERSION(3, 22, 0)
|
||||||
|
gdk_monitor_get_workarea(monitor, &desktop->workarea);
|
||||||
|
if((scale = gdk_monitor_get_scale_factor(monitor)) != 1)
|
||||||
|
{
|
||||||
|
desktop->workarea.x *= scale;
|
||||||
|
desktop->workarea.y *= scale;
|
||||||
|
desktop->workarea.width *= scale;
|
||||||
|
desktop->workarea.height *= scale;
|
||||||
|
}
|
||||||
|
#else
|
||||||
gdk_screen_get_monitor_geometry(desktop->screen,
|
gdk_screen_get_monitor_geometry(desktop->screen,
|
||||||
desktop->prefs.monitor, &desktop->workarea);
|
desktop->prefs.monitor, &desktop->workarea);
|
||||||
|
#endif
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "DEBUG: %s() (%d, %d) %dx%d\n", __func__,
|
fprintf(stderr, "DEBUG: %s() (%d, %d) %dx%d\n", __func__,
|
||||||
desktop->workarea.x, desktop->workarea.y,
|
desktop->workarea.x, desktop->workarea.y,
|
||||||
|
@ -1784,10 +1808,28 @@ static void _background_monitor(Desktop * desktop, char const * filename,
|
||||||
int monitor)
|
int monitor)
|
||||||
{
|
{
|
||||||
GError * error = NULL;
|
GError * error = NULL;
|
||||||
|
#if GTK_CHECK_VERSION(3, 22, 0)
|
||||||
|
GdkMonitor * m;
|
||||||
|
#endif
|
||||||
|
|
||||||
if(extend != TRUE)
|
if(extend != TRUE)
|
||||||
|
{
|
||||||
|
#if GTK_CHECK_VERSION(3, 22, 0)
|
||||||
|
if((m = gdk_display_get_monitor(desktop->display, monitor))
|
||||||
|
!= NULL)
|
||||||
|
gdk_monitor_get_geometry(m, window);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
window->x = 0;
|
||||||
|
window->y = 0;
|
||||||
|
window->width = gdk_screen_get_width(desktop->screen);
|
||||||
|
window->height = gdk_screen_get_height(desktop->screen);
|
||||||
|
}
|
||||||
|
#else
|
||||||
gdk_screen_get_monitor_geometry(desktop->screen, monitor,
|
gdk_screen_get_monitor_geometry(desktop->screen, monitor,
|
||||||
window);
|
window);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
switch(how)
|
switch(how)
|
||||||
{
|
{
|
||||||
case DESKTOP_HOW_NONE:
|
case DESKTOP_HOW_NONE:
|
||||||
|
@ -1822,7 +1864,13 @@ static void _background_monitors(Desktop * desktop, char const * filename,
|
||||||
gint n;
|
gint n;
|
||||||
gint i;
|
gint i;
|
||||||
|
|
||||||
n = (extend != TRUE) ? gdk_screen_get_n_monitors(desktop->screen) : 1;
|
n = (extend != TRUE) ?
|
||||||
|
#if GTK_CHECK_VERSION(3, 22, 0)
|
||||||
|
gdk_display_get_n_monitors(desktop->display)
|
||||||
|
#else
|
||||||
|
gdk_screen_get_n_monitors(desktop->screen)
|
||||||
|
#endif
|
||||||
|
: 1;
|
||||||
for(i = 0; i < n; i++)
|
for(i = 0; i < n; i++)
|
||||||
_background_monitor(desktop, filename, how, extend, window, i);
|
_background_monitor(desktop, filename, how, extend, window, i);
|
||||||
}
|
}
|
||||||
|
@ -2238,23 +2286,50 @@ static void _on_preferences_monitors_changed(gpointer data)
|
||||||
gint width;
|
gint width;
|
||||||
gint height;
|
gint height;
|
||||||
char buf[64];
|
char buf[64];
|
||||||
|
#if GTK_CHECK_VERSION(3, 22, 0)
|
||||||
|
GdkMonitor * monitor;
|
||||||
|
#endif
|
||||||
|
|
||||||
active = gtk_combo_box_get_active(GTK_COMBO_BOX(desktop->pr_monitors));
|
active = gtk_combo_box_get_active(GTK_COMBO_BOX(desktop->pr_monitors));
|
||||||
geometry.x = 0;
|
#if GTK_CHECK_VERSION(3, 22, 0)
|
||||||
geometry.y = 0;
|
if((monitor = gdk_display_get_monitor(desktop->display, active))
|
||||||
geometry.width = gdk_screen_get_width(desktop->screen);
|
!= NULL)
|
||||||
geometry.height = gdk_screen_get_height(desktop->screen);
|
{
|
||||||
width = gdk_screen_get_width_mm(desktop->screen);
|
gdk_monitor_get_geometry(monitor, &geometry);
|
||||||
height = gdk_screen_get_height_mm(desktop->screen);
|
width = gdk_monitor_get_width_mm(monitor);
|
||||||
|
height = gdk_monitor_get_height_mm(monitor);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
geometry.x = 0;
|
||||||
|
geometry.y = 0;
|
||||||
|
geometry.width = gdk_screen_get_width(desktop->screen);
|
||||||
|
geometry.height = gdk_screen_get_height(desktop->screen);
|
||||||
|
width = gdk_screen_get_width_mm(desktop->screen);
|
||||||
|
height = gdk_screen_get_height_mm(desktop->screen);
|
||||||
|
}
|
||||||
#if GTK_CHECK_VERSION(2, 14, 0)
|
#if GTK_CHECK_VERSION(2, 14, 0)
|
||||||
if(active-- > 0)
|
if(active-- > 0)
|
||||||
{
|
{
|
||||||
gdk_screen_get_monitor_geometry(desktop->screen, active,
|
# if GTK_CHECK_VERSION(3, 22, 0)
|
||||||
&geometry);
|
if((monitor = gdk_display_get_monitor(desktop->display, active))
|
||||||
width = gdk_screen_get_monitor_width_mm(desktop->screen,
|
!= NULL)
|
||||||
active);
|
{
|
||||||
height = gdk_screen_get_monitor_height_mm(desktop->screen,
|
gdk_monitor_get_geometry(monitor, &geometry);
|
||||||
active);
|
width = gdk_monitor_get_width_mm(monitor);
|
||||||
|
height = gdk_monitor_get_height_mm(monitor);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
# endif
|
||||||
|
{
|
||||||
|
gdk_screen_get_monitor_geometry(desktop->screen, active,
|
||||||
|
&geometry);
|
||||||
|
width = gdk_screen_get_monitor_width_mm(desktop->screen,
|
||||||
|
active);
|
||||||
|
height = gdk_screen_get_monitor_height_mm(
|
||||||
|
desktop->screen, active);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if(width < 0 || height < 0)
|
if(width < 0 || height < 0)
|
||||||
|
@ -2282,8 +2357,14 @@ static void _on_preferences_monitors_refresh(gpointer data)
|
||||||
#if GTK_CHECK_VERSION(2, 14, 0)
|
#if GTK_CHECK_VERSION(2, 14, 0)
|
||||||
gint n;
|
gint n;
|
||||||
gint i;
|
gint i;
|
||||||
char * name;
|
gchar * name;
|
||||||
char buf[32];
|
char buf[32];
|
||||||
|
# if GTK_CHECK_VERSION(3, 22, 0)
|
||||||
|
GdkMonitor * monitor;
|
||||||
|
char const * manufacturer;
|
||||||
|
char const * model;
|
||||||
|
char buf2[64];
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
active = gtk_combo_box_get_active(GTK_COMBO_BOX(desktop->pr_imonitor));
|
active = gtk_combo_box_get_active(GTK_COMBO_BOX(desktop->pr_imonitor));
|
||||||
|
@ -2303,11 +2384,35 @@ static void _on_preferences_monitors_refresh(gpointer data)
|
||||||
_("Whole screen"));
|
_("Whole screen"));
|
||||||
#endif
|
#endif
|
||||||
#if GTK_CHECK_VERSION(2, 14, 0)
|
#if GTK_CHECK_VERSION(2, 14, 0)
|
||||||
|
# if GTK_CHECK_VERSION(3, 22, 0)
|
||||||
|
n = gdk_display_get_n_monitors(desktop->display);
|
||||||
|
# else
|
||||||
n = gdk_screen_get_n_monitors(desktop->screen);
|
n = gdk_screen_get_n_monitors(desktop->screen);
|
||||||
|
# endif
|
||||||
for(i = 0; i < n; i++)
|
for(i = 0; i < n; i++)
|
||||||
{
|
{
|
||||||
snprintf(buf, sizeof(buf), _("Monitor %d"), i);
|
snprintf(buf, sizeof(buf), _("Monitor %d"), i);
|
||||||
|
# if GTK_CHECK_VERSION(3, 22, 0)
|
||||||
|
if((monitor = gdk_display_get_monitor(desktop->display, i))
|
||||||
|
== NULL)
|
||||||
|
continue;
|
||||||
|
manufacturer = gdk_monitor_get_manufacturer(monitor);
|
||||||
|
model = gdk_monitor_get_model(monitor);
|
||||||
|
if(manufacturer != NULL || model != NULL)
|
||||||
|
{
|
||||||
|
snprintf(buf2, sizeof(buf2), "%s%s%s",
|
||||||
|
(manufacturer != NULL)
|
||||||
|
? manufacturer : "",
|
||||||
|
(manufacturer != NULL && model != NULL)
|
||||||
|
? " " : "",
|
||||||
|
(model != NULL) ? model : "");
|
||||||
|
name = g_strdup(buf2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
name = NULL;
|
||||||
|
# else
|
||||||
name = gdk_screen_get_monitor_plug_name(desktop->screen, i);
|
name = gdk_screen_get_monitor_plug_name(desktop->screen, i);
|
||||||
|
# endif
|
||||||
# if GTK_CHECK_VERSION(2, 24, 0)
|
# if GTK_CHECK_VERSION(2, 24, 0)
|
||||||
gtk_combo_box_text_append_text(
|
gtk_combo_box_text_append_text(
|
||||||
GTK_COMBO_BOX_TEXT(desktop->pr_imonitor),
|
GTK_COMBO_BOX_TEXT(desktop->pr_imonitor),
|
||||||
|
|
Loading…
Reference in New Issue
Block a user