Created AgSettings object to deal with GSettings
This commit is contained in:
		| @@ -12,10 +12,11 @@ BUILT_SOURCES = \ | ||||
| 				$(NULL) | ||||
|  | ||||
| astrognome_source_files = \ | ||||
| 						  ag-app.c     \ | ||||
| 						  ag-window.c  \ | ||||
| 						  ag-chart.c   \ | ||||
| 						  astrognome.c \ | ||||
| 						  ag-app.c      \ | ||||
| 						  ag-window.c   \ | ||||
| 						  ag-chart.c    \ | ||||
| 						  ag-settings.c \ | ||||
| 						  astrognome.c  \ | ||||
| 						  $(NULL) | ||||
|  | ||||
| EXTRA_DIST = \ | ||||
|   | ||||
							
								
								
									
										78
									
								
								src/ag-settings.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								src/ag-settings.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | ||||
| #include "ag-settings.h" | ||||
|  | ||||
| G_DEFINE_TYPE(AgSettings, ag_settings, G_TYPE_OBJECT); | ||||
|  | ||||
| #define AG_SETTINGS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), AG_TYPE_SETTINGS, AgSettingsPrivate)) | ||||
|  | ||||
| #define SETTINGS_SCHEMA_ID_WINDOW "eu.polonkai.gergely.Astrognome.state.window" | ||||
| #define SETTINGS_SCHEMA_ID_CHART  "eu.polonkai.gergely.Astrognome.state.chart" | ||||
|  | ||||
| static AgSettings *singleton = NULL; | ||||
|  | ||||
| struct _AgSettingsPrivate { | ||||
|     GSettings *settings_window; | ||||
|     GSettings *settings_chart; | ||||
| }; | ||||
|  | ||||
| static void | ||||
| ag_settings_init(AgSettings *settings) | ||||
| { | ||||
|     settings->priv = AG_SETTINGS_GET_PRIVATE(settings); | ||||
|     settings->priv->settings_window = g_settings_new(SETTINGS_SCHEMA_ID_WINDOW); | ||||
|     settings->priv->settings_chart = g_settings_new(SETTINGS_SCHEMA_ID_CHART); | ||||
| } | ||||
|  | ||||
| static void | ||||
| ag_settings_dispose(GObject *object) | ||||
| { | ||||
|     AgSettings *settings = AG_SETTINGS(object); | ||||
|  | ||||
|     g_clear_object(&settings->priv->settings_window); | ||||
|     g_clear_object(&settings->priv->settings_chart); | ||||
|  | ||||
|     G_OBJECT_CLASS(ag_settings_parent_class)->dispose(object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| ag_settings_finalize(GObject *object) | ||||
| { | ||||
|     singleton = NULL; | ||||
|     G_OBJECT_CLASS(ag_settings_parent_class)->finalize(object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| ag_settings_class_init(AgSettingsClass *klass) | ||||
| { | ||||
|     GObjectClass *gobject_class = G_OBJECT_CLASS(klass); | ||||
|  | ||||
|     g_type_class_add_private(gobject_class, sizeof(AgSettingsPrivate)); | ||||
|     gobject_class->dispose = ag_settings_dispose; | ||||
|     gobject_class->finalize = ag_settings_finalize; | ||||
| } | ||||
|  | ||||
| AgSettings * | ||||
| ag_settings_get(void) | ||||
| { | ||||
|     if (!singleton) { | ||||
|         singleton = AG_SETTINGS(g_object_new(AG_TYPE_SETTINGS, NULL)); | ||||
|     } else { | ||||
|         g_object_ref(singleton); | ||||
|     } | ||||
|  | ||||
|     g_assert(singleton); | ||||
|  | ||||
|     return singleton; | ||||
| } | ||||
|  | ||||
| GSettings * | ||||
| ag_settings_peek_window_settings(AgSettings *settings) | ||||
| { | ||||
|     return settings->priv->settings_window; | ||||
| } | ||||
|  | ||||
| GSettings * | ||||
| ag_settings_peek_chart_settings(AgSettings *settings) | ||||
| { | ||||
|     return settings->priv->settings_chart; | ||||
| } | ||||
|  | ||||
							
								
								
									
										41
									
								
								src/ag-settings.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								src/ag-settings.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | ||||
| #ifndef __AG_SETTINGS_H__ | ||||
| #define __AG_SETTINGS_H__ | ||||
|  | ||||
| #include <gio/gio.h> | ||||
| #include <glib-object.h> | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| #define AG_TYPE_SETTINGS         (ag_settings_get_type()) | ||||
| #define AG_SETTINGS(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), AG_TYPE_SETTINGS, AgSettings)) | ||||
| #define AG_SETTINGS_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), AG_TYPE_SETTINGS, AgSettingsClass)) | ||||
| #define AG_IS_SETTINGS(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), AG_TYPE_SETTINGS)) | ||||
| #define AG_IS_SETTINGS_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), AG_TYPE_SETTINGS)) | ||||
| #define AG_SETTINGS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), AG_TYPE_SETTINGS, AgSettingsClass)) | ||||
|  | ||||
| typedef struct _AgSettings AgSettings; | ||||
| typedef struct _AgSettingsClass AgSettingsClass; | ||||
| typedef struct _AgSettingsPrivate AgSettingsPrivate; | ||||
|  | ||||
| struct _AgSettings { | ||||
|     GObject parent_instance; | ||||
|  | ||||
|     /*< private >*/ | ||||
|     AgSettingsPrivate *priv; | ||||
| }; | ||||
|  | ||||
| struct _AgSettingsClass { | ||||
|     GObjectClass parent_class; | ||||
| }; | ||||
|  | ||||
| GType ag_settings_get_type(void); | ||||
|  | ||||
| AgSettings *ag_settings_get(void); | ||||
|  | ||||
| GSettings *ag_settings_peek_window_settings(AgSettings *settings); | ||||
| GSettings *ag_settings_peek_chart_settings(AgSettings *settings); | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif /* __AG_SETTINGS_H__ */ | ||||
|  | ||||
		Reference in New Issue
	
	Block a user