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

Reply via email to