Author: pollux
Date: 2006-07-07 07:13:00 +0000 (Fri, 07 Jul 2006)
New Revision: 22288
Modified:
xfburn/trunk/configure.in.in
xfburn/trunk/xfburn/xfburn-directory-browser.c
xfburn/trunk/xfburn/xfburn-main.c
xfburn/trunk/xfburn/xfburn-preferences-dialog.c
xfburn/trunk/xfburn/xfburn-preferences-dialog.h
xfburn/trunk/xfburn/xfburn-progress-dialog.h
xfburn/trunk/xfburn/xfburn-settings.c
xfburn/trunk/xfburn/xfburn-settings.h
Log:
* fix thunar_vfs_shutdown crash at exit
* settings are now handled by the XfburnSettings class
Modified: xfburn/trunk/configure.in.in
===================================================================
--- xfburn/trunk/configure.in.in 2006-07-06 21:19:27 UTC (rev 22287)
+++ xfburn/trunk/configure.in.in 2006-07-07 07:13:00 UTC (rev 22288)
@@ -48,6 +48,10 @@
XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.6.0])
XDT_CHECK_PACKAGE([LIBXFCEGUI4], [libxfcegui4-1.0], [4.2.0])
XDT_CHECK_PACKAGE([EXO], [exo-0.3], [0.3.0])
+XDT_CHECK_OPTIONAL_PACKAGE([THUNAR_VFS], [thunar-vfs-1], [0.3.0], [thunar-vfs],
+ AC_HELP_STRING([--disable-thunar-vfs],
+ [Disable the use of Thunar's VFS layer to show mime
type and icons in file browser]))
+AM_CONDITIONAL([HAVE_THUNAR_VFS], [test "x$THUNAR_VFS_FOUND" = "xyes"])
dnl check for debugging support
BM_DEBUG_SUPPORT()
Modified: xfburn/trunk/xfburn/xfburn-directory-browser.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-directory-browser.c 2006-07-06 21:19:27 UTC
(rev 22287)
+++ xfburn/trunk/xfburn/xfburn-directory-browser.c 2006-07-07 07:13:00 UTC
(rev 22288)
@@ -319,6 +319,7 @@
if (G_LIKELY (G_IS_OBJECT (mime_icon)))
g_object_unref (mime_icon);
thunar_vfs_mime_info_unref (mime_info);
+ g_object_unref (mime_database);
#else
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
DIRECTORY_BROWSER_COLUMN_ICON, icon_file,
Modified: xfburn/trunk/xfburn/xfburn-main.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-main.c 2006-07-06 21:19:27 UTC (rev 22287)
+++ xfburn/trunk/xfburn/xfburn-main.c 2006-07-07 07:13:00 UTC (rev 22288)
@@ -61,13 +61,17 @@
exit (EXIT_SUCCESS);
}
+ gtk_init (&argc, &argv);
+
+ xfburn_settings_init ();
+
#ifdef HAVE_THUNAR_VFS
thunar_vfs_init ();
+ g_message ("Using Thunar-VFS %d.%d.%d", THUNAR_VFS_MAJOR_VERSION,
THUNAR_VFS_MINOR_VERSION, THUNAR_VFS_MICRO_VERSION);
+#else
+ g_message ("Thunar-VFS not available, using default implementation");
#endif
- xfburn_settings_init ();
- gtk_init (&argc, &argv);
-
xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
xfburn_stock_init ();
Modified: xfburn/trunk/xfburn/xfburn-preferences-dialog.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-preferences-dialog.c 2006-07-06 21:19:27 UTC
(rev 22287)
+++ xfburn/trunk/xfburn/xfburn-preferences-dialog.c 2006-07-07 07:13:00 UTC
(rev 22288)
@@ -63,7 +63,7 @@
XfburnPreferencesDialog *object;
} XfburnPreferencesDialogSignal;
-static GtkDialogClass *parent_class = NULL;
+static XfceTitledDialogClass *parent_class = NULL;
GtkType
xfburn_preferences_dialog_get_type ()
@@ -83,7 +83,7 @@
(GInstanceInitFunc) xfburn_preferences_dialog_init,
};
- type = g_type_register_static (GTK_TYPE_DIALOG, "XfburnPreferencesDialog",
&our_info, 0);
+ type = g_type_register_static (XFCE_TYPE_TITLED_DIALOG,
"XfburnPreferencesDialog", &our_info, 0);
}
return type;
@@ -119,8 +119,10 @@
obj->priv = g_new0 (XfburnPreferencesDialogPrivate, 1);
priv = obj->priv;
- gtk_window_set_title (GTK_WINDOW (obj), _("Xfburn preferences"));
+ gtk_window_set_title (GTK_WINDOW (obj), _("Preferences"));
+ xfce_titled_dialog_set_subtitle (XFCE_TITLED_DIALOG (obj), _("Tune how
Xfburn behaves"));
gtk_window_set_destroy_with_parent (GTK_WINDOW (obj), TRUE);
+ gtk_window_set_icon_name (GTK_WINDOW (obj), GTK_STOCK_PREFERENCES);
gtk_dialog_set_has_separator (GTK_DIALOG (obj), FALSE);
hbox = gtk_hbox_new (FALSE, 0);
Modified: xfburn/trunk/xfburn/xfburn-preferences-dialog.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-preferences-dialog.h 2006-07-06 21:19:27 UTC
(rev 22287)
+++ xfburn/trunk/xfburn/xfburn-preferences-dialog.h 2006-07-07 07:13:00 UTC
(rev 22288)
@@ -33,13 +33,13 @@
typedef struct
{
- GtkDialog parent;
+ XfceTitledDialog parent;
XfburnPreferencesDialogPrivate *priv;
} XfburnPreferencesDialog;
typedef struct
{
- GtkDialogClass parent_class;
+ XfceTitledDialogClass parent_class;
/* Add Signal Functions Here */
} XfburnPreferencesDialogClass;
Modified: xfburn/trunk/xfburn/xfburn-progress-dialog.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-progress-dialog.h 2006-07-06 21:19:27 UTC
(rev 22287)
+++ xfburn/trunk/xfburn/xfburn-progress-dialog.h 2006-07-07 07:13:00 UTC
(rev 22288)
@@ -31,7 +31,7 @@
G_BEGIN_DECLS
/* */
#define XFBURN_TYPE_PROGRESS_DIALOG_STATUS
(xfburn_progress_dialog_status_get_type ())
- typedef enum
+typedef enum
{
XFBURN_PROGRESS_DIALOG_STATUS_RUNNING,
XFBURN_PROGRESS_DIALOG_STATUS_FAILED,
@@ -85,4 +85,6 @@
GtkWidget *xfburn_progress_dialog_new ();
+G_END_DECLS
+
#endif /* XFBURN_PROGRESS_DIALOG_H */
Modified: xfburn/trunk/xfburn/xfburn-settings.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-settings.c 2006-07-06 21:19:27 UTC (rev
22287)
+++ xfburn/trunk/xfburn/xfburn-settings.c 2006-07-07 07:13:00 UTC (rev
22288)
@@ -39,18 +39,34 @@
#include "xfburn-settings.h"
+#define XFBURN_SETTINGS_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj),
XFBURN_TYPE_SETTINGS, XfburnSettingsPrivate))
+
/* global */
-static GHashTable *settings = NULL;
+typedef struct _Setting Setting;
+
+static void xfburn_settings_class_init (XfburnSettingsClass * klass);
+static void xfburn_settings_internal_init (XfburnSettings * settings);
+static void xfburn_settings_finalize (GObject * object);
+static void value_destroy (Setting * val);
+static void load_settings (XfburnSettingsPrivate *priv);
+
+/* private */
+struct XfburnSettingsPrivate
+{
+ GHashTable *settings;
+ gchar *full_path;
+};
+
/* structs */
typedef enum
{
SETTING_TYPE_INT,
SETTING_TYPE_BOOL,
- SETTING_TYPE_STRING
+ SETTING_TYPE_STRING,
} SettingType;
-typedef struct
+struct _Setting
{
SettingType type;
union
@@ -59,9 +75,92 @@
gint integer;
gboolean boolean;
} value;
-} Setting;
+};
+/**********************/
+/* object declaration */
+/**********************/
+static GObjectClass *parent_class = NULL;
+static XfburnSettings *instance = NULL;
+
+GType
+xfburn_settings_get_type ()
+{
+ static GType type = 0;
+
+ if (type == 0) {
+ static const GTypeInfo our_info = {
+ sizeof (XfburnSettingsClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) xfburn_settings_class_init,
+ NULL,
+ NULL,
+ sizeof (XfburnSettings),
+ 0,
+ (GInstanceInitFunc) xfburn_settings_internal_init,
+ };
+
+ type = g_type_register_static (G_TYPE_OBJECT, "XfburnSettings", &our_info,
0);
+ }
+
+ return type;
+}
+
+static void
+xfburn_settings_class_init (XfburnSettingsClass * klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (XfburnSettingsPrivate));
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ object_class->finalize = xfburn_settings_finalize;
+}
+
+static void
+xfburn_settings_finalize (GObject * object)
+{
+ XfburnSettings *cobj;
+ XfburnSettingsPrivate *priv;
+
+ cobj = XFBURN_SETTINGS (object);
+
+ priv = XFBURN_SETTINGS_GET_PRIVATE (cobj);
+
+ if (instance) {
+ instance = NULL;
+ }
+
+ if (G_LIKELY (priv->settings))
+ g_hash_table_destroy (priv->settings);
+ if (G_LIKELY (priv->full_path))
+ g_free (priv->full_path);
+}
+
+static void
+xfburn_settings_internal_init (XfburnSettings *settings)
+{
+ XfburnSettingsPrivate *priv = XFBURN_SETTINGS_GET_PRIVATE (settings);
+ gchar *path = NULL;
+
+ priv->settings = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
(GDestroyNotify) value_destroy);
+
+ path = xfce_resource_lookup (XFCE_RESOURCE_CONFIG, "xfburn/");
+
+ if (path) {
+ priv->full_path = g_build_filename (path, "settings.xml", NULL);
+ g_free (path);
+ }
+ else {
+ g_message ("no settings file found, using defaults");
+ }
+}
+
+/*************/
/* internals */
+/*************/
/* saving functions */
static void
@@ -92,22 +191,16 @@
}
static void
-save_settings ()
+save_settings (XfburnSettingsPrivate *priv)
{
FILE *file_settings;
- gchar *path;
- path = xfce_resource_save_location (XFCE_RESOURCE_CONFIG,
"xfburn/settings.xml", TRUE);
- if (!path) {
- g_error ("the settings saving location couldn't be found");
- return;
- }
- file_settings = fopen (path, "w+");
+ file_settings = fopen (priv->full_path, "w+");
fprintf (file_settings, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n");
fprintf (file_settings, "<xfburn-settings>\n");
- g_hash_table_foreach (settings, (GHFunc) foreach_save, file_settings);
+ g_hash_table_foreach (priv->settings, (GHFunc) foreach_save, file_settings);
fprintf (file_settings, "</xfburn-settings>\n");
fclose (file_settings);
@@ -170,7 +263,7 @@
}
static void
-load_settings (const gchar * filename)
+load_settings (XfburnSettingsPrivate *priv)
{
gchar *file_contents = NULL;
GMarkupParseContext *gpcontext = NULL;
@@ -183,15 +276,13 @@
void *maddr = NULL;
#endif
- g_return_if_fail (filename != NULL);
-
- if (stat (filename, &st) < 0) {
+ if (stat (priv->full_path, &st) < 0) {
g_warning ("Unable to open the settings file");
goto cleanup;
}
#ifdef HAVE_MMAP
- fd = open (filename, O_RDONLY, 0);
+ fd = open (priv->full_path, O_RDONLY, 0);
if (fd < 0)
goto cleanup;
@@ -200,9 +291,9 @@
file_contents = maddr;
#endif
- if (!file_contents && !g_file_get_contents (filename, &file_contents, NULL,
&err)) {
+ if (!file_contents && !g_file_get_contents (priv->full_path, &file_contents,
NULL, &err)) {
if (err) {
- g_warning ("Unable to read file '%s' (%d): %s", filename, err->code,
err->message);
+ g_warning ("Unable to read file '%s' (%d): %s", priv->full_path,
err->code, err->message);
g_error_free (err);
}
goto cleanup;
@@ -242,49 +333,63 @@
g_free (val->value.string);
}
-/* public */
+static XfburnSettings*
+get_instance ()
+{
+ if (G_LIKELY (instance))
+ return instance;
+ else
+ g_critical ("XfburnSettings hasn't been initialized");
+
+ return NULL;
+}
+
+/******************/
+/* public methods */
+/******************/
void
xfburn_settings_init ()
{
- gchar *path;
-
- settings = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
(GDestroyNotify) value_destroy);
-
- path = xfce_resource_lookup (XFCE_RESOURCE_CONFIG, "xfburn/");
-
- if (path) {
- gchar *full_path;
-
- full_path = g_build_filename (path, "settings.xml", NULL);
- load_settings (full_path);
-DBG ("%s", full_path);
- g_free (full_path);
- g_free (path);
+ if (G_LIKELY (instance == NULL)) {
+ XfburnSettingsPrivate *priv;
+
+ instance = XFBURN_SETTINGS (g_object_new (XFBURN_TYPE_SETTINGS, NULL));
+
+ if (instance) {
+ priv = XFBURN_SETTINGS_GET_PRIVATE (instance);
+ load_settings (priv);
+ }
+ } else {
+ g_critical ("XfburnSettings is already initialized");
}
- else {
- g_message ("no settings file found, using defaults");
- }
}
void
xfburn_settings_flush ()
{
- save_settings ();
+ XfburnSettings *instance = get_instance ();
+ XfburnSettingsPrivate *priv = XFBURN_SETTINGS_GET_PRIVATE (instance);
+
+ save_settings (priv);
}
void
xfburn_settings_free ()
{
- g_hash_table_destroy (settings);
+ XfburnSettings *instance = get_instance ();
+
+ g_object_unref (instance);
}
gboolean
xfburn_settings_get_boolean (const gchar * key, gboolean fallback)
{
+ XfburnSettings *instance = get_instance ();
+ XfburnSettingsPrivate *priv = XFBURN_SETTINGS_GET_PRIVATE (instance);
gpointer orig;
gpointer value;
- if (g_hash_table_lookup_extended (settings, key, &orig, &value)) {
+ if (g_hash_table_lookup_extended (priv->settings, key, &orig, &value)) {
Setting *setting = (Setting *) value;
if (setting->type == SETTING_TYPE_BOOL)
@@ -299,10 +404,12 @@
gint
xfburn_settings_get_int (const gchar * key, gint fallback)
{
+ XfburnSettings *instance = get_instance ();
+ XfburnSettingsPrivate *priv = XFBURN_SETTINGS_GET_PRIVATE (instance);
gpointer orig;
gpointer value;
- if (g_hash_table_lookup_extended (settings, key, &orig, &value)) {
+ if (g_hash_table_lookup_extended (priv->settings, key, &orig, &value)) {
Setting *setting = (Setting *) value;
if (setting->type == SETTING_TYPE_INT)
@@ -317,10 +424,12 @@
gchar *
xfburn_settings_get_string (const gchar * key, const gchar * fallback)
{
+ XfburnSettings *instance = get_instance ();
+ XfburnSettingsPrivate *priv = XFBURN_SETTINGS_GET_PRIVATE (instance);
gpointer orig;
gpointer value;
- if (g_hash_table_lookup_extended (settings, key, &orig, &value)) {
+ if (g_hash_table_lookup_extended (priv->settings, key, &orig, &value)) {
Setting *setting = (Setting *) value;
if (setting->type == SETTING_TYPE_STRING)
@@ -335,35 +444,41 @@
void
xfburn_settings_set_boolean (const gchar * key, gboolean value)
{
+ XfburnSettings *instance = get_instance ();
+ XfburnSettingsPrivate *priv = XFBURN_SETTINGS_GET_PRIVATE (instance);
Setting *setting;
setting = g_new0 (Setting, 1);
setting->type = SETTING_TYPE_BOOL;
setting->value.integer = value;
- g_hash_table_replace (settings, (gpointer) key, (gpointer) setting);
+ g_hash_table_replace (priv->settings, (gpointer) key, (gpointer) setting);
}
void
xfburn_settings_set_int (const gchar * key, gint value)
{
+ XfburnSettings *instance = get_instance ();
+ XfburnSettingsPrivate *priv = XFBURN_SETTINGS_GET_PRIVATE (instance);
Setting *setting;
setting = g_new0 (Setting, 1);
setting->type = SETTING_TYPE_INT;
setting->value.integer = value;
- g_hash_table_replace (settings, (gpointer) key, (gpointer) setting);
+ g_hash_table_replace (priv->settings, (gpointer) key, (gpointer) setting);
}
void
xfburn_settings_set_string (const gchar * key, const gchar * value)
{
+ XfburnSettings *instance = get_instance ();
+ XfburnSettingsPrivate *priv = XFBURN_SETTINGS_GET_PRIVATE (instance);
Setting *setting;
setting = g_new0 (Setting, 1);
setting->type = SETTING_TYPE_STRING;
setting->value.string = g_strdup (value);
- g_hash_table_replace (settings, (gpointer) key, (gpointer) setting);
+ g_hash_table_replace (priv->settings, (gpointer) key, (gpointer) setting);
}
Modified: xfburn/trunk/xfburn/xfburn-settings.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-settings.h 2006-07-06 21:19:27 UTC (rev
22287)
+++ xfburn/trunk/xfburn/xfburn-settings.h 2006-07-07 07:13:00 UTC (rev
22288)
@@ -24,9 +24,33 @@
#include <config.h>
#endif /* !HAVE_CONFIG_H */
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+#define XFBURN_TYPE_SETTINGS (xfburn_settings_get_type ())
+#define XFBURN_SETTINGS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o),
XFBURN_TYPE_SETTINGS, XfburnSettings))
+#define XFBURN_SETTINGS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k),
XFBURN_TYPE_SETTINGS, XfburnSettingsClass))
+#define XFBURN_IS_SETTINGS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o),
XFBURN_TYPE_SETTINGS))
+#define XFBURN_IS_SETTINGS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k),
XFBURN_TYPE_SETTINGS))
+#define XFBURN_SETTINGS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o),
XFBURN_TYPE_SETTINGS, XfburnSettingsClass))
+typedef struct XfburnSettingsPrivate XfburnSettingsPrivate;
+
+typedef struct
+{
+ GObject parent;
+} XfburnSettings;
+
+typedef struct
+{
+ GObjectClass parent_class;
+} XfburnSettingsClass;
+
+GType xfburn_settings_get_type ();
+
void xfburn_settings_init ();
+void xfburn_settings_free ();
void xfburn_settings_flush ();
-void xfburn_settings_free ();
gint xfburn_settings_get_boolean (const gchar *key, gboolean fallback);
gint xfburn_settings_get_int (const gchar *key, gint fallback);
@@ -36,4 +60,5 @@
void xfburn_settings_set_int (const gchar *key, gint value);
void xfburn_settings_set_string (const gchar *key, const gchar *value);
+G_END_DECLS
#endif
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits