1/* GTK - The GIMP Toolkit
2 * Copyright (C) 2000 Red Hat, Inc.
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free
16 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17 */
18
19#ifndef __GTK_SETTINGS_H__
20#define __GTK_SETTINGS_H__
21
22#if defined(GTK_DISABLE_SINGLE_INCLUDES) && !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
23#error "Only <gtk/gtk.h> can be included directly."
24#endif
25
26#include <gtk/gtkrc.h>
27
28G_BEGIN_DECLS
29
30
31/* -- type macros --- */
32#define GTK_TYPE_SETTINGS (gtk_settings_get_type ())
33#define GTK_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SETTINGS, GtkSettings))
34#define GTK_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_SETTINGS, GtkSettingsClass))
35#define GTK_IS_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SETTINGS))
36#define GTK_IS_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_SETTINGS))
37#define GTK_SETTINGS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_SETTINGS, GtkSettingsClass))
38
39
40/* --- typedefs --- */
41typedef struct _GtkSettingsClass GtkSettingsClass;
42typedef struct _GtkSettingsValue GtkSettingsValue;
43typedef struct _GtkSettingsPropertyValue GtkSettingsPropertyValue; /* Internal */
44
45
46/* --- structures --- */
47struct _GtkSettings
48{
49 GObject parent_instance;
50
51 GData *GSEAL (queued_settings); /* of type GtkSettingsValue* */
52 GtkSettingsPropertyValue *GSEAL (property_values);
53
54 GtkRcContext *GSEAL (rc_context);
55 GdkScreen *GSEAL (screen);
56};
57
58struct _GtkSettingsClass
59{
60 GObjectClass parent_class;
61};
62
63struct _GtkSettingsValue
64{
65 /* origin should be something like "filename:linenumber" for rc files,
66 * or e.g. "XProperty" for other sources
67 */
68 gchar *origin;
69
70 /* valid types are LONG, DOUBLE and STRING corresponding to the token parsed,
71 * or a GSTRING holding an unparsed statement
72 */
73 GValue value;
74};
75
76
77/* --- functions --- */
78GType gtk_settings_get_type (void) G_GNUC_CONST;
79#ifndef GDK_MULTIHEAD_SAFE
80GtkSettings* gtk_settings_get_default (void);
81#endif
82GtkSettings* gtk_settings_get_for_screen (GdkScreen *screen);
83
84void gtk_settings_install_property (GParamSpec *pspec);
85void gtk_settings_install_property_parser (GParamSpec *pspec,
86 GtkRcPropertyParser parser);
87
88/* --- precoded parsing functions --- */
89gboolean gtk_rc_property_parse_color (const GParamSpec *pspec,
90 const GString *gstring,
91 GValue *property_value);
92gboolean gtk_rc_property_parse_enum (const GParamSpec *pspec,
93 const GString *gstring,
94 GValue *property_value);
95gboolean gtk_rc_property_parse_flags (const GParamSpec *pspec,
96 const GString *gstring,
97 GValue *property_value);
98gboolean gtk_rc_property_parse_requisition (const GParamSpec *pspec,
99 const GString *gstring,
100 GValue *property_value);
101gboolean gtk_rc_property_parse_border (const GParamSpec *pspec,
102 const GString *gstring,
103 GValue *property_value);
104
105/*< private >*/
106void gtk_settings_set_property_value (GtkSettings *settings,
107 const gchar *name,
108 const GtkSettingsValue *svalue);
109void gtk_settings_set_string_property (GtkSettings *settings,
110 const gchar *name,
111 const gchar *v_string,
112 const gchar *origin);
113void gtk_settings_set_long_property (GtkSettings *settings,
114 const gchar *name,
115 glong v_long,
116 const gchar *origin);
117void gtk_settings_set_double_property (GtkSettings *settings,
118 const gchar *name,
119 gdouble v_double,
120 const gchar *origin);
121
122
123/* implementation details */
124void _gtk_settings_set_property_value_from_rc (GtkSettings *settings,
125 const gchar *name,
126 const GtkSettingsValue *svalue);
127void _gtk_settings_reset_rc_values (GtkSettings *settings);
128
129void _gtk_settings_handle_event (GdkEventSetting *event);
130GtkRcPropertyParser _gtk_rc_property_parser_from_type (GType type);
131gboolean _gtk_settings_parse_convert (GtkRcPropertyParser parser,
132 const GValue *src_value,
133 GParamSpec *pspec,
134 GValue *dest_value);
135
136
137G_END_DECLS
138
139#endif /* __GTK_SETTINGS_H__ */
140