app: make sure GimpImageWindow notifies all its shells of monitor changes

Call gimp_color_managed_profile_changed() on all newly added shells,
and on all shells in GimpWindow::monitor_changed().
This commit is contained in:
Michael Natterer
2014-03-13 22:34:16 +01:00
parent f078cc5992
commit 8607486237

View File

@ -21,6 +21,7 @@
#include <gtk/gtk.h>
#include "libgimpmath/gimpmath.h"
#include "libgimpcolor/gimpcolor.h"
#include "libgimpwidgets/gimpwidgets.h"
#include "display-types.h"
@ -153,6 +154,11 @@ static gboolean gimp_image_window_window_state_event (GtkWidget *wid
GdkEventWindowState *event);
static void gimp_image_window_style_set (GtkWidget *widget,
GtkStyle *prev_style);
static void gimp_image_window_monitor_changed (GimpWindow *window,
GdkScreen *screen,
gint monitor);
static GList * gimp_image_window_get_docks (GimpDockContainer *dock_container);
static GimpUIManager *
gimp_image_window_dock_container_get_ui_manager
@ -245,8 +251,9 @@ static const gchar image_window_rc_style[] =
static void
gimp_image_window_class_init (GimpImageWindowClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
GimpWindowClass *window_class = GIMP_WINDOW_CLASS (klass);
object_class->constructed = gimp_image_window_constructed;
object_class->dispose = gimp_image_window_dispose;
@ -259,6 +266,8 @@ gimp_image_window_class_init (GimpImageWindowClass *klass)
widget_class->window_state_event = gimp_image_window_window_state_event;
widget_class->style_set = gimp_image_window_style_set;
window_class->monitor_changed = gimp_image_window_monitor_changed;
g_object_class_install_property (object_class, PROP_GIMP,
g_param_spec_object ("gimp",
NULL, NULL,
@ -709,6 +718,21 @@ gimp_image_window_style_set (GtkWidget *widget,
gimp_dialog_factory_set_has_min_size (GTK_WINDOW (widget), TRUE);
}
static void
gimp_image_window_monitor_changed (GimpWindow *window,
GdkScreen *screen,
gint monitor)
{
GimpImageWindowPrivate *private = GIMP_IMAGE_WINDOW_GET_PRIVATE (window);
GList *list;
for (list = private->shells; list; list = g_list_next (list))
{
/* make it fetch the right monitor profile */
gimp_color_managed_profile_changed (GIMP_COLOR_MANAGED (list->data));
}
}
static GList *
gimp_image_window_get_docks (GimpDockContainer *dock_container)
{
@ -1072,6 +1096,9 @@ gimp_image_window_add_shell (GimpImageWindow *window,
GTK_WIDGET (shell), TRUE);
gtk_widget_show (GTK_WIDGET (shell));
/* make it fetch the right monitor profile */
gimp_color_managed_profile_changed (GIMP_COLOR_MANAGED (shell));
}
GimpDisplayShell *