diff options
author | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2021-11-09 20:41:46 -0300 |
---|---|---|
committer | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2021-12-14 22:34:21 -0300 |
commit | d00cc3929edbc689afffa0b7f1fc676ed819855a (patch) | |
tree | 5e5bb97be63acc237b35fe732a126c6fd540aff9 | |
parent | d9d670328b9ce527851773586131a0c9f96582cd (diff) | |
download | gnome-control-center-d00cc3929edbc689afffa0b7f1fc676ed819855a.tar.gz |
[WIP] color: Port to GTK4
This is very rough still. The calibration code
is entirely untested.
-rw-r--r-- | meson.build | 1 | ||||
-rw-r--r-- | panels/color/cc-color-calibrate.c | 33 | ||||
-rw-r--r-- | panels/color/cc-color-calibrate.ui | 87 | ||||
-rw-r--r-- | panels/color/cc-color-cell-renderer-text.c | 20 | ||||
-rw-r--r-- | panels/color/cc-color-device.c | 33 | ||||
-rw-r--r-- | panels/color/cc-color-panel.c | 260 | ||||
-rw-r--r-- | panels/color/cc-color-panel.ui | 1093 | ||||
-rw-r--r-- | panels/color/cc-color-profile.c | 16 | ||||
-rw-r--r-- | panels/color/meson.build | 4 | ||||
-rw-r--r-- | panels/meson.build | 2 | ||||
-rw-r--r-- | shell/cc-panel-loader.c | 4 |
11 files changed, 568 insertions, 985 deletions
diff --git a/meson.build b/meson.build index af30e4ec3..5075eacfc 100644 --- a/meson.build +++ b/meson.build @@ -115,6 +115,7 @@ gio_dep = dependency('gio-2.0') glib_dep = dependency('glib-2.0', version: '>= 2.68.0') gnome_desktop_dep = dependency('gnome-desktop-4') gnome_bg_dep = dependency('gnome-bg-4') +gnome_rr_dep = dependency('gnome-rr-4') gnome_settings_dep = dependency('gnome-settings-daemon', version: '>= 3.27.90') goa_dep = dependency('goa-1.0', version: goa_req_version) gsettings_desktop_dep = dependency('gsettings-desktop-schemas', version: '>= 40.alpha') diff --git a/panels/color/cc-color-calibrate.c b/panels/color/cc-color-calibrate.c index 3f53858df..ac464a8f4 100644 --- a/panels/color/cc-color-calibrate.c +++ b/panels/color/cc-color-calibrate.c @@ -29,7 +29,7 @@ #include <colord-session/cd-session.h> #define GNOME_DESKTOP_USE_UNSTABLE_API -#include <libgnome-desktop/gnome-rr.h> +#include <gnome-rr/gnome-rr.h> #include "cc-color-calibrate.h" @@ -170,7 +170,7 @@ cc_color_calibrate_calib_setup_screen (CcColorCalibrate *calibrate, gboolean ret = TRUE; /* get screen */ - calibrate->x11_screen = gnome_rr_screen_new (gdk_screen_get_default (), error); + calibrate->x11_screen = gnome_rr_screen_new (gdk_display_get_default (), error); if (calibrate->x11_screen == NULL) { ret = FALSE; @@ -608,25 +608,28 @@ cc_color_calibrate_move_and_resize_window (GtkWindow *window, CdDevice *device, GError **error) { + g_autoptr(GListModel) monitors = NULL; + g_autoptr(GdkMonitor) monitor = NULL; const gchar *xrandr_name; gboolean ret = TRUE; GdkRectangle rect; GdkDisplay *display; - GdkMonitor *monitor; gint i; gint monitor_num = -1; gint num_monitors; /* find the monitor num of the device output */ display = gdk_display_get_default (); - num_monitors = gdk_display_get_n_monitors (display); + monitors = gdk_display_get_monitors (display); + num_monitors = g_list_model_get_n_items (monitors); xrandr_name = cd_device_get_metadata_item (device, CD_DEVICE_METADATA_XRANDR_NAME); for (i = 0; i < num_monitors; i++) { + g_autoptr(GdkMonitor) m = NULL; const gchar *plug_name; - monitor = gdk_display_get_monitor (display, i); - plug_name = gdk_monitor_get_model (monitor); + m = g_list_model_get_item (monitors, i); + plug_name = gdk_monitor_get_model (m); if (g_strcmp0 (plug_name, xrandr_name) == 0) monitor_num = i; @@ -643,16 +646,14 @@ cc_color_calibrate_move_and_resize_window (GtkWindow *window, } /* move the window, and set it to the right size */ - monitor = gdk_display_get_monitor (display, monitor_num); + monitor = g_list_model_get_item (monitors, monitor_num); gdk_monitor_get_geometry (monitor, &rect); - gtk_window_move (window, rect.x, rect.y); - gtk_window_resize (window, rect.width, rect.height); g_debug ("Setting window to %ix%i with size %ix%i", rect.x, rect.y, rect.width, rect.height); out: return ret; } - +#if 0 static void cc_color_calibrate_window_realize_cb (CcColorCalibrate *self) { @@ -690,6 +691,7 @@ cc_color_calibrate_window_state_cb (CcColorCalibrate *calibrate, g_warning ("Failed to resize window: %s", error->message); return TRUE; } +#endif static void cc_color_calibrate_button_done_cb (CcColorCalibrate *calibrate) @@ -730,6 +732,7 @@ cc_color_calibrate_button_cancel_cb (CcColorCalibrate *calibrate) cc_color_calibrate_cancel (calibrate); } +#if 0 static gboolean cc_color_calibrate_alpha_window_draw (CcColorCalibrate *calibrate, cairo_t *cr) { @@ -769,6 +772,7 @@ cc_color_calibrate_alpha_screen_changed_cb (CcColorCalibrate *calibrate) visual = gdk_screen_get_system_visual (screen); gtk_widget_set_visual (GTK_WIDGET (window), visual); } +#endif static void cc_color_calibrate_uninhibit (CcColorCalibrate *calibrate) @@ -998,7 +1002,7 @@ cc_color_calibrate_finalize (GObject *object) { CcColorCalibrate *calibrate = CC_COLOR_CALIBRATE (object); - g_clear_pointer ((GtkWidget **)&calibrate->window, gtk_widget_destroy); + g_clear_pointer (&calibrate->window, gtk_window_destroy); g_clear_object (&calibrate->builder); g_clear_object (&calibrate->device); g_clear_object (&calibrate->proxy_helper); @@ -1044,8 +1048,7 @@ cc_color_calibrate_init (CcColorCalibrate *calibrate) "vbox_status")); calibrate->sample_widget = cd_sample_widget_new (); gtk_widget_set_size_request (calibrate->sample_widget, 400, 400); - gtk_box_pack_start (box, calibrate->sample_widget, FALSE, FALSE, 0); - gtk_box_reorder_child (box, calibrate->sample_widget, 0); + gtk_box_prepend (box, calibrate->sample_widget); gtk_widget_set_vexpand (calibrate->sample_widget, FALSE); gtk_widget_set_hexpand (calibrate->sample_widget, FALSE); @@ -1076,6 +1079,7 @@ cc_color_calibrate_init (CcColorCalibrate *calibrate) /* setup the specialist calibration window */ window = GTK_WINDOW (gtk_builder_get_object (calibrate->builder, "dialog_calibrate")); + /* g_signal_connect_object (window, "draw", G_CALLBACK (cc_color_calibrate_alpha_window_draw), calibrate, G_CONNECT_SWAPPED); g_signal_connect_object (window, "realize", @@ -1084,11 +1088,10 @@ cc_color_calibrate_init (CcColorCalibrate *calibrate) G_CALLBACK (cc_color_calibrate_window_state_cb), calibrate, G_CONNECT_SWAPPED); g_signal_connect_object (window, "delete-event", G_CALLBACK (cc_color_calibrate_delete_event_cb), calibrate, G_CONNECT_SWAPPED); - gtk_widget_set_app_paintable (GTK_WIDGET (window), TRUE); - gtk_window_set_keep_above (window, TRUE); cc_color_calibrate_alpha_screen_changed_cb (calibrate); g_signal_connect_object (window, "screen-changed", G_CALLBACK (cc_color_calibrate_alpha_screen_changed_cb), calibrate, G_CONNECT_SWAPPED); + */ calibrate->window = window; } diff --git a/panels/color/cc-color-calibrate.ui b/panels/color/cc-color-calibrate.ui index 1d98b0b8e..44f67e708 100644 --- a/panels/color/cc-color-calibrate.ui +++ b/panels/color/cc-color-calibrate.ui @@ -2,114 +2,65 @@ <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkDialog" id="dialog_calibrate"> - <property name="can_focus">False</property> - <property name="border_width">12</property> + <property name="margin_top">32</property> + <property name="margin_bottom">32</property> + <property name="margin_start">12</property> + <property name="margin_end">12</property> <property name="title" translatable="yes">Display Calibration</property> - <property name="hide_titlebar_when_maximized">True</property> - <property name="type_hint">dialog</property> <property name="deletable">False</property> <style> <class name="osd"/> </style> - <child internal-child="vbox"> + <child> <object class="GtkBox" id="dialog-vbox4"> - <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">12</property> <child internal-child="action_area"> - <object class="GtkButtonBox" id="dialog-action_area1"> - <property name="can_focus">False</property> - <property name="layout_style">end</property> + <object class="GtkBox" id="dialog-action_area1"> <child> <object class="GtkButton" id="button_cancel"> <property name="label" translatable="yes">_Cancel</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> <property name="use_underline">True</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - <property name="secondary">True</property> - </packing> </child> <child> <object class="GtkButton" id="button_start"> <property name="label" translatable="yes" comments="This starts the calibration process">_Start</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> <property name="use_underline">True</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> </child> <child> <object class="GtkButton" id="button_resume"> <property name="label" translatable="yes" comments="This resumes the calibration process">_Resume</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> <property name="use_underline">True</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> </child> <child> <object class="GtkButton" id="button_done"> <property name="label" translatable="yes" comments="This button returns the user back to the color control panel">_Done</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> <property name="use_underline">True</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">3</property> - </packing> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="pack_type">end</property> - <property name="position">0</property> - </packing> </child> <child> <object class="GtkBox" id="vbox_status"> - <property name="visible">True</property> - <property name="can_focus">False</property> <property name="halign">center</property> <property name="valign">center</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> <property name="orientation">vertical</property> <property name="spacing">15</property> <child> <object class="GtkImage" id="image_status"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="yalign">1</property> + <property name="valign">end</property> <property name="pixel_size">192</property> <property name="icon_name">address-book-new</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> </child> <child> <object class="GtkLabel" id="label_status"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="yalign">0</property> + <property name="valign">start</property> <property name="label">Do not disturb the calibration device while in progress</property> <property name="justify">center</property> <property name="wrap">True</property> @@ -118,30 +69,12 @@ <attribute name="foreground" value="#ffffffffffff"/> </attributes> </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> </child> <child> <object class="GtkProgressBar" id="progressbar_status"> - <property name="visible">True</property> - <property name="can_focus">False</property> </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="padding">25</property> - <property name="position">2</property> - </packing> </child> </object> - <packing> - <property name="expand">True</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> </child> </object> </child> diff --git a/panels/color/cc-color-cell-renderer-text.c b/panels/color/cc-color-cell-renderer-text.c index 8e64ecfe7..5803ac548 100644 --- a/panels/color/cc-color-cell-renderer-text.c +++ b/panels/color/cc-color-cell-renderer-text.c @@ -77,12 +77,12 @@ cc_color_cell_renderer_text_set_property (GObject *object, guint param_id, } static void -cc_color_cell_renderer_render (GtkCellRenderer *cell, - cairo_t *cr, - GtkWidget *widget, - const GdkRectangle *background_area, - const GdkRectangle *cell_area, - GtkCellRendererState flags) +cc_color_cell_renderer_snapshot (GtkCellRenderer *cell, + GtkSnapshot *snapshot, + GtkWidget *widget, + const GdkRectangle *background_area, + const GdkRectangle *cell_area, + GtkCellRendererState flags) { CcColorCellRendererText *renderer; GtkStyleContext *context; @@ -94,9 +94,9 @@ cc_color_cell_renderer_render (GtkCellRenderer *cell, gtk_style_context_add_class (context, "dim-label"); else gtk_style_context_remove_class (context, "dim-label"); - GTK_CELL_RENDERER_CLASS (parent_class)->render (cell, cr, widget, - background_area, - cell_area, flags); + GTK_CELL_RENDERER_CLASS (parent_class)->snapshot (cell, snapshot, widget, + background_area, + cell_area, flags); gtk_style_context_restore (context); } @@ -105,7 +105,7 @@ cc_color_cell_renderer_text_class_init (CcColorCellRendererTextClass *class) { GObjectClass *object_class = G_OBJECT_CLASS (class); GtkCellRendererClass *object_class_gcr = GTK_CELL_RENDERER_CLASS (class); - object_class_gcr->render = cc_color_cell_renderer_render; + object_class_gcr->snapshot = cc_color_cell_renderer_snapshot; parent_class = g_type_class_peek_parent (class); diff --git a/panels/color/cc-color-device.c b/panels/color/cc-color-device.c index a49eaadf9..fbb74d88a 100644 --- a/panels/color/cc-color-device.c +++ b/panels/color/cc-color-device.c @@ -63,7 +63,6 @@ cc_color_device_refresh (CcColorDevice *color_device) { g_autofree gchar *title = NULL; g_autoptr(GPtrArray) profiles = NULL; - AtkObject *accessible; g_autofree gchar *name1 = NULL; g_autofree gchar *name2 = NULL; @@ -79,20 +78,21 @@ cc_color_device_refresh (CcColorDevice *color_device) gtk_widget_set_visible (color_device->widget_switch, profiles->len > 0); gtk_widget_set_visible (color_device->widget_button, profiles->len > 0); gtk_image_set_from_icon_name (GTK_IMAGE (color_device->widget_arrow), - color_device->expanded ? "pan-down-symbolic" : "pan-end-symbolic", - GTK_ICON_SIZE_BUTTON); + color_device->expanded ? "pan-down-symbolic" : "pan-end-symbolic"); gtk_widget_set_visible (color_device->widget_nocalib, profiles->len == 0); gtk_widget_set_sensitive (color_device->widget_button, cd_device_get_enabled (color_device->device)); gtk_switch_set_active (GTK_SWITCH (color_device->widget_switch), cd_device_get_enabled (color_device->device)); - accessible = gtk_widget_get_accessible (color_device->widget_switch); name1 = g_strdup_printf (_("Enable color management for %s"), title); - atk_object_set_name (accessible, name1); + gtk_accessible_update_property (GTK_ACCESSIBLE (color_device->widget_switch), + GTK_ACCESSIBLE_PROPERTY_LABEL, name1, + -1); name2 = g_strdup_printf (_("Show color profiles for %s"), title); - accessible = gtk_widget_get_accessible (color_device->widget_button); - atk_object_set_name (accessible, name2); + gtk_accessible_update_property (GTK_ACCESSIBLE (color_device->widget_button), + GTK_ACCESSIBLE_PROPERTY_LABEL, name2, + -1); } CdDevice * @@ -263,41 +263,40 @@ cc_color_device_init (CcColorDevice *color_device) gtk_widget_set_margin_top (color_device->widget_description, 12); gtk_widget_set_margin_bottom (color_device->widget_description, 12); gtk_widget_set_halign (color_device->widget_description, GTK_ALIGN_START); + gtk_widget_set_hexpand (color_device->widget_description, TRUE); gtk_label_set_ellipsize (GTK_LABEL (color_device->widget_description), PANGO_ELLIPSIZE_END); gtk_label_set_xalign (GTK_LABEL (color_device->widget_description), 0); - gtk_box_pack_start (GTK_BOX (box), color_device->widget_description, TRUE, TRUE, 0); + gtk_box_append (GTK_BOX (box), color_device->widget_description); /* switch */ color_device->widget_switch = gtk_switch_new (); gtk_widget_set_valign (color_device->widget_switch, GTK_ALIGN_CENTER); - gtk_box_pack_start (GTK_BOX (box), color_device->widget_switch, FALSE, FALSE, 0); + gtk_box_append (GTK_BOX (box), color_device->widget_switch); /* arrow button */ - color_device->widget_arrow = gtk_image_new_from_icon_name ("pan-end-symbolic", - GTK_ICON_SIZE_BUTTON); + color_device->widget_arrow = gtk_image_new_from_icon_name ("pan-end-symbolic"); color_device->widget_button = gtk_button_new (); g_signal_connect_object (color_device->widget_button, "clicked", G_CALLBACK (cc_color_device_clicked_expander_cb), color_device, G_CONNECT_SWAPPED); gtk_widget_set_valign (color_device->widget_button, GTK_ALIGN_CENTER); - gtk_button_set_relief (GTK_BUTTON (color_device->widget_button), GTK_RELIEF_NONE); - gtk_container_add (GTK_CONTAINER (color_device->widget_button), color_device->widget_arrow); + gtk_widget_add_css_class (color_device->widget_button, "flat"); + gtk_button_set_child (GTK_BUTTON (color_device->widget_button), color_device->widget_arrow); gtk_widget_set_visible (color_device->widget_arrow, TRUE); gtk_widget_set_margin_top (color_device->widget_button, 9); gtk_widget_set_margin_bottom (color_device->widget_button, 9); gtk_widget_set_margin_end (color_device->widget_button, 12); - gtk_box_pack_start (GTK_BOX (box), color_device->widget_button, FALSE, FALSE, 0); + gtk_box_append (GTK_BOX (box), color_device->widget_button); /* not calibrated */ color_device->widget_nocalib = gtk_label_new (_("Not calibrated")); context = gtk_widget_get_style_context (color_device->widget_nocalib); gtk_style_context_add_class (context, "dim-label"); gtk_widget_set_margin_end (color_device->widget_nocalib, 18); - gtk_box_pack_start (GTK_BOX (box), color_device->widget_nocalib, FALSE, FALSE, 0); + gtk_box_append (GTK_BOX (box), color_device->widget_nocalib); /* refresh */ - gtk_container_add (GTK_CONTAINER (color_device), box); - gtk_widget_set_visible (box, TRUE); + gtk_list_box_row_set_child (GTK_LIST_BOX_ROW (color_device), box); } GtkWidget * diff --git a/panels/color/cc-color-panel.c b/panels/color/cc-color-panel.c index a2f90b093..c70d953c7 100644 --- a/panels/color/cc-color-panel.c +++ b/panels/color/cc-color-panel.c @@ -23,9 +23,8 @@ #include <glib/gi18n.h> #include <colord.h> #include <gtk/gtk.h> -#include <gdk/gdkx.h> +#include <gdk/x11/gdkx.h> -#include "list-box-helper.h" #include "cc-color-calibrate.h" #include "cc-color-cell-renderer-text.h" #include "cc-color-panel.h" @@ -54,20 +53,17 @@ struct _CcColorPanel GtkWidget *box_calib_temp; GtkWidget *box_calib_title; GtkWidget *box_devices; - GtkWidget *button_assign_cancel; GtkWidget *button_assign_import; GtkWidget *button_assign_ok; GtkWidget *button_calib_export; GtkWidget *dialog_assign; GtkWidget *entry_calib_title; - GtkWidget *frame_devices; GtkWidget *label_assign_warning; GtkWidget *label_calib_summary_message; GtkWidget *label_no_devices; GtkTreeModel *liststore_assign; GtkTreeModel *liststore_calib_kind; GtkTreeModel *liststore_calib_sensor; - GtkWidget *main_window; GtkWidget *toolbar_devices; GtkWidget *toolbutton_device_calibrate; GtkWidget *toolbutton_device_default; @@ -219,9 +215,62 @@ gcm_prefs_default_cb (CcColorPanel *prefs) error->message); } +typedef struct +{ + GtkResponseType response; + GMainLoop *mainloop; +} DialogRunData; + +static void +dialog_response_cb (GtkDialog *dialog, + GtkResponseType response, + DialogRunData *run_data) +{ + run_data->response = response; + g_main_loop_quit (run_data->mainloop); +} + +static gboolean +dialog_close_cb (GtkDialog *dialog, + GtkResponseType response, + DialogRunData *run_data) +{ + g_main_loop_quit (run_data->mainloop); + return GDK_EVENT_PROPAGATE; +} + +static GtkResponseType +run_dialog (GtkDialog *dialog) +{ + g_autoptr(GMainLoop) mainloop = NULL; + DialogRunData run_data; + guint response_id; + guint close_id; + + mainloop = g_main_loop_new (NULL, FALSE); + + run_data = (DialogRunData) { + .response = GTK_RESPONSE_DELETE_EVENT, + .mainloop = mainloop, + }; + + response_id = g_signal_connect (dialog, "response", G_CALLBACK (dialog_response_cb), &run_data); + close_id = g_signal_connect (dialog, "close-request", G_CALLBACK (dialog_close_cb), &run_data); + + gtk_window_present (GTK_WINDOW (dialog)); + + g_main_loop_run (mainloop); + + g_signal_handler_disconnect (dialog, response_id); + g_signal_handler_disconnect (dialog, close_id); + + return run_data.response; +} + static GFile * gcm_prefs_file_chooser_get_icc_profile (CcColorPanel *prefs) { + g_autoptr(GFile) current_folder = NULL; GtkWindow *window; GtkWidget *dialog; GFile *file = NULL; @@ -235,9 +284,9 @@ gcm_prefs_file_chooser_get_icc_profile (CcColorPanel *prefs) _("_Cancel"), GTK_RESPONSE_CANCEL, _("_Import"), GTK_RESPONSE_ACCEPT, NULL); - gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(dialog), g_get_home_dir ()); + current_folder = g_file_new_for_path (g_get_home_dir ()); + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(dialog), current_folder, NULL); gtk_file_chooser_set_create_folders (GTK_FILE_CHOOSER(dialog), FALSE); - gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER(dialog), FALSE); /* setup the filter */ filter = gtk_file_filter_new (); @@ -255,11 +304,11 @@ gcm_prefs_file_chooser_get_icc_profile (CcColorPanel *prefs) gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(dialog), filter); /* did user choose file */ - if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) + if (run_dialog (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER(dialog)); /* we're done */ - gtk_widget_destroy (dialog); + gtk_window_destroy (GTK_WINDOW (dialog)); /* or NULL for missing */ return file; @@ -334,14 +383,6 @@ gcm_prefs_calib_apply_cb (CcColorPanel *prefs) gtk_widget_hide (GTK_WIDGET (window)); } -static gboolean -gcm_prefs_calib_delete_event_cb (CcColorPanel *prefs) -{ - /* do not destroy the window */ - gcm_prefs_calib_cancel_cb (prefs); - return TRUE; -} - static void gcm_prefs_calib_temp_treeview_clicked_cb (CcColorPanel *prefs, GtkTreeSelection *selection) @@ -543,7 +584,7 @@ gcm_prefs_calibrate_display (CcColorPanel *prefs) tmp = cd_device_get_vendor (prefs->current_device); if (tmp == NULL) tmp = _("Screen"); - gtk_entry_set_text (GTK_ENTRY (prefs->entry_calib_title), tmp); + gtk_editable_set_text (GTK_EDITABLE (prefs->entry_calib_title), tmp); cc_color_calibrate_set_title (prefs->calibrate, tmp); /* set the display whitepoint to D65 by default */ @@ -551,7 +592,7 @@ gcm_prefs_calibrate_display (CcColorPanel *prefs) /* show ui */ gtk_window_set_transient_for (GTK_WINDOW (prefs->assistant_calib), - GTK_WINDOW (prefs->main_window)); + GTK_WINDOW (gtk_widget_get_native (GTK_WIDGET (prefs)))); gtk_widget_show (prefs->assistant_calib); } @@ -562,7 +603,7 @@ gcm_prefs_title_entry_changed_cb (CcColorPanel *prefs) const gchar *value; assistant = GTK_ASSISTANT (prefs->assistant_calib); - value = gtk_entry_get_text (GTK_ENTRY (prefs->entry_calib_title)); + value = gtk_editable_get_text (GTK_EDITABLE (prefs->entry_calib_title)); cc_color_calibrate_set_title (prefs->calibrate, value); gtk_assistant_set_page_complete (assistant, prefs->box_calib_title, value[0] != '\0'); } @@ -570,9 +611,11 @@ gcm_prefs_title_entry_changed_cb (CcColorPanel *prefs) static void gcm_prefs_calibrate_cb (CcColorPanel *prefs) { + GtkNative *native; + GdkSurface *surface; gboolean ret; g_autoptr(GError) error = NULL; - guint xid; + guint xid = 0; g_autoptr(GPtrArray) argv = NULL; /* use the new-style calibration helper */ @@ -583,7 +626,11 @@ gcm_prefs_calibrate_cb (CcColorPanel *prefs) } /* get xid */ - xid = gdk_x11_window_get_xid (gtk_widget_get_window (GTK_WIDGET (prefs->main_window))); + native = gtk_widget_get_native (GTK_WIDGET (prefs)); + surface = gtk_native_get_surface (native); + + if (GDK_IS_X11_SURFACE (surface)) + xid = gdk_x11_surface_get_xid (GDK_X11_SURFACE (surface)); /* run with modal set */ argv = g_ptr_array_new_with_free_func (g_free); @@ -792,17 +839,16 @@ gcm_prefs_calib_export_cb (CcColorPanel *prefs) /* TRANSLATORS: this is the dialog to save the ICC profile */ dialog = gtk_file_chooser_dialog_new (_("Save Profile"), - GTK_WINDOW (prefs->main_window), + GTK_WINDOW (gtk_widget_get_native (GTK_WIDGET (prefs))), GTK_FILE_CHOOSER_ACTION_SAVE, _("_Cancel"), GTK_RESPONSE_CANCEL, _("_Save"), GTK_RESPONSE_ACCEPT, NULL); - gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); default_name = g_strdup_printf ("%s.icc", cd_profile_get_title (profile)); gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), default_name); - if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) + if (run_dialog (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) { source = g_file_new_for_path (cd_profile_get_filename (profile)); destination = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog)); @@ -817,17 +863,16 @@ gcm_prefs_calib_export_cb (CcColorPanel *prefs) g_warning ("Failed to copy profile: %s", error->message); } - gtk_widget_destroy (dialog); + gtk_window_destroy (GTK_WINDOW (dialog)); } static void gcm_prefs_calib_export_link_cb (CcColorPanel *prefs, const gchar *url) { - gtk_show_uri_on_window (GTK_WINDOW (prefs->main_window), - "help:gnome-help/color-howtoimport", - GDK_CURRENT_TIME, - NULL); + gtk_show_uri (GTK_WINDOW (gtk_widget_get_native (GTK_WIDGET (prefs))), + "help:gnome-help/color-howtoimport", + GDK_CURRENT_TIME); } static void @@ -843,8 +888,10 @@ gcm_prefs_profile_add_cb (CcColorPanel *prefs) gtk_widget_set_sensitive (prefs->button_assign_ok, FALSE); /* show the dialog */ + gtk_window_set_transient_for (GTK_WINDOW (prefs->dialog_assign), + GTK_WINDOW (gtk_widget_get_native (GTK_WIDGET (prefs)))); + gtk_widget_show (prefs->dialog_assign); - gtk_window_set_transient_for (GTK_WINDOW (prefs->dialog_assign), GTK_WINDOW (prefs->main_window)); } static void @@ -930,13 +977,19 @@ gcm_prefs_device_profile_enable_cb (CcColorPanel *prefs) static void gcm_prefs_profile_view (CcColorPanel *prefs, CdProfile *profile) { + GtkNative *native; + GdkSurface *surface; g_autoptr(GPtrArray) argv = NULL; - guint xid; + guint xid = 0; gboolean ret; g_autoptr(GError) error = NULL; /* get xid */ - xid = gdk_x11_window_get_xid (gtk_widget_get_window (GTK_WIDGET (prefs->main_window))); + native = gtk_widget_get_native (GTK_WIDGET (prefs)); + surface = gtk_native_get_surface (native); + + if (GDK_IS_X11_SURFACE (surface)) + xid = gdk_x11_surface_get_xid (GDK_X11_SURFACE (surface)); /* open up gcm-viewer as a info pane */ argv = g_ptr_array_new_with_free_func (g_free); @@ -996,12 +1049,6 @@ gcm_prefs_profile_view_cb (CcColorPanel *prefs) } static void -gcm_prefs_button_assign_cancel_cb (CcColorPanel *prefs) -{ - gtk_widget_hide (prefs->dialog_assign); -} - -static void gcm_prefs_button_assign_ok_cb (CcColorPanel *prefs) { GtkTreeIter iter; @@ -1062,13 +1109,6 @@ gcm_prefs_button_assign_ok_cb (CcColorPanel *prefs) prefs); } -static gboolean -gcm_prefs_profile_delete_event_cb (CcColorPanel *prefs) -{ - gcm_prefs_button_assign_cancel_cb (prefs); - return TRUE; -} - static void gcm_prefs_add_profiles_columns (CcColorPanel *prefs, GtkTreeView *treeview) @@ -1088,7 +1128,6 @@ gcm_prefs_add_profiles_columns (CcColorPanel *prefs, /* image */ column = gtk_tree_view_column_new (); renderer = gtk_cell_renderer_pixbuf_new (); - g_object_set (renderer, "stock-size", GTK_ICON_SIZE_MENU, NULL); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_add_attribute (column, renderer, "icon-name", GCM_PREFS_COMBO_COLUMN_WARNING_FILENAME); @@ -1361,8 +1400,7 @@ gcm_prefs_add_device_profile (CcColorPanel *prefs, /* add to listbox */ widget = cc_color_profile_new (device, profile, is_default); - gtk_widget_show (widget); - gtk_container_add (GTK_CONTAINER (prefs->list_box), widget); + gtk_list_box_append (prefs->list_box, widget); gtk_size_group_add_widget (prefs->list_box_size, widget); } @@ -1438,37 +1476,47 @@ gcm_prefs_find_widget_by_object_path (GList *list, static void gcm_prefs_device_changed_cb (CcColorPanel *prefs, CdDevice *device) { + GtkWidget *child; CdDevice *device_tmp; CdProfile *profile_tmp; gboolean ret; - GList *l; g_autoptr(GList) list = NULL; GPtrArray *profiles; guint i; /* remove anything in the list view that's not in Device.Profiles */ profiles = cd_device_get_profiles (device); - list = gtk_container_get_children (GTK_CONTAINER (prefs->list_box)); - for (l = list; l != NULL; l = l->next) + child = gtk_widget_get_first_child (GTK_WIDGET (prefs->list_box)); + while (child) { - if (!CC_IS_COLOR_PROFILE (l->data)) - continue; + GtkWidget *next = gtk_widget_get_next_sibling (child); + + if (!CC_IS_COLOR_PROFILE (child)) + { + list = g_list_prepend (list, child); + goto next; + } /* correct device ? */ - device_tmp = cc_color_profile_get_device (CC_COLOR_PROFILE (l->data)); + device_tmp = cc_color_profile_get_device (CC_COLOR_PROFILE (child)); if (g_strcmp0 (cd_device_get_id (device), cd_device_get_id (device_tmp)) != 0) - continue; + { + list = g_list_prepend (list, child); + goto next; + } /* if profile is not in Device.Profiles then remove */ - profile_tmp = cc_color_profile_get_profile (CC_COLOR_PROFILE (l->data)); + profile_tmp = cc_color_profile_get_profile (CC_COLOR_PROFILE (child)); ret = gcm_prefs_find_profile_by_object_path (profiles, cd_profile_get_object_path (profile_tmp)); - if (!ret) { - gtk_widget_destroy (GTK_WIDGET (l->data)); - /* Don't look at the destroyed widget below */ - l->data = NULL; - } + if (!ret) + gtk_list_box_remove (prefs->list_box, child); + else + list = g_list_prepend (list, child); + +next: + child = next; } /* add anything in Device.Profiles that's not in the list view */ @@ -1498,20 +1546,20 @@ gcm_prefs_device_expanded_changed_cb (CcColorPanel *prefs, g_free (prefs->list_box_filter); if (is_expanded) { - g_autoptr(GList) list = NULL; - GList *l; + GtkWidget *child; prefs->list_box_filter = g_strdup (cd_device_get_id (cc_color_device_get_device (widget))); /* unexpand other device widgets */ - list = gtk_container_get_children (GTK_CONTAINER (prefs->list_box)); prefs->model_is_changing = TRUE; - for (l = list; l != NULL; l = l->next) + for (child = gtk_widget_get_first_child (GTK_WIDGET (prefs->list_box)); + child != NULL; + child = gtk_widget_get_next_sibling (child)) { - if (!CC_IS_COLOR_DEVICE (l->data)) + if (!CC_IS_COLOR_DEVICE (child)) continue; - if (l->data != widget) - cc_color_device_set_expanded (CC_COLOR_DEVICE (l->data), FALSE); + if (CC_COLOR_DEVICE (child) != widget) + cc_color_device_set_expanded (CC_COLOR_DEVICE (child), FALSE); } prefs->model_is_changing = FALSE; } @@ -1541,8 +1589,7 @@ gcm_prefs_add_device (CcColorPanel *prefs, CdDevice *device) widget = cc_color_device_new (device); g_signal_connect_object (widget, "expanded-changed", G_CALLBACK (gcm_prefs_device_expanded_changed_cb), prefs, G_CONNECT_SWAPPED); - gtk_widget_show (widget); - gtk_container_add (GTK_CONTAINER (prefs->list_box), widget); + gtk_list_box_append (prefs->list_box, widget); gtk_size_group_add_widget (prefs->list_box_size, widget); /* add profiles */ @@ -1558,22 +1605,25 @@ gcm_prefs_add_device (CcColorPanel *prefs, CdDevice *device) static void gcm_prefs_remove_device (CcColorPanel *prefs, CdDevice *device) { + GtkWidget *child; CdDevice *device_tmp; - GList *l; - g_autoptr(GList) list = NULL; - list = gtk_container_get_children (GTK_CONTAINER (prefs->list_box)); - for (l = list; l != NULL; l = l->next) + child = gtk_widget_get_first_child (GTK_WIDGET (prefs->list_box)); + while (child) { - if (CC_IS_COLOR_DEVICE (l->data)) - device_tmp = cc_color_device_get_device (CC_COLOR_DEVICE (l->data)); + GtkWidget *next = gtk_widget_get_next_sibling (child); + + if (CC_IS_COLOR_DEVICE (child)) + device_tmp = cc_color_device_get_device (CC_COLOR_DEVICE (child)); else - device_tmp = cc_color_profile_get_device (CC_COLOR_PROFILE (l->data)); + device_tmp = cc_color_profile_get_device (CC_COLOR_PROFILE (child)); if (g_strcmp0 (cd_device_get_object_path (device), cd_device_get_object_path (device_tmp)) == 0) { - gtk_widget_destroy (GTK_WIDGET (l->data)); + gtk_list_box_remove (prefs->list_box, child); } + + child = next; } g_signal_handlers_disconnect_by_func (device, G_CALLBACK (gcm_prefs_device_changed_cb), @@ -1584,18 +1634,16 @@ gcm_prefs_remove_device (CcColorPanel *prefs, CdDevice *device) static void gcm_prefs_update_device_list_extra_entry (CcColorPanel *prefs) { - g_autoptr(GList) device_widgets = NULL; - guint number_of_devices; + GtkListBoxRow *first_row; /* any devices to show? */ - device_widgets = gtk_container_get_children (GTK_CONTAINER (prefs->list_box)); - number_of_devices = g_list_length (device_widgets); - gtk_widget_set_visible (prefs->label_no_devices, number_of_devices == 0); - gtk_widget_set_visible (prefs->box_devices, number_of_devices > 0); + first_row = gtk_list_box_get_row_at_index (prefs->list_box, 0); + gtk_widget_set_visible (prefs->label_no_devices, first_row == NULL); + gtk_widget_set_visible (prefs->box_devices, first_row != NULL); /* if we have only one device expand it by default */ - if (number_of_devices == 1) - cc_color_device_set_expanded (CC_COLOR_DEVICE (device_widgets->data), TRUE); + if (gtk_list_box_get_row_at_index (prefs->list_box, 1) == NULL) + cc_color_device_set_expanded (CC_COLOR_DEVICE (first_row), TRUE); } static void @@ -1776,12 +1824,6 @@ gcm_prefs_is_livecd (void) #endif } -static void -gcm_prefs_window_realize_cb (CcColorPanel *prefs) -{ - prefs->main_window = gtk_widget_get_toplevel (GTK_WIDGET (prefs)); -} - static const char * cc_color_panel_get_help_uri (CcPanel *panel) { @@ -1828,7 +1870,7 @@ cc_color_panel_dispose (GObject *object) g_clear_object (&prefs->list_box_size); g_clear_pointer (&prefs->sensors, g_ptr_array_unref); g_clear_pointer (&prefs->list_box_filter, g_free); - g_clear_pointer (&prefs->dialog_assign, gtk_widget_destroy); + g_clear_pointer ((GtkWindow **)&prefs->dialog_assign, gtk_window_destroy); G_OBJECT_CLASS (cc_color_panel_parent_class)->dispose (object); } @@ -1864,16 +1906,15 @@ cc_color_panel_class_init (CcColorPanelClass *klass) gtk_widget_class_bind_template_child (widget_class, CcColorPanel, box_calib_temp); gtk_widget_class_bind_template_child (widget_class, CcColorPanel, box_calib_title); gtk_widget_class_bind_template_child (widget_class, CcColorPanel, box_devices); - gtk_widget_class_bind_template_child (widget_class, CcColorPanel, button_assign_cancel); gtk_widget_class_bind_template_child (widget_class, CcColorPanel, button_assign_import); gtk_widget_class_bind_template_child (widget_class, CcColorPanel, button_assign_ok); gtk_widget_class_bind_template_child (widget_class, CcColorPanel, button_calib_export); gtk_widget_class_bind_template_child (widget_class, CcColorPanel, dialog_assign); gtk_widget_class_bind_template_child (widget_class, CcColorPanel, entry_calib_title); - gtk_widget_class_bind_template_child (widget_class, CcColorPanel, frame_devices); gtk_widget_class_bind_template_child (widget_class, CcColorPanel, label_assign_warning); gtk_widget_class_bind_template_child (widget_class, CcColorPanel, label_calib_summary_message); gtk_widget_class_bind_template_child (widget_class, CcColorPanel, label_no_devices); + gtk_widget_class_bind_template_child (widget_class, CcColorPanel, list_box); gtk_widget_class_bind_template_child (widget_class, CcColorPanel, liststore_assign); gtk_widget_class_bind_template_child (widget_class, CcColorPanel, liststore_calib_kind); gtk_widget_class_bind_template_child (widget_class, CcColorPanel, liststore_calib_sensor); @@ -1948,7 +1989,6 @@ static void cc_color_panel_init (CcColorPanel *prefs) { GtkCellRenderer *renderer; - GtkStyleContext *context; GtkTreeModel *model; GtkTreeModel *model_filter; GtkTreeSelection *selection; @@ -1997,16 +2037,7 @@ cc_color_panel_init (CcColorPanel *prefs) g_signal_connect_object (prefs->toolbutton_device_calibrate, "clicked", G_CALLBACK (gcm_prefs_calibrate_cb), prefs, G_CONNECT_SWAPPED); - context = gtk_widget_get_style_context (prefs->toolbar_devices); - gtk_style_context_add_class (context, GTK_STYLE_CLASS_INLINE_TOOLBAR); - gtk_style_context_set_junction_sides (context, GTK_JUNCTION_TOP); - /* set up assign dialog */ - g_signal_connect_object (prefs->dialog_assign, "delete-event", - G_CALLBACK (gcm_prefs_profile_delete_event_cb), prefs, G_CONNECT_SWAPPED); - - g_signal_connect_object (prefs->button_assign_cancel, "clicked", - G_CALLBACK (gcm_prefs_button_assign_cancel_cb), prefs, G_CONNECT_SWAPPED); g_signal_connect_object (prefs->button_assign_ok, "clicked", G_CALLBACK (gcm_prefs_button_assign_ok_cb), prefs, G_CONNECT_SWAPPED); @@ -2015,9 +2046,6 @@ cc_color_panel_init (CcColorPanel *prefs) G_CALLBACK (gcm_prefs_button_assign_import_cb), prefs, G_CONNECT_SWAPPED); /* setup the calibration helper */ - g_signal_connect_object (prefs->assistant_calib, "delete-event", - G_CALLBACK (gcm_prefs_calib_delete_event_cb), - prefs, G_CONNECT_SWAPPED); g_signal_connect_object (prefs->assistant_calib, "apply", G_CALLBACK (gcm_prefs_calib_apply_cb), prefs, G_CONNECT_SWAPPED); @@ -2133,7 +2161,6 @@ cc_color_panel_init (CcColorPanel *prefs) G_CALLBACK (gcm_prefs_device_removed_cb), prefs, 0); /* use a listbox for the main UI */ - prefs->list_box = GTK_LIST_BOX (gtk_list_box_new ()); gtk_list_box_set_filter_func (prefs->list_box, cc_color_panel_filter_func, prefs, @@ -2142,12 +2169,6 @@ cc_color_panel_init (CcColorPanel *prefs) cc_color_panel_sort_func, prefs, NULL); - gtk_list_box_set_header_func (prefs->list_box, - cc_list_box_update_header_func, - prefs, NULL); - gtk_list_box_set_selection_mode (prefs->list_box, - GTK_SELECTION_SINGLE); - gtk_list_box_set_activate_on_single_click (prefs->list_box, FALSE); g_signal_connect_object (prefs->list_box, "row-selected", G_CALLBACK (gcm_prefs_list_box_row_selected_cb), prefs, G_CONNECT_SWAPPED); @@ -2156,9 +2177,6 @@ cc_color_panel_init (CcColorPanel *prefs) prefs, G_CONNECT_SWAPPED); prefs->list_box_size = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL); - gtk_container_add (GTK_CONTAINER (prefs->frame_devices), GTK_WIDGET (prefs->list_box)); - gtk_widget_show (GTK_WIDGET (prefs->list_box)); - /* connect to colord */ cd_client_connect (prefs->client, cc_panel_get_cancellable (CC_PANEL (prefs)), @@ -2183,8 +2201,4 @@ cc_color_panel_init (CcColorPanel *prefs) G_CALLBACK (gcm_prefs_calib_export_cb), prefs, G_CONNECT_SWAPPED); g_signal_connect_object (prefs->label_calib_summary_message, "activate-link", G_CALLBACK (gcm_prefs_calib_export_link_cb), prefs, G_CONNECT_SWAPPED); - - g_signal_connect (prefs, "realize", - G_CALLBACK (gcm_prefs_window_realize_cb), - NULL); } diff --git a/panels/color/cc-color-panel.ui b/panels/color/cc-color-panel.ui index f1924d599..ad990ec59 100644 --- a/panels/color/cc-color-panel.ui +++ b/panels/color/cc-color-panel.ui @@ -2,893 +2,531 @@ <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkAssistant" id="assistant_calib"> - <property name="can_focus">False</property> <property name="title" translatable="yes">Screen Calibration</property> <property name="resizable">False</property> <property name="modal">True</property> - <property name="window_position">center-on-parent</property> <property name="destroy_with_parent">True</property> + <property name="hide-on-close">True</property> + <child> - <object class="GtkBox" id="box_calib_quality"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="orientation">vertical</property> - <property name="spacing">9</property> - <child> - <object class="GtkLabel" id="label_calib_quality_message"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="xpad">6</property> - <property name="label" translatable="yes">Calibration will produce a profile that you can use to color manage your screen. The longer you spend on calibration, the better the quality of the color profile.</property> - <property name="wrap">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label_calib_quality_message2"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="xpad">6</property> - <property name="label" translatable="yes">You will not be able to use your computer while calibration takes place.</property> - <property name="wrap">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkBox" id="box_label_calib_quality_header"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="margin_top">12</property> + <object class="GtkAssistantPage"> + <property name="title" translatable="yes">Calibration Quality</property> + <property name="complete">True</property> + <property name="child"> + <object class="GtkBox" id="box_calib_quality"> + <property name="orientation">vertical</property> + <property name="spacing">9</property> <child> - <object class="GtkLabel" id="label_calib_quality_header"> - <property name="visible">True</property> - <property name="can_focus">False</property> + <object class="GtkLabel" id="label_calib_quality_message"> <property name="xalign">0</property> - <property name="xpad">6</property> - <property name="label" translatable="yes" comments="This is the approximate time it takes to calibrate the display.">Quality</property> - <style> - <class name="dim-label"/> - </style> + <property name="label" translatable="yes">Calibration will produce a profile that you can use to color manage your screen. The longer you spend on calibration, the better the quality of the color profile.</property> + <property name="wrap">True</property> </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> </child> <child> - <object class="GtkLabel" id="label_calib_quality_approx_time"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">1</property> - <property name="xpad">6</property> - <property name="label" translatable="yes" comments="This is the approximate time it takes to calibrate the display.">Approximate Time</property> - <style> - <class name="dim-label"/> - </style> + <object class="GtkLabel" id="label_calib_quality_message2"> + <property name="xalign">0</property> + <property name="label" translatable="yes">You will not be able to use your computer while calibration takes place.</property> + <property name="wrap">True</property> </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow_calib_quality"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">never</property> - <property name="vscrollbar_policy">never</property> - <property name="shadow_type">in</property> <child> - <object class="GtkTreeView" id="treeview_calib_quality"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="model">liststore_calib_quality</property> - <property name="headers_visible">False</property> - <property name="search_column">0</property> - <child internal-child="selection"> - <object class="GtkTreeSelection" id="treeview-selection3"/> + <object class="GtkBox" id="box_label_calib_quality_header"> + <property name="margin_top">12</property> + <child> + <object class="GtkLabel" id="label_calib_quality_header"> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes" comments="This is the approximate time it takes to calibrate the display.">Quality</property> + <style> + <class name="dim-label"/> + </style> + </object> + </child> + <child> + <object class="GtkLabel" id="label_calib_quality_approx_time"> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="xalign">1</property> + <property name="label" translatable="yes" comments="This is the approximate time it takes to calibrate the display.">Approximate Time</property> + <style> + <class name="dim-label"/> + </style> + </object> + </child> + </object> + </child> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow_calib_quality"> + <property name="hscrollbar_policy">never</property> + <property name="vscrollbar_policy">never</property> + <child> + <object class="GtkTreeView" id="treeview_calib_quality"> + <property name="model">liststore_calib_quality</property> + <property name="headers_visible">False</property> + <property name="search_column">0</property> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection3"/> + </child> + </object> </child> </object> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">3</property> - </packing> - </child> + </property> </object> - <packing> - <property name="title" translatable="yes">Calibration Quality</property> - <property name="complete">True</property> - </packing> </child> + <child> - <object class="GtkBox" id="box_calib_sensor"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="orientation">vertical</property> - <property name="spacing">9</property> - <child> - <object class="GtkLabel" id="label_calib_sensor_message"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="xpad">6</property> - <property name="label" translatable="yes">Select the sensor device you want to use for calibration.</property> - <property name="wrap">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow_calib_sensor"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">never</property> - <property name="vscrollbar_policy">never</property> - <property name="shadow_type">in</property> + <object class="GtkAssistantPage"> + <property name="title" translatable="yes">Calibration Device</property> + <property name="child"> + <object class="GtkBox" id="box_calib_sensor"> + <property name="orientation">vertical</property> + <property name="spacing">9</property> <child> - <object class="GtkTreeView" id="treeview_calib_sensor"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="model">liststore_calib_sensor</property> - <property name="headers_visible">False</property> - <property name="search_column">1</property> - <child internal-child="selection"> - <object class="GtkTreeSelection" id="treeview-selection4"/> + <object class="GtkLabel" id="label_calib_sensor_message"> + <property name="xalign">0</property> + <property name="label" translatable="yes">Select the sensor device you want to use for calibration.</property> + <property name="wrap">True</property> + </object> + </child> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow_calib_sensor"> + <property name="hscrollbar_policy">never</property> + <property name="vscrollbar_policy">never</property> + <child> + <object class="GtkTreeView" id="treeview_calib_sensor"> + <property name="model">liststore_calib_sensor</property> + <property name="headers_visible">False</property> + <property name="search_column">1</property> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection4"/> + </child> + </object> </child> </object> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> + </property> </object> - <packing> - <property name="title" translatable="yes">Calibration Device</property> - </packing> </child> + <child> - <object class="GtkBox" id="box_calib_kind"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="orientation">vertical</property> - <property name="spacing">9</property> - <child> - <object class="GtkLabel" id="label_calib_kind_message"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="xpad">6</property> - <property name="label" translatable="yes">Select the type of display that is connected.</property> - <property name="wrap">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow_calib_kind"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">never</property> - <property name="vscrollbar_policy">never</property> - <property name="shadow_type">in</property> + <object class="GtkAssistantPage"> + <property name="title" translatable="yes">Display Type</property> + <property name="child"> + <object class="GtkBox" id="box_calib_kind"> + <property name="orientation">vertical</property> + <property name="spacing">9</property> <child> - <object class="GtkTreeView" id="treeview_calib_kind"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="model">liststore_calib_kind</property> - <property name="headers_visible">False</property> - <property name="search_column">0</property> - <child internal-child="selection"> - <object class="GtkTreeSelection" id="treeview-selection5"/> + <object class="GtkLabel" id="label_calib_kind_message"> + <property name="xalign">0</property> + <property name="label" translatable="yes">Select the type of display that is connected.</property> + <property name="wrap">True</property> + </object> + </child> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow_calib_kind"> + <property name="hscrollbar_policy">never</property> + <property name="vscrollbar_policy">never</property> + <child> + <object class="GtkTreeView" id="treeview_calib_kind"> + <property name="model">liststore_calib_kind</property> + <property name="headers_visible">False</property> + <property name="search_column">0</property> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection5"/> + </child> + </object> </child> </object> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> + </property> </object> - <packing> - <property name="title" translatable="yes">Display Type</property> - </packing> </child> + <child> - <object class="GtkBox" id="box_calib_temp"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="orientation">vertical</property> - <property name="spacing">9</property> - <child> - <object class="GtkLabel" id="label_calib_temp_message"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="xpad">6</property> - <property name="label" translatable="yes">Select a display target white point. Most displays should be calibrated to a D65 illuminant.</property> - <property name="wrap">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow_calib_temp"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">never</property> - <property name="vscrollbar_policy">never</property> - <property name="shadow_type">in</property> + <object class="GtkAssistantPage"> + <property name="title" translatable="yes">Profile Whitepoint</property> + <property name="child"> + <object class="GtkBox" id="box_calib_temp"> + <property name="orientation">vertical</property> + <property name="spacing">9</property> <child> - <object class="GtkTreeView" id="treeview_calib_temp"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="model">liststore_calib_temp</property> - <property name="headers_visible">False</property> - <property name="search_column">0</property> - <child internal-child="selection"> - <object class="GtkTreeSelection" id="treeview-selection6"/> + <object class="GtkLabel" id="label_calib_temp_message"> + <property name="xalign">0</property> + <property name="label" translatable="yes">Select a display target white point. Most displays should be calibrated to a D65 illuminant.</property> + <property name="wrap">True</property> + </object> + </child> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow_calib_temp"> + <property name="hscrollbar_policy">never</property> + <property name="vscrollbar_policy">never</property> + <child> + <object class="GtkTreeView" id="treeview_calib_temp"> + <property name="model">liststore_calib_temp</property> + <property name="headers_visible">False</property> + <property name="search_column">0</property> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection6"/> + </child> + </object> </child> </object> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> + </property> </object> - <packing> - <property name="title" translatable="yes">Profile Whitepoint</property> - </packing> </child> + <child> - <object class="GtkBox" id="box_calib_brightness"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="orientation">vertical</property> - <property name="spacing">9</property> - <child> - <object class="GtkLabel" id="label_calib_brightness_message1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="xpad">6</property> - <property name="label" translatable="yes">Please set the display to a brightness that is typical for you. Color management will be most accurate at this brightness level.</property> - <property name="wrap">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label_calib_brightness_message2"> - <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="xpad">6</property> - <property name="label" translatable="yes">Alternatively, you can use the brightness level used with one of the other profiles for this device.</property> - <property name="wrap">True</property> + <object class="GtkAssistantPage"> + <property name="title" translatable="yes">Display Brightness</property> + <property name="child"> + <object class="GtkBox" id="box_calib_brightness"> + <property name="orientation">vertical</property> + <property name="spacing">9</property> + <child> + <object class="GtkLabel" id="label_calib_brightness_message1"> + <property name="xalign">0</property> + <property name="label" translatable="yes">Please set the display to a brightness that is typical for you. Color management will be most accurate at this brightness level.</property> + <property name="wrap">True</property> + </object> + </child> + <child> + <object class="GtkLabel" id="label_calib_brightness_message2"> + <property name="xalign">0</property> + <property name="label" translatable="yes">Alternatively, you can use the brightness level used with one of the other profiles for this device.</property> + <property name="wrap">True</property> + </object> + </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> + </property> </object> - <packing> - <property name="title" translatable="yes">Display Brightness</property> - </packing> </child> + <child> - <object class="GtkBox" id="box_calib_title"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="orientation">vertical</property> - <property name="spacing">9</property> - <child> - <object class="GtkLabel" id="label_calib_title_message"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="xpad">6</property> - <property name="label" translatable="yes">You can use a color profile on different computers, or even create profiles for different lighting conditions.</property> - <property name="wrap">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label_calib_title_header"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="xpad">6</property> - <property name="label" translatable="yes">Profile Name:</property> - <property name="wrap">True</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkEntry" id="entry_calib_title"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="invisible_char">●</property> - <property name="truncate_multiline">True</property> - <property name="invisible_char_set">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - </object> - <packing> + <object class="GtkAssistantPage"> <property name="page_type">confirm</property> <property name="title" translatable="yes">Profile Name</property> - </packing> + <property name="child"> + <object class="GtkBox" id="box_calib_title"> + <property name="orientation">vertical</property> + <property name="spacing">9</property> + <child> + <object class="GtkLabel" id="label_calib_title_message"> + <property name="xalign">0</property> + <property name="label" translatable="yes">You can use a color profile on different computers, or even create profiles for different lighting conditions.</property> + <property name="wrap">True</property> + </object> + </child> + <child> + <object class="GtkLabel" id="label_calib_title_header"> + <property name="xalign">0</property> + <property name="label" translatable="yes">Profile Name:</property> + <property name="wrap">True</property> + <style> + <class name="dim-label"/> + </style> + </object> + </child> + <child> + <object class="GtkEntry" id="entry_calib_title"> + <property name="invisible_char">●</property> + <property name="truncate_multiline">True</property> + <property name="invisible_char_set">True</property> + </object> + </child> + </object> + </property> + </object> </child> + <child> - <object class="GtkBox" id="box_calib_summary"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="orientation">vertical</property> - <property name="spacing">9</property> - <child> - <object class="GtkLabel" id="label_calib_summary_title"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="xpad">6</property> - <property name="label" translatable="yes">Profile successfully created!</property> - <property name="wrap">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkBox" id="box2"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">center</property> - <property name="spacing">6</property> + <object class="GtkAssistantPage"> + <property name="page_type">summary</property> + <property name="title" translatable="yes">Summary</property> + <property name="child"> + <object class="GtkBox" id="box_calib_summary"> + <property name="orientation">vertical</property> + <property name="spacing">9</property> <child> - <object class="GtkButton" id="button_calib_export"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="halign">start</property> + <object class="GtkLabel" id="label_calib_summary_title"> + <property name="xalign">0</property> + <property name="label" translatable="yes">Profile successfully created!</property> + <property name="wrap">True</property> + </object> + </child> + <child> + <object class="GtkBox" id="box2"> + <property name="halign">center</property> + <property name="spacing">6</property> <child> - <object class="GtkBox" id="box3"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="border_width">6</property> - <property name="spacing">9</property> - <child> - <object class="GtkImage" id="image2"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="pixel_size">48</property> - <property name="icon_name">folder-symbolic</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> + <object class="GtkButton" id="button_calib_export"> + <property name="halign">start</property> <child> - <object class="GtkBox" id="box6"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="orientation">vertical</property> - <property name="spacing">3</property> + <object class="GtkBox" id="box3"> + <property name="margin_top">6</property> + <property name="margin_bottom">6</property> + <property name="margin_start">6</property> + <property name="margin_end">6</property> + <property name="spacing">9</property> <child> - <object class="GtkLabel" id="label1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Copy profile</property> + <object class="GtkImage" id="image2"> + <property name="pixel_size">48</property> + <property name="icon_name">folder-symbolic</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> </child> <child> - <object class="GtkLabel" id="label2"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Requires writable media</property> - <attributes> - <attribute name="style" value="italic"/> - </attributes> + <object class="GtkBox" id="box6"> + <property name="orientation">vertical</property> + <property name="spacing">3</property> + <child> + <object class="GtkLabel" id="label1"> + <property name="xalign">0</property> + <property name="label" translatable="yes">Copy profile</property> + </object> + </child> + <child> + <object class="GtkLabel" id="label2"> + <property name="xalign">0</property> + <property name="label" translatable="yes">Requires writable media</property> + <attributes> + <attribute name="style" value="italic"/> + </attributes> + </object> + </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> </child> </object> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> + </child> + <child> + <object class="GtkLabel" id="label_calib_summary_message"> + <property name="xalign">0</property> + <property name="label" translatable="yes">You may find these instructions on how to use the profile on <a href="linux">GNU/Linux</a>, <a href="osx">Apple OS X</a> and <a href="windows">Microsoft Windows</a> systems useful.</property> + <property name="use_markup">True</property> + <property name="wrap">True</property> + <style> + <class name="dim-label"/> + </style> + </object> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="padding">12</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label_calib_summary_message"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="xpad">6</property> - <property name="label" translatable="yes">You may find these instructions on how to use the profile on <a href="linux">GNU/Linux</a>, <a href="osx">Apple OS X</a> and <a href="windows">Microsoft Windows</a> systems useful.</property> - <property name="use_markup">True</property> - <property name="wrap">True</property> - <style> - <class name="dim-label"/> - </style> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">3</property> - </packing> - </child> + </property> </object> - <packing> - <property name="page_type">summary</property> - <property name="title" translatable="yes">Summary</property> - </packing> </child> + <child internal-child="action_area"> <object class="GtkBox" id="assistant-action_area1"> - <property name="can_focus">False</property> <property name="halign">end</property> <property name="spacing">6</property> </object> </child> </object> + <object class="GtkDialog" id="dialog_assign"> - <property name="can_focus">False</property> - <property name="border_width">5</property> <property name="title" translatable="yes">Add Profile</property> <property name="resizable">False</property> <property name="modal">True</property> - <property name="window_position">center-on-parent</property> <property name="destroy_with_parent">True</property> <property name="icon_name">gnome-color-manager</property> - <property name="type_hint">dialog</property> - <property name="skip_taskbar_hint">True</property> - <property name="skip_pager_hint">True</property> - <child internal-child="vbox"> - <object class="GtkBox" id="dialog-vbox3"> - <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="use-header-bar">1</property> + <property name="hide-on-close">True</property> + <child> + <object class="GtkBox" id="box1"> <property name="orientation">vertical</property> - <property name="spacing">2</property> - <child internal-child="action_area"> - <object class="GtkButtonBox" id="dialog-action_area3"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="layout_style">end</property> - <child> - <object class="GtkButton" id="button_assign_import"> - <property name="label" translatable="yes">_Import File…</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="button_assign_cancel"> - <property name="label" translatable="yes">_Cancel</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - <property name="secondary">True</property> - </packing> - </child> + <property name="spacing">6</property> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow_assign"> + <property name="hscrollbar_policy">never</property> + <property name="hscrollbar-policy">GTK_POLICY_NEVER</property> + <property name="min-content-height">300</property> <child> - <object class="GtkButton" id="button_assign_ok"> - <property name="label" translatable="yes">_Add</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="use_underline">True</property> + <object class="GtkTreeView" id="treeview_assign"> + <property name="model">liststore_assign</property> + <property name="headers_visible">False</property> + <property name="enable_search">False</property> + <property name="search_column">0</property> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection2"/> + </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">2</property> - </packing> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="pack_type">end</property> - <property name="position">0</property> - </packing> </child> <child> - <object class="GtkBox" id="box1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="border_width">5</property> - <property name="orientation">vertical</property> - <property name="spacing">6</property> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow_assign"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">never</property> - <property name="shadow_type">in</property> - <property name="hscrollbar-policy">GTK_POLICY_NEVER</property> - <property name="min-content-height">300</property> - <child> - <object class="GtkTreeView" id="treeview_assign"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="model">liststore_assign</property> - <property name="headers_visible">False</property> - <property name="enable_search">False</property> - <property name="search_column">0</property> - <child internal-child="selection"> - <object class="GtkTreeSelection" id="treeview-selection2"/> - </child> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label_assign_warning"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Problems detected. The profile may not work correctly. <a href="">Show details.</a></property> - <property name="use_markup">True</property> - <property name="wrap">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> + <object class="GtkLabel" id="label_assign_warning"> + <property name="margin_top">6</property> + <property name="margin_bottom">6</property> + <property name="margin_start">6</property> + <property name="margin_end">6</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Problems detected. The profile may not work correctly. <a href="">Show details.</a></property> + <property name="use_markup">True</property> + <property name="wrap">True</property> + </object> + </child> + </object> + </child> + <child type="titlebar"> + <object class="GtkHeaderBar"> + <child type="start"> + <object class="GtkButton" id="button_assign_import"> + <property name="label" translatable="yes">_Import File…</property> + <property name="use_underline">True</property> + </object> + </child> + <child type="end"> + <object class="GtkButton" id="button_assign_ok"> + <property name="label" translatable="yes">_Add</property> + <property name="use_underline">True</property> + <style> + <class name="suggested-action" /> + </style> </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> </object> </child> <action-widgets> <action-widget response="0">button_assign_import</action-widget> - <action-widget response="0">button_assign_cancel</action-widget> - <action-widget response="0">button_assign_ok</action-widget> + <action-widget response="ok">button_assign_ok</action-widget> </action-widgets> </object> <template class="CcColorPanel" parent="CcPanel"> - <property name="visible">True</property> - <property name="can_focus">False</property> <child> <object class="GtkScrolledWindow" id="dialog_scroll"> - <property name="visible">True</property> - <property name="can_focus">False</property> <child> - <object class="HdyClamp"> - <property name="visible">True</property> + <object class="AdwClamp"> <property name="margin_top">32</property> <property name="margin_bottom">32</property> <property name="margin_start">12</property> <property name="margin_end">12</property> <child> <object class="GtkBox"> - <property name="visible">True</property> - <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">12</property> <property name="hexpand">True</property> <child> <object class="GtkBox" id="hbox3"> - <property name="visible">True</property> - <property name="can_focus">False</property> <property name="spacing">9</property> <child> <object class="GtkLabel" id="label_intro"> - <property name="visible">True</property> - <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Each device needs an up to date color profile to be color managed.</property> <property name="wrap">True</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> </child> <child> <object class="GtkLabel" id="label_padding"> - <property name="visible">True</property> - <property name="can_focus">False</property> </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> <child> <object class="GtkLinkButton" id="linkbutton_help"> <property name="label" translatable="yes">Learn more</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> <property name="has_tooltip">True</property> <property name="tooltip_text" translatable="yes">Learn more about color management</property> - <property name="relief">none</property> - <property name="xalign">0.50999999046325684</property> <property name="uri">help:gnome-help/color-whyimportant</property> <accessibility> - <relation type="labelled-by" target="label_intro"/> + <relation name="labelled-by">label_intro</relation> </accessibility> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> </child> <child> <object class="GtkBox" id="box_devices"> - <property name="visible">True</property> - <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> - <object class="GtkFrame" id="frame_devices"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="shadow_type">in</property> + <object class="GtkListBox" id="list_box"> + <property name="activate-on-single-click">False</property> + <property name="selection-mode">single</property> + <style> + <class name="content" /> + </style> </object> </child> <child> - <object class="GtkToolbar" id="toolbar_devices"> - <property name="can_focus">True</property> - <property name="show_arrow">False</property> - <property name="icon_size">1</property> + <object class="GtkBox" id="toolbar_devices"> + <property name="visible">False</property> + <property name="margin_top">6</property> + <property name="margin_bottom">6</property> + <property name="margin_start">6</property> + <property name="margin_end">6</property> <child> - <object class="GtkToolItem" id="left_button_group"> - <property name="visible">True</property> - <property name="can_focus">False</property> + <object class="GtkBox" id="left_button_group_box"> + <property name="halign">start</property> + <property name="hexpand">True</property> + <style> + <class name="linked" /> + </style> + <child> + <object class="GtkButton" id="toolbutton_device_default"> + <property name="label" translatable="yes">_Set for all users</property> + <property name="has_tooltip">True</property> + <property name="tooltip_text" translatable="yes">Set this profile for all users on this computer</property> + <property name="use_underline">True</property> + </object> + </child> <child> - <object class="GtkBox" id="left_button_group_box"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <child> - <object class="GtkButton" id="toolbutton_device_default"> - <property name="label" translatable="yes">_Set for all users</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="has_tooltip">True</property> - <property name="tooltip_text" translatable="yes">Set this profile for all users on this computer</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkButton" id="toolbutton_device_enable"> - <property name="label" translatable="yes">_Enable</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="has_tooltip">True</property> - <property name="tooltip_markup" translatable="yes">Set this profile for all users on this computer</property> - <property name="tooltip_text" translatable="yes">Set this profile for all users on this computer</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> + <object class="GtkButton" id="toolbutton_device_enable"> + <property name="label" translatable="yes">_Enable</property> + <property name="has_tooltip">True</property> + <property name="tooltip_markup" translatable="yes">Set this profile for all users on this computer</property> + <property name="tooltip_text" translatable="yes">Set this profile for all users on this computer</property> + <property name="use_underline">True</property> </object> </child> </object> - <packing> - <property name="expand">True</property> - </packing> </child> <child> - <object class="GtkToolItem" id="right_button_group"> - <property name="visible">True</property> - <property name="can_focus">False</property> + <object class="GtkBox" id="right_button_group_box"> + <style> + <class name="linked" /> + </style> + <child> + <object class="GtkButton" id="toolbutton_profile_add"> + <property name="label" translatable="yes">_Add profile</property> + <property name="use_underline">True</property> + </object> + </child> + <child> + <object class="GtkButton" id="toolbutton_device_calibrate"> + <property name="label" translatable="yes">_Calibrate…</property> + <property name="has_tooltip">True</property> + <property name="tooltip_text" translatable="yes">Calibrate the device</property> + <property name="use_underline">True</property> + </object> + </child> + <child> + <object class="GtkButton" id="toolbutton_profile_remove"> + <property name="label" translatable="yes">_Remove profile</property> + <property name="use_underline">True</property> + </object> + </child> <child> - <object class="GtkBox" id="right_button_group_box"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <child> - <object class="GtkButton" id="toolbutton_profile_add"> - <property name="label" translatable="yes">_Add profile</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="toolbutton_device_calibrate"> - <property name="label" translatable="yes">_Calibrate…</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="has_tooltip">True</property> - <property name="tooltip_text" translatable="yes">Calibrate the device</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkButton" id="toolbutton_profile_remove"> - <property name="label" translatable="yes">_Remove profile</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - <child> - <object class="GtkButton" id="toolbutton_profile_view"> - <property name="label" translatable="yes">_View details</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">3</property> - </packing> - </child> + <object class="GtkButton" id="toolbutton_profile_view"> + <property name="label" translatable="yes">_View details</property> + <property name="use_underline">True</property> </object> </child> </object> - <packing> - <property name="expand">False</property> - </packing> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> <child> <object class="GtkLabel" id="label_no_devices"> - <property name="visible">True</property> - <property name="can_focus">False</property> <property name="label" translatable="yes">Unable to detect any devices that can be color managed</property> <style> <class name="dim-label"/> @@ -897,11 +535,6 @@ <attribute name="weight" value="bold"/> </attributes> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> </child> </object> </child> diff --git a/panels/color/cc-color-profile.c b/panels/color/cc-color-profile.c index 9528d3c6a..65cb99f71 100644 --- a/panels/color/cc-color-profile.c +++ b/panels/color/cc-color-profile.c @@ -435,10 +435,10 @@ cc_color_profile_init (CcColorProfile *color_profile) box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 9); /* default tick */ - color_profile->widget_image = gtk_image_new_from_icon_name ("object-select-symbolic", GTK_ICON_SIZE_MENU); + color_profile->widget_image = gtk_image_new_from_icon_name ("object-select-symbolic"); gtk_widget_set_margin_start (color_profile->widget_image, IMAGE_WIDGET_PADDING); gtk_widget_set_margin_end (color_profile->widget_image, IMAGE_WIDGET_PADDING); - gtk_box_pack_start (GTK_BOX (box), color_profile->widget_image, FALSE, FALSE, 0); + gtk_box_append (GTK_BOX (box), color_profile->widget_image); /* description */ color_profile->widget_description = gtk_label_new (""); @@ -447,18 +447,18 @@ cc_color_profile_init (CcColorProfile *color_profile) gtk_widget_set_halign (color_profile->widget_description, GTK_ALIGN_START); gtk_label_set_ellipsize (GTK_LABEL (color_profile->widget_description), PANGO_ELLIPSIZE_END); gtk_label_set_xalign (GTK_LABEL (color_profile->widget_description), 0); - gtk_box_pack_start (GTK_BOX (box), color_profile->widget_description, TRUE, TRUE, 0); - gtk_widget_show (color_profile->widget_description); + gtk_widget_set_hexpand (color_profile->widget_description, TRUE); + gtk_widget_set_vexpand (color_profile->widget_description, TRUE); + gtk_box_append (GTK_BOX (box), color_profile->widget_description); /* profile warnings/info */ - color_profile->widget_info = gtk_image_new_from_icon_name ("dialog-information-symbolic", GTK_ICON_SIZE_MENU); + color_profile->widget_info = gtk_image_new_from_icon_name ("dialog-information-symbolic"); gtk_widget_set_margin_start (color_profile->widget_info, IMAGE_WIDGET_PADDING); gtk_widget_set_margin_end (color_profile->widget_info, IMAGE_WIDGET_PADDING); - gtk_box_pack_start (GTK_BOX (box), color_profile->widget_info, FALSE, FALSE, 0); + gtk_box_append (GTK_BOX (box), color_profile->widget_info); /* refresh */ - gtk_container_add (GTK_CONTAINER (color_profile), box); - gtk_widget_set_visible (box, TRUE); + gtk_list_box_row_set_child (GTK_LIST_BOX_ROW (color_profile), box); } GtkWidget * diff --git a/panels/color/meson.build b/panels/color/meson.build index ec665156d..156df6e47 100644 --- a/panels/color/meson.build +++ b/panels/color/meson.build @@ -41,9 +41,9 @@ sources += gnome.compile_resources( deps = common_deps + [ colord_dep, - gnome_desktop_dep, + gnome_rr_dep, m_dep, - dependency('colord-gtk', version: '>= 0.1.24'), + dependency('colord-gtk4', version: '>= 0.1.24'), ] panels_libs += static_library( diff --git a/panels/meson.build b/panels/meson.build index 5e318abc7..52760cb1e 100644 --- a/panels/meson.build +++ b/panels/meson.build @@ -4,7 +4,7 @@ panels = [ 'applications', 'background', 'camera', -# 'color', + 'color', 'datetime', 'default-apps', 'diagnostics', diff --git a/shell/cc-panel-loader.c b/shell/cc-panel-loader.c index bb6ed1dcc..de804ff9a 100644 --- a/shell/cc-panel-loader.c +++ b/shell/cc-panel-loader.c @@ -36,7 +36,7 @@ extern GType cc_background_panel_get_type (void); #ifdef BUILD_BLUETOOTH extern GType cc_bluetooth_panel_get_type (void); #endif /* BUILD_BLUETOOTH */ -//extern GType cc_color_panel_get_type (void); +extern GType cc_color_panel_get_type (void); extern GType cc_date_time_panel_get_type (void); extern GType cc_default_apps_panel_get_type (void); //extern GType cc_display_panel_get_type (void); @@ -103,7 +103,7 @@ static CcPanelLoaderVtable default_panels[] = PANEL_TYPE("bluetooth", cc_bluetooth_panel_get_type, NULL), #endif PANEL_TYPE("camera", cc_camera_panel_get_type, NULL), - //PANEL_TYPE("color", cc_color_panel_get_type, NULL), + PANEL_TYPE("color", cc_color_panel_get_type, NULL), PANEL_TYPE("datetime", cc_date_time_panel_get_type, NULL), PANEL_TYPE("default-apps", cc_default_apps_panel_get_type, NULL), PANEL_TYPE("diagnostics", cc_diagnostics_panel_get_type, cc_diagnostics_panel_static_init_func), |