1 /* GIMP - The GNU Image Manipulation Program
2  * Copyright (C) 1995 Spencer Kimball and Peter Mattis
3  *
4  * GimpDisplayConfig class
5  * Copyright (C) 2001  Sven Neumann <sven@gimp.org>
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
19  */
20 
21 #include "config.h"
22 
23 #include <cairo.h>
24 #include <gegl.h>
25 #include <gdk-pixbuf/gdk-pixbuf.h>
26 
27 #include "libgimpbase/gimpbase.h"
28 #include "libgimpcolor/gimpcolor.h"
29 #include "libgimpconfig/gimpconfig.h"
30 
31 #include "config-types.h"
32 
33 #include "gimprc-blurbs.h"
34 #include "gimpdisplayconfig.h"
35 #include "gimpdisplayoptions.h"
36 
37 #include "gimp-intl.h"
38 
39 
40 #define DEFAULT_ACTIVATE_ON_FOCUS    TRUE
41 #define DEFAULT_MONITOR_RESOLUTION   96.0
42 #define DEFAULT_MARCHING_ANTS_SPEED  200
43 #define DEFAULT_USE_EVENT_HISTORY    FALSE
44 
45 enum
46 {
47   PROP_0,
48   PROP_TRANSPARENCY_SIZE,
49   PROP_TRANSPARENCY_TYPE,
50   PROP_SNAP_DISTANCE,
51   PROP_MARCHING_ANTS_SPEED,
52   PROP_RESIZE_WINDOWS_ON_ZOOM,
53   PROP_RESIZE_WINDOWS_ON_RESIZE,
54   PROP_DEFAULT_SHOW_ALL,
55   PROP_DEFAULT_DOT_FOR_DOT,
56   PROP_INITIAL_ZOOM_TO_FIT,
57   PROP_CURSOR_MODE,
58   PROP_CURSOR_UPDATING,
59   PROP_SHOW_BRUSH_OUTLINE,
60   PROP_SNAP_BRUSH_OUTLINE,
61   PROP_SHOW_PAINT_TOOL_CURSOR,
62   PROP_IMAGE_TITLE_FORMAT,
63   PROP_IMAGE_STATUS_FORMAT,
64   PROP_MONITOR_XRESOLUTION,
65   PROP_MONITOR_YRESOLUTION,
66   PROP_MONITOR_RES_FROM_GDK,
67   PROP_NAV_PREVIEW_SIZE,
68   PROP_DEFAULT_VIEW,
69   PROP_DEFAULT_FULLSCREEN_VIEW,
70   PROP_ACTIVATE_ON_FOCUS,
71   PROP_SPACE_BAR_ACTION,
72   PROP_ZOOM_QUALITY,
73   PROP_USE_EVENT_HISTORY,
74 
75   /* ignored, only for backward compatibility: */
76   PROP_DEFAULT_SNAP_TO_GUIDES,
77   PROP_DEFAULT_SNAP_TO_GRID,
78   PROP_DEFAULT_SNAP_TO_CANVAS,
79   PROP_DEFAULT_SNAP_TO_PATH,
80   PROP_CONFIRM_ON_CLOSE,
81   PROP_XOR_COLOR,
82   PROP_PERFECT_MOUSE
83 };
84 
85 
86 static void  gimp_display_config_finalize          (GObject      *object);
87 static void  gimp_display_config_set_property      (GObject      *object,
88                                                     guint         property_id,
89                                                     const GValue *value,
90                                                     GParamSpec   *pspec);
91 static void  gimp_display_config_get_property      (GObject      *object,
92                                                     guint         property_id,
93                                                     GValue       *value,
94                                                     GParamSpec   *pspec);
95 
96 static void  gimp_display_config_view_notify       (GObject      *object,
97                                                     GParamSpec   *pspec,
98                                                     gpointer      data);
99 static void  gimp_display_config_fullscreen_notify (GObject      *object,
100                                                     GParamSpec   *pspec,
101                                                     gpointer      data);
102 
103 
G_DEFINE_TYPE(GimpDisplayConfig,gimp_display_config,GIMP_TYPE_CORE_CONFIG)104 G_DEFINE_TYPE (GimpDisplayConfig, gimp_display_config, GIMP_TYPE_CORE_CONFIG)
105 
106 #define parent_class gimp_display_config_parent_class
107 
108 
109 static void
110 gimp_display_config_class_init (GimpDisplayConfigClass *klass)
111 {
112   GObjectClass *object_class = G_OBJECT_CLASS (klass);
113   GimpRGB       color        = { 0, 0, 0, 0 };
114 
115   object_class->finalize     = gimp_display_config_finalize;
116   object_class->set_property = gimp_display_config_set_property;
117   object_class->get_property = gimp_display_config_get_property;
118 
119   GIMP_CONFIG_PROP_ENUM (object_class, PROP_TRANSPARENCY_SIZE,
120                          "transparency-size",
121                          "Transparency size",
122                          TRANSPARENCY_SIZE_BLURB,
123                          GIMP_TYPE_CHECK_SIZE,
124                          GIMP_CHECK_SIZE_MEDIUM_CHECKS,
125                          GIMP_PARAM_STATIC_STRINGS);
126 
127   GIMP_CONFIG_PROP_ENUM (object_class, PROP_TRANSPARENCY_TYPE,
128                          "transparency-type",
129                          "Transparency type",
130                          TRANSPARENCY_TYPE_BLURB,
131                          GIMP_TYPE_CHECK_TYPE,
132                          GIMP_CHECK_TYPE_GRAY_CHECKS,
133                          GIMP_PARAM_STATIC_STRINGS);
134 
135   GIMP_CONFIG_PROP_INT (object_class, PROP_SNAP_DISTANCE,
136                         "snap-distance",
137                         "Snap distance",
138                         DEFAULT_SNAP_DISTANCE_BLURB,
139                         1, 255, 8,
140                         GIMP_PARAM_STATIC_STRINGS);
141 
142   GIMP_CONFIG_PROP_INT (object_class, PROP_MARCHING_ANTS_SPEED,
143                         "marching-ants-speed",
144                         "Marching ants speed",
145                         MARCHING_ANTS_SPEED_BLURB,
146                         10, 10000, DEFAULT_MARCHING_ANTS_SPEED,
147                         GIMP_PARAM_STATIC_STRINGS);
148 
149   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_RESIZE_WINDOWS_ON_ZOOM,
150                             "resize-windows-on-zoom",
151                             "Resize windows on zoom",
152                             RESIZE_WINDOWS_ON_ZOOM_BLURB,
153                             FALSE,
154                             GIMP_PARAM_STATIC_STRINGS);
155 
156   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_RESIZE_WINDOWS_ON_RESIZE,
157                             "resize-windows-on-resize",
158                             "Resize windows on resize",
159                             RESIZE_WINDOWS_ON_RESIZE_BLURB,
160                             FALSE,
161                             GIMP_PARAM_STATIC_STRINGS);
162 
163   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_DEFAULT_SHOW_ALL,
164                             "default-show-all",
165                             "Default show-all",
166                             DEFAULT_SHOW_ALL_BLURB,
167                             FALSE,
168                             GIMP_PARAM_STATIC_STRINGS);
169 
170   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_DEFAULT_DOT_FOR_DOT,
171                             "default-dot-for-dot",
172                             "Default dot-for-dot",
173                             DEFAULT_DOT_FOR_DOT_BLURB,
174                             TRUE,
175                             GIMP_PARAM_STATIC_STRINGS);
176 
177   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_INITIAL_ZOOM_TO_FIT,
178                             "initial-zoom-to-fit",
179                             "Initial zoom-to-fit",
180                             INITIAL_ZOOM_TO_FIT_BLURB,
181                             TRUE,
182                             GIMP_PARAM_STATIC_STRINGS);
183 
184   GIMP_CONFIG_PROP_ENUM (object_class, PROP_CURSOR_MODE,
185                          "cursor-mode",
186                          "Cursor mode",
187                          CURSOR_MODE_BLURB,
188                          GIMP_TYPE_CURSOR_MODE,
189                          GIMP_CURSOR_MODE_TOOL_CROSSHAIR,
190                          GIMP_PARAM_STATIC_STRINGS);
191 
192   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_CURSOR_UPDATING,
193                             "cursor-updating",
194                             "Cursor updating",
195                             CURSOR_UPDATING_BLURB,
196                             TRUE,
197                             GIMP_PARAM_STATIC_STRINGS);
198 
199   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_SHOW_BRUSH_OUTLINE,
200                             "show-brush-outline",
201                             "Show brush outline",
202                             SHOW_BRUSH_OUTLINE_BLURB,
203                             TRUE,
204                             GIMP_PARAM_STATIC_STRINGS);
205 
206   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_SNAP_BRUSH_OUTLINE,
207                             "snap-brush-outline",
208                             "Snap brush outline",
209                             SNAP_BRUSH_OUTLINE_BLURB,
210                             FALSE,
211                             GIMP_PARAM_STATIC_STRINGS);
212 
213   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_SHOW_PAINT_TOOL_CURSOR,
214                             "show-paint-tool-cursor",
215                             "Show paint tool cursor",
216                             SHOW_PAINT_TOOL_CURSOR_BLURB,
217                             TRUE,
218                             GIMP_PARAM_STATIC_STRINGS);
219 
220   GIMP_CONFIG_PROP_STRING (object_class, PROP_IMAGE_TITLE_FORMAT,
221                            "image-title-format",
222                            "Image title format",
223                            IMAGE_TITLE_FORMAT_BLURB,
224                            GIMP_CONFIG_DEFAULT_IMAGE_TITLE_FORMAT,
225                            GIMP_PARAM_STATIC_STRINGS);
226 
227   GIMP_CONFIG_PROP_STRING (object_class, PROP_IMAGE_STATUS_FORMAT,
228                            "image-status-format",
229                            "Image statusbar format",
230                            IMAGE_STATUS_FORMAT_BLURB,
231                            GIMP_CONFIG_DEFAULT_IMAGE_STATUS_FORMAT,
232                            GIMP_PARAM_STATIC_STRINGS);
233 
234   GIMP_CONFIG_PROP_RESOLUTION (object_class, PROP_MONITOR_XRESOLUTION,
235                                "monitor-xresolution",
236                                "Monitor resolution X",
237                                MONITOR_XRESOLUTION_BLURB,
238                                DEFAULT_MONITOR_RESOLUTION,
239                                GIMP_PARAM_STATIC_STRINGS);
240 
241   GIMP_CONFIG_PROP_RESOLUTION (object_class, PROP_MONITOR_YRESOLUTION,
242                                "monitor-yresolution",
243                                "Monitor resolution Y",
244                                MONITOR_YRESOLUTION_BLURB,
245                                DEFAULT_MONITOR_RESOLUTION,
246                                GIMP_PARAM_STATIC_STRINGS);
247 
248   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_MONITOR_RES_FROM_GDK,
249                             "monitor-resolution-from-windowing-system",
250                             "Monitor resolution from windowing system",
251                             MONITOR_RES_FROM_GDK_BLURB,
252                             TRUE,
253                             GIMP_PARAM_STATIC_STRINGS);
254 
255   GIMP_CONFIG_PROP_ENUM (object_class, PROP_NAV_PREVIEW_SIZE,
256                          "navigation-preview-size",
257                          "Navigation preview size",
258                          NAVIGATION_PREVIEW_SIZE_BLURB,
259                          GIMP_TYPE_VIEW_SIZE,
260                          GIMP_VIEW_SIZE_MEDIUM,
261                          GIMP_PARAM_STATIC_STRINGS);
262 
263   GIMP_CONFIG_PROP_OBJECT (object_class, PROP_DEFAULT_VIEW,
264                            "default-view",
265                            "Default view options",
266                            DEFAULT_VIEW_BLURB,
267                            GIMP_TYPE_DISPLAY_OPTIONS,
268                            GIMP_PARAM_STATIC_STRINGS |
269                            GIMP_CONFIG_PARAM_AGGREGATE);
270 
271   GIMP_CONFIG_PROP_OBJECT (object_class, PROP_DEFAULT_FULLSCREEN_VIEW,
272                            "default-fullscreen-view",
273                            "Default fullscreen view options",
274                            DEFAULT_FULLSCREEN_VIEW_BLURB,
275                            GIMP_TYPE_DISPLAY_OPTIONS,
276                            GIMP_PARAM_STATIC_STRINGS |
277                            GIMP_CONFIG_PARAM_AGGREGATE);
278 
279   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_ACTIVATE_ON_FOCUS,
280                             "activate-on-focus",
281                             "Activate on focus",
282                             ACTIVATE_ON_FOCUS_BLURB,
283                             DEFAULT_ACTIVATE_ON_FOCUS,
284                             GIMP_PARAM_STATIC_STRINGS);
285 
286   GIMP_CONFIG_PROP_ENUM (object_class, PROP_SPACE_BAR_ACTION,
287                          "space-bar-action",
288                          "Space bar action",
289                          SPACE_BAR_ACTION_BLURB,
290                          GIMP_TYPE_SPACE_BAR_ACTION,
291                          GIMP_SPACE_BAR_ACTION_PAN,
292                          GIMP_PARAM_STATIC_STRINGS);
293 
294   GIMP_CONFIG_PROP_ENUM (object_class, PROP_ZOOM_QUALITY,
295                          "zoom-quality",
296                          "Zoom quality",
297                          ZOOM_QUALITY_BLURB,
298                          GIMP_TYPE_ZOOM_QUALITY,
299                          GIMP_ZOOM_QUALITY_HIGH,
300                          GIMP_PARAM_STATIC_STRINGS);
301 
302   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_USE_EVENT_HISTORY,
303                             "use-event-history",
304                             "Use event history",
305                             DEFAULT_USE_EVENT_HISTORY_BLURB,
306                             DEFAULT_USE_EVENT_HISTORY,
307                             GIMP_PARAM_STATIC_STRINGS);
308 
309   /*  only for backward compatibility:  */
310   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_DEFAULT_SNAP_TO_GUIDES,
311                             "default-snap-to-guides",
312                             NULL, NULL,
313                             TRUE,
314                             GIMP_PARAM_STATIC_STRINGS |
315                             GIMP_CONFIG_PARAM_IGNORE);
316 
317   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_DEFAULT_SNAP_TO_GRID,
318                             "default-snap-to-grid",
319                             NULL, NULL,
320                             FALSE,
321                             GIMP_PARAM_STATIC_STRINGS |
322                             GIMP_CONFIG_PARAM_IGNORE);
323 
324   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_DEFAULT_SNAP_TO_CANVAS,
325                             "default-snap-to-canvas",
326                             NULL, NULL,
327                             FALSE,
328                             GIMP_PARAM_STATIC_STRINGS |
329                             GIMP_CONFIG_PARAM_IGNORE);
330 
331   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_DEFAULT_SNAP_TO_PATH,
332                             "default-snap-to-path",
333                             NULL, NULL,
334                             FALSE,
335                             GIMP_PARAM_STATIC_STRINGS |
336                             GIMP_CONFIG_PARAM_IGNORE);
337 
338   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_CONFIRM_ON_CLOSE,
339                             "confirm-on-close",
340                             NULL, NULL,
341                             TRUE,
342                             GIMP_PARAM_STATIC_STRINGS |
343                             GIMP_CONFIG_PARAM_IGNORE);
344 
345   GIMP_CONFIG_PROP_RGB (object_class, PROP_XOR_COLOR,
346                         "xor-color",
347                         NULL, NULL,
348                         FALSE, &color,
349                         GIMP_PARAM_STATIC_STRINGS |
350                         GIMP_CONFIG_PARAM_IGNORE);
351 
352   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_PERFECT_MOUSE,
353                             "perfect-mouse",
354                             NULL, NULL,
355                             TRUE,
356                             GIMP_PARAM_STATIC_STRINGS |
357                             GIMP_CONFIG_PARAM_IGNORE);
358 }
359 
360 static void
gimp_display_config_init(GimpDisplayConfig * config)361 gimp_display_config_init (GimpDisplayConfig *config)
362 {
363   config->default_view =
364     g_object_new (GIMP_TYPE_DISPLAY_OPTIONS, NULL);
365 
366   g_signal_connect (config->default_view, "notify",
367                     G_CALLBACK (gimp_display_config_view_notify),
368                     config);
369 
370   config->default_fullscreen_view =
371     g_object_new (GIMP_TYPE_DISPLAY_OPTIONS, NULL);
372 
373   g_signal_connect (config->default_fullscreen_view, "notify",
374                     G_CALLBACK (gimp_display_config_fullscreen_notify),
375                     config);
376 }
377 
378 static void
gimp_display_config_finalize(GObject * object)379 gimp_display_config_finalize (GObject *object)
380 {
381   GimpDisplayConfig *display_config = GIMP_DISPLAY_CONFIG (object);
382 
383   g_free (display_config->image_title_format);
384   g_free (display_config->image_status_format);
385 
386   g_clear_object (&display_config->default_view);
387   g_clear_object (&display_config->default_fullscreen_view);
388 
389   G_OBJECT_CLASS (parent_class)->finalize (object);
390 }
391 
392 static void
gimp_display_config_set_property(GObject * object,guint property_id,const GValue * value,GParamSpec * pspec)393 gimp_display_config_set_property (GObject      *object,
394                                   guint         property_id,
395                                   const GValue *value,
396                                   GParamSpec   *pspec)
397 {
398   GimpDisplayConfig *display_config = GIMP_DISPLAY_CONFIG (object);
399 
400   switch (property_id)
401     {
402     case PROP_TRANSPARENCY_SIZE:
403       display_config->transparency_size = g_value_get_enum (value);
404       break;
405     case PROP_TRANSPARENCY_TYPE:
406       display_config->transparency_type = g_value_get_enum (value);
407       break;
408     case PROP_SNAP_DISTANCE:
409       display_config->snap_distance = g_value_get_int (value);
410       break;
411     case PROP_MARCHING_ANTS_SPEED:
412       display_config->marching_ants_speed = g_value_get_int (value);
413       break;
414     case PROP_RESIZE_WINDOWS_ON_ZOOM:
415       display_config->resize_windows_on_zoom = g_value_get_boolean (value);
416       break;
417     case PROP_RESIZE_WINDOWS_ON_RESIZE:
418       display_config->resize_windows_on_resize = g_value_get_boolean (value);
419       break;
420     case PROP_DEFAULT_SHOW_ALL:
421       display_config->default_show_all = g_value_get_boolean (value);
422       break;
423     case PROP_DEFAULT_DOT_FOR_DOT:
424       display_config->default_dot_for_dot = g_value_get_boolean (value);
425       break;
426     case PROP_INITIAL_ZOOM_TO_FIT:
427       display_config->initial_zoom_to_fit = g_value_get_boolean (value);
428       break;
429     case PROP_CURSOR_MODE:
430       display_config->cursor_mode = g_value_get_enum (value);
431       break;
432     case PROP_CURSOR_UPDATING:
433       display_config->cursor_updating = g_value_get_boolean (value);
434       break;
435     case PROP_SHOW_BRUSH_OUTLINE:
436       display_config->show_brush_outline = g_value_get_boolean (value);
437       break;
438     case PROP_SNAP_BRUSH_OUTLINE:
439       display_config->snap_brush_outline = g_value_get_boolean (value);
440       break;
441     case PROP_SHOW_PAINT_TOOL_CURSOR:
442       display_config->show_paint_tool_cursor = g_value_get_boolean (value);
443       break;
444     case PROP_IMAGE_TITLE_FORMAT:
445       g_free (display_config->image_title_format);
446       display_config->image_title_format = g_value_dup_string (value);
447       break;
448     case PROP_IMAGE_STATUS_FORMAT:
449       g_free (display_config->image_status_format);
450       display_config->image_status_format = g_value_dup_string (value);
451       break;
452     case PROP_MONITOR_XRESOLUTION:
453       display_config->monitor_xres = g_value_get_double (value);
454       break;
455     case PROP_MONITOR_YRESOLUTION:
456       display_config->monitor_yres = g_value_get_double (value);
457       break;
458     case PROP_MONITOR_RES_FROM_GDK:
459       display_config->monitor_res_from_gdk = g_value_get_boolean (value);
460       break;
461     case PROP_NAV_PREVIEW_SIZE:
462       display_config->nav_preview_size = g_value_get_enum (value);
463       break;
464     case PROP_DEFAULT_VIEW:
465       if (g_value_get_object (value))
466         gimp_config_sync (g_value_get_object (value),
467                           G_OBJECT (display_config->default_view), 0);
468       break;
469     case PROP_DEFAULT_FULLSCREEN_VIEW:
470       if (g_value_get_object (value))
471         gimp_config_sync (g_value_get_object (value),
472                           G_OBJECT (display_config->default_fullscreen_view),
473                           0);
474       break;
475     case PROP_ACTIVATE_ON_FOCUS:
476       display_config->activate_on_focus = g_value_get_boolean (value);
477       break;
478     case PROP_SPACE_BAR_ACTION:
479       display_config->space_bar_action = g_value_get_enum (value);
480       break;
481     case PROP_ZOOM_QUALITY:
482       display_config->zoom_quality = g_value_get_enum (value);
483       break;
484     case PROP_USE_EVENT_HISTORY:
485       display_config->use_event_history = g_value_get_boolean (value);
486       break;
487 
488     case PROP_DEFAULT_SNAP_TO_GUIDES:
489     case PROP_DEFAULT_SNAP_TO_GRID:
490     case PROP_DEFAULT_SNAP_TO_CANVAS:
491     case PROP_DEFAULT_SNAP_TO_PATH:
492     case PROP_CONFIRM_ON_CLOSE:
493     case PROP_XOR_COLOR:
494     case PROP_PERFECT_MOUSE:
495       /* ignored */
496       break;
497 
498     default:
499       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
500       break;
501     }
502 }
503 
504 static void
gimp_display_config_get_property(GObject * object,guint property_id,GValue * value,GParamSpec * pspec)505 gimp_display_config_get_property (GObject    *object,
506                                   guint       property_id,
507                                   GValue     *value,
508                                   GParamSpec *pspec)
509 {
510   GimpDisplayConfig *display_config = GIMP_DISPLAY_CONFIG (object);
511 
512   switch (property_id)
513     {
514     case PROP_TRANSPARENCY_SIZE:
515       g_value_set_enum (value, display_config->transparency_size);
516       break;
517     case PROP_TRANSPARENCY_TYPE:
518       g_value_set_enum (value, display_config->transparency_type);
519       break;
520     case PROP_SNAP_DISTANCE:
521       g_value_set_int (value, display_config->snap_distance);
522       break;
523     case PROP_MARCHING_ANTS_SPEED:
524       g_value_set_int (value, display_config->marching_ants_speed);
525       break;
526     case PROP_RESIZE_WINDOWS_ON_ZOOM:
527       g_value_set_boolean (value, display_config->resize_windows_on_zoom);
528       break;
529     case PROP_RESIZE_WINDOWS_ON_RESIZE:
530       g_value_set_boolean (value, display_config->resize_windows_on_resize);
531       break;
532     case PROP_DEFAULT_SHOW_ALL:
533       g_value_set_boolean (value, display_config->default_show_all);
534       break;
535     case PROP_DEFAULT_DOT_FOR_DOT:
536       g_value_set_boolean (value, display_config->default_dot_for_dot);
537       break;
538     case PROP_INITIAL_ZOOM_TO_FIT:
539       g_value_set_boolean (value, display_config->initial_zoom_to_fit);
540       break;
541     case PROP_CURSOR_MODE:
542       g_value_set_enum (value, display_config->cursor_mode);
543       break;
544     case PROP_CURSOR_UPDATING:
545       g_value_set_boolean (value, display_config->cursor_updating);
546       break;
547     case PROP_SHOW_BRUSH_OUTLINE:
548       g_value_set_boolean (value, display_config->show_brush_outline);
549       break;
550     case PROP_SNAP_BRUSH_OUTLINE:
551       g_value_set_boolean (value, display_config->snap_brush_outline);
552       break;
553     case PROP_SHOW_PAINT_TOOL_CURSOR:
554       g_value_set_boolean (value, display_config->show_paint_tool_cursor);
555       break;
556     case PROP_IMAGE_TITLE_FORMAT:
557       g_value_set_string (value, display_config->image_title_format);
558       break;
559     case PROP_IMAGE_STATUS_FORMAT:
560       g_value_set_string (value, display_config->image_status_format);
561       break;
562     case PROP_MONITOR_XRESOLUTION:
563       g_value_set_double (value, display_config->monitor_xres);
564       break;
565     case PROP_MONITOR_YRESOLUTION:
566       g_value_set_double (value, display_config->monitor_yres);
567       break;
568     case PROP_MONITOR_RES_FROM_GDK:
569       g_value_set_boolean (value, display_config->monitor_res_from_gdk);
570       break;
571     case PROP_NAV_PREVIEW_SIZE:
572       g_value_set_enum (value, display_config->nav_preview_size);
573       break;
574     case PROP_DEFAULT_VIEW:
575       g_value_set_object (value, display_config->default_view);
576       break;
577     case PROP_DEFAULT_FULLSCREEN_VIEW:
578       g_value_set_object (value, display_config->default_fullscreen_view);
579       break;
580     case PROP_ACTIVATE_ON_FOCUS:
581       g_value_set_boolean (value, display_config->activate_on_focus);
582       break;
583     case PROP_SPACE_BAR_ACTION:
584       g_value_set_enum (value, display_config->space_bar_action);
585       break;
586     case PROP_ZOOM_QUALITY:
587       g_value_set_enum (value, display_config->zoom_quality);
588       break;
589     case PROP_USE_EVENT_HISTORY:
590       g_value_set_boolean (value, display_config->use_event_history);
591       break;
592 
593     case PROP_DEFAULT_SNAP_TO_GUIDES:
594     case PROP_DEFAULT_SNAP_TO_GRID:
595     case PROP_DEFAULT_SNAP_TO_CANVAS:
596     case PROP_DEFAULT_SNAP_TO_PATH:
597     case PROP_CONFIRM_ON_CLOSE:
598     case PROP_XOR_COLOR:
599     case PROP_PERFECT_MOUSE:
600       /* ignored */
601       break;
602 
603     default:
604       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
605       break;
606     }
607 }
608 
609 static void
gimp_display_config_view_notify(GObject * object,GParamSpec * pspec,gpointer data)610 gimp_display_config_view_notify (GObject    *object,
611                                  GParamSpec *pspec,
612                                  gpointer    data)
613 {
614   g_object_notify (G_OBJECT (data), "default-view");
615 }
616 
617 static void
gimp_display_config_fullscreen_notify(GObject * object,GParamSpec * pspec,gpointer data)618 gimp_display_config_fullscreen_notify (GObject    *object,
619                                        GParamSpec *pspec,
620                                        gpointer    data)
621 {
622   g_object_notify (G_OBJECT (data), "default-fullscreen-view");
623 }
624