Port a lot of stuff from GdkScreen/monitor_number to GdkMonitor

including some fixes for getting pointer coords, and needed
API changes in libgimpwidgets.
This commit is contained in:
Michael Natterer
2018-04-29 17:27:47 +02:00
parent 7bd6734a04
commit 5ece7a8d1f
103 changed files with 462 additions and 685 deletions

View File

@ -204,9 +204,9 @@ gimp_pick_button_pick (GdkScreen *screen,
gint y_root,
GimpPickButton *button)
{
GimpRGB rgb;
GimpColorProfile *monitor_profile;
gint monitor;
GdkMonitor *monitor;
GimpRGB rgb;
#ifdef G_OS_WIN32
@ -276,8 +276,9 @@ gimp_pick_button_pick (GdkScreen *screen,
#endif
monitor = gdk_screen_get_monitor_at_point (screen, x_root, y_root);
monitor_profile = gimp_screen_get_color_profile (screen, monitor);
monitor = gdk_display_get_monitor_at_point (gdk_screen_get_display (screen),
x_root, y_root);
monitor_profile = gimp_monitor_get_color_profile (monitor);
if (monitor_profile)
{

View File

@ -359,11 +359,10 @@ gimp_label_set_attributes (GtkLabel *label,
pango_attr_list_unref (attrs);
}
gint
GdkMonitor *
gimp_widget_get_monitor (GtkWidget *widget)
{
GdkWindow *window;
GdkScreen *screen;
GtkAllocation allocation;
gint x, y;
@ -372,9 +371,7 @@ gimp_widget_get_monitor (GtkWidget *widget)
window = gtk_widget_get_window (widget);
if (! window)
return gimp_get_monitor_at_pointer (&screen);
screen = gtk_widget_get_screen (widget);
return gimp_get_monitor_at_pointer ();
gdk_window_get_origin (window, &x, &y);
gtk_widget_get_allocation (widget, &allocation);
@ -388,32 +385,31 @@ gimp_widget_get_monitor (GtkWidget *widget)
x += allocation.width / 2;
y += allocation.height / 2;
return gdk_screen_get_monitor_at_point (screen, x, y);
return gdk_display_get_monitor_at_point (gdk_display_get_default (), x, y);
}
gint
gimp_get_monitor_at_pointer (GdkScreen **screen)
GdkMonitor *
gimp_get_monitor_at_pointer (void)
{
GdkDeviceManager *device_manager;
GdkDevice *device;
gint x, y;
GdkDisplay *display;
GdkSeat *seat;
gint x, y;
g_return_val_if_fail (screen != NULL, 0);
display = gdk_display_get_default ();
seat = gdk_display_get_default_seat (display);
device_manager = gdk_display_get_device_manager (gdk_display_get_default ());
device = gdk_device_manager_get_client_pointer (device_manager);
gdk_device_get_position (gdk_seat_get_pointer (seat),
NULL, &x, &y);
gdk_device_get_position (device, screen, &x, &y);
return gdk_screen_get_monitor_at_point (*screen, x, y);
return gdk_display_get_monitor_at_point (display, x, y);
}
typedef void (* MonitorChangedCallback) (GtkWidget *, gpointer);
typedef struct
{
GtkWidget *widget;
gint monitor;
GtkWidget *widget;
GdkMonitor *monitor;
MonitorChangedCallback callback;
gpointer user_data;
@ -424,7 +420,7 @@ track_monitor_configure_event (GtkWidget *toplevel,
GdkEvent *event,
TrackMonitorData *track_data)
{
gint monitor = gimp_widget_get_monitor (toplevel);
GdkMonitor *monitor = gimp_widget_get_monitor (toplevel);
if (monitor != track_data->monitor)
{
@ -454,8 +450,8 @@ track_monitor_hierarchy_changed (GtkWidget *widget,
if (GTK_IS_WINDOW (toplevel))
{
GClosure *closure;
gint monitor;
GClosure *closure;
GdkMonitor *monitor;
closure = g_cclosure_new (G_CALLBACK (track_monitor_configure_event),
track_data, NULL);
@ -525,27 +521,41 @@ gimp_widget_track_monitor (GtkWidget *widget,
track_monitor_hierarchy_changed (widget, NULL, track_data);
}
static gint
monitor_number (GdkMonitor *monitor)
{
GdkDisplay *display = gdk_monitor_get_display (monitor);
gint n_monitors = gdk_display_get_n_monitors (display);
gint i;
for (i = 0; i < n_monitors; i++)
if (gdk_display_get_monitor (display, i) == monitor)
return i;
return 0;
}
/**
* gimp_screen_get_color_profile:
* @screen: a #GdkScreen
* @monitor: the monitor number
* gimp_monitor_get_color_profile:
* @monitor: a #GdkMonitor
*
* This function returns the #GimpColorProfile of monitor number @monitor
* of @screen, or %NULL if there is no profile configured.
* This function returns the #GimpColorProfile of @monitor
* or %NULL if there is no profile configured.
*
* Since: 2.10
* Since: 3.0
*
* Return value: the monitor's #GimpColorProfile, or %NULL.
**/
GimpColorProfile *
gimp_screen_get_color_profile (GdkScreen *screen,
gint monitor)
gimp_monitor_get_color_profile (GdkMonitor *monitor)
{
GdkDisplay *display;
GdkScreen *screen;
GimpColorProfile *profile = NULL;
g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
g_return_val_if_fail (monitor >= 0, NULL);
g_return_val_if_fail (monitor < gdk_screen_get_n_monitors (screen), NULL);
g_return_val_if_fail (GDK_IS_MONITOR (monitor), NULL);
display = gdk_monitor_get_display (monitor);
#if defined GDK_WINDOWING_X11
{
@ -556,10 +566,13 @@ gimp_screen_get_color_profile (GdkScreen *screen,
guchar *data = NULL;
if (monitor > 0)
atom_name = g_strdup_printf ("_ICC_PROFILE_%d", monitor);
atom_name = g_strdup_printf ("_ICC_PROFILE_%d",
monitor_number (monitor));
else
atom_name = g_strdup ("_ICC_PROFILE");
screen = gdk_display_get_default_screen (display);
if (gdk_property_get (gdk_screen_get_root_window (screen),
gdk_atom_intern (atom_name, FALSE),
GDK_NONE,
@ -639,23 +652,20 @@ gimp_screen_get_color_profile (GdkScreen *screen,
GimpColorProfile *
gimp_widget_get_color_profile (GtkWidget *widget)
{
GdkScreen *screen;
gint monitor;
GdkMonitor *monitor;
g_return_val_if_fail (widget == NULL || GTK_IS_WIDGET (widget), NULL);
if (widget)
{
screen = gtk_widget_get_screen (widget);
monitor = gimp_widget_get_monitor (widget);
}
else
{
screen = gdk_screen_get_default ();
monitor = 0;
monitor = gdk_display_get_monitor (gdk_display_get_default (), 0);
}
return gimp_screen_get_color_profile (screen, monitor);
return gimp_monitor_get_color_profile (monitor);
}
static GimpColorProfile *

View File

@ -51,15 +51,14 @@ GtkWidget * gimp_grid_attach_aligned (GtkGrid *grid,
void gimp_label_set_attributes (GtkLabel *label,
...);
gint gimp_widget_get_monitor (GtkWidget *widget);
gint gimp_get_monitor_at_pointer (GdkScreen **screen);
GdkMonitor * gimp_widget_get_monitor (GtkWidget *widget);
GdkMonitor * gimp_get_monitor_at_pointer (void);
void gimp_widget_track_monitor (GtkWidget *widget,
GCallback monitor_changed_callback,
gpointer user_data);
GimpColorProfile * gimp_screen_get_color_profile (GdkScreen *screen,
gint monitor);
GimpColorProfile * gimp_monitor_get_color_profile (GdkMonitor *monitor);
GimpColorProfile * gimp_widget_get_color_profile (GtkWidget *widget);
GimpColorTransform * gimp_widget_get_color_transform (GtkWidget *widget,