commit a68cfee12a1123092865e3f2b5155c5d76eb1404
Author: phantomjinx <[email protected]>
Date: Sat Jan 21 19:08:32 2012 +0000
Get the preference window to appear correctly
* Window available as separate dialog from sj edit menu or from the gtkpod
preference window.
plugins/sjcd/plugin.c | 43 ++++++++++-
plugins/sjcd/plugin.h | 9 ++
plugins/sjcd/sj-prefs.c | 187 ++++++++++++++++++++++++++---------------------
plugins/sjcd/sj-prefs.h | 4 +-
4 files changed, 157 insertions(+), 86 deletions(-)
---
diff --git a/plugins/sjcd/plugin.c b/plugins/sjcd/plugin.c
index 08bfaf3..e1972cf 100644
--- a/plugins/sjcd/plugin.c
+++ b/plugins/sjcd/plugin.c
@@ -31,10 +31,17 @@
#endif
#include <glib.h>
+#include <libanjuta/interfaces/ianjuta-preferences.h>
#include "libgtkpod/gtkpod_app_iface.h"
+#include "libgtkpod/stock_icons.h"
#include "libgtkpod/directories.h"
#include "plugin.h"
#include "sj-main.h"
+#include "sj-prefs.h"
+
+#define PREFERENCE_ICON "sjcd-playlist-category"
+#define PREFERENCE_ICON_STOCK_ID "sjcd-preference-icon"
+#define TAB_NAME N_("Sound Juicer")
/* Parent class. Part of standard class definition */
static gpointer parent_class;
@@ -47,8 +54,8 @@ static gboolean activate_plugin(AnjutaPlugin *plugin) {
GtkActionGroup* action_group;
/* Prepare the icons for the playlist */
-// register_icon_path(get_plugin_dir(), "sjcd");
-// register_stock_icon(PREFERENCE_ICON, PREFERENCE_ICON_STOCK_ID);
+ register_icon_path(get_plugin_dir(), "sjcd");
+ register_stock_icon(PREFERENCE_ICON, PREFERENCE_ICON_STOCK_ID);
sjcd_plugin = (SJCDPlugin*) plugin;
ui = anjuta_shell_get_ui(plugin->shell, NULL);
@@ -102,7 +109,39 @@ static void sjcd_plugin_class_init(GObjectClass *klass) {
plugin_class->deactivate = deactivate_plugin;
}
+static void ipreferences_merge(IAnjutaPreferences* ipref, AnjutaPreferences*
prefs, GError** e) {
+ GdkPixbuf *pixbuf;
+ GError *error = NULL;
+
+ SJCDPlugin* plugin = SJCD_PLUGIN(ipref);
+ plugin->prefs = init_sjcd_preferences();
+ if (plugin->prefs == NULL)
+ return;
+
+ pixbuf = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(),
PREFERENCE_ICON, 48, 0, &error);
+
+ if (!pixbuf) {
+ g_warning (N_("Couldn't load icon: %s"), error->message);
+ g_error_free(error);
+ }
+
+ anjuta_preferences_dialog_add_page(ANJUTA_PREFERENCES_DIALOG
(anjuta_preferences_get_dialog (prefs)), "gtkpod-track-display-settings",
_(TAB_NAME), pixbuf, plugin->prefs);
+ g_object_unref(pixbuf);
+}
+
+static void ipreferences_unmerge(IAnjutaPreferences* ipref, AnjutaPreferences*
prefs, GError** e) {
+ anjuta_preferences_remove_page(prefs, TAB_NAME);
+ SJCDPlugin* plugin = SJCD_PLUGIN(ipref);
+ gtk_widget_destroy(plugin->prefs);
+}
+
+static void ipreferences_iface_init(IAnjutaPreferencesIface* iface) {
+ iface->merge = ipreferences_merge;
+ iface->unmerge = ipreferences_unmerge;
+}
+
ANJUTA_PLUGIN_BEGIN (SJCDPlugin, sjcd_plugin);
+ANJUTA_PLUGIN_ADD_INTERFACE(ipreferences, IANJUTA_TYPE_PREFERENCES);
ANJUTA_PLUGIN_END;
ANJUTA_SIMPLE_PLUGIN (SJCDPlugin, sjcd_plugin)
diff --git a/plugins/sjcd/plugin.h b/plugins/sjcd/plugin.h
index 6e85e0b..978b150 100644
--- a/plugins/sjcd/plugin.h
+++ b/plugins/sjcd/plugin.h
@@ -36,6 +36,14 @@
#include <libanjuta/anjuta-plugin.h>
+extern GType sjcd_plugin_get_type (GTypeModule *module);
+#define SJCD_TYPE_PLUGIN (sjcd_plugin_get_type (NULL))
+#define SJCD_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o),
SJCD_TYPE_PLUGIN, SJCDPlugin))
+#define SJCD_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k),
SJCD_TYPE_PLUGIN, SJCDPluginClass))
+#define SJCD_IS_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o),
SJCD_TYPE_PLUGIN))
+#define SJCD_IS_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k),
SJCD_TYPE_PLUGIN))
+#define SJCD_PLUGIN_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o),
SJCD_TYPE_PLUGIN, SJCDPluginClass))
+
typedef struct _SJCDPlugin SJCDPlugin;
typedef struct _SJCDPluginClass SJCDPluginClass;
@@ -44,6 +52,7 @@ struct _SJCDPlugin {
gint uiid;
GtkWidget *sj_view;
GtkActionGroup *action_group;
+ GtkWidget *prefs;
};
struct _SJCDPluginClass {
diff --git a/plugins/sjcd/sj-prefs.c b/plugins/sjcd/sj-prefs.c
index 726c5c5..296392f 100644
--- a/plugins/sjcd/sj-prefs.c
+++ b/plugins/sjcd/sj-prefs.c
@@ -39,8 +39,6 @@
#include "sj-extracting.h"
#include "sj-prefs.h"
-extern GtkBuilder *builder;
-
static GtkWidget *audio_profile;
static GtkWidget *cd_option, *path_option, *file_option, *basepath_fcb,
*check_strip, *check_eject, *check_open;
static GtkWidget *path_example_label;
@@ -87,6 +85,7 @@ void prefs_profile_changed (GtkWidget *widget, gpointer
user_data)
char *media_type;
gtk_tree_model_get (GTK_TREE_MODEL (model), &iter,
0, &media_type, -1);
+
g_settings_set_string (sj_settings, SJ_SETTINGS_AUDIO_PROFILE,
media_type);
g_free (media_type);
}
@@ -444,98 +443,120 @@ static GtkWidget *sj_audio_profile_chooser_new(void)
return GTK_WIDGET (combo_box);
}
+static GtkWidget *create_preferences_dialog() {
+ GtkWidget *prefs_dialog;
+ const char *labels[] = { "cd_label", "path_label", "folder_label",
"file_label", "profile_label" };
+ guint i;
+ GtkSizeGroup *group;
+ GtkWidget *box;
+
+ prefs_dialog = GET_WIDGET ("prefs_dialog");
+ box = GET_WIDGET ("hack_hbox");
+ g_assert (prefs_dialog != NULL);
+ g_object_add_weak_pointer (G_OBJECT (prefs_dialog), (gpointer)&prefs_dialog);
+
+ gtk_window_set_transient_for (GTK_WINDOW (prefs_dialog), GTK_WINDOW
(gtkpod_app));
+
+ group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ for (i = 0; i < G_N_ELEMENTS (labels); i++) {
+ GtkWidget *widget;
+ widget = GET_WIDGET (labels[i]);
+ if (widget) {
+ gtk_size_group_add_widget (group, widget);
+ } else {
+ g_warning ("Widget %s not found", labels[i]);
+ }
+ }
+ g_object_unref (group);
+
+ cd_option = GET_WIDGET ("cd_option");
+ basepath_fcb = GET_WIDGET ("path_chooser");
+ path_option = GET_WIDGET ("path_option");
+ file_option = GET_WIDGET ("file_option");
+ #if 0
+ /* FIXME: This cannot be currently used, because aufio profile selector
+ * from gnome-media-profiles package is not fully qualified widget.
+ * Once gnome-media package is updated, this widget can be created
+ * using GtkBuilder. */
+ audio_profile = GET_WIDGET ("audio_profile");
+ #else
+ audio_profile = sj_audio_profile_chooser_new();
+ g_signal_connect (G_OBJECT (audio_profile), "changed",
+ G_CALLBACK (prefs_profile_changed), NULL);
+ gtk_box_pack_start (GTK_BOX (box), audio_profile, TRUE, TRUE, 0);
+ gtk_widget_show (audio_profile);
+ #endif
+ check_strip = GET_WIDGET ("check_strip");
+ check_eject = GET_WIDGET ("check_eject");
+ check_open = GET_WIDGET ("check_open");
+ path_example_label = GET_WIDGET ("path_example_label");
+
+ sj_add_default_dirs (GTK_FILE_CHOOSER (basepath_fcb));
+ populate_pattern_combo (GTK_COMBO_BOX (path_option), path_patterns);
+ g_signal_connect (path_option, "changed", G_CALLBACK
(prefs_path_option_changed), NULL);
+ populate_pattern_combo (GTK_COMBO_BOX (file_option), file_patterns);
+ g_signal_connect (file_option, "changed", G_CALLBACK
(prefs_file_option_changed), NULL);
+
+ g_signal_connect (cd_option, "drive-changed", G_CALLBACK
(prefs_drive_changed), NULL);
+
+ /* Connect to GSettings to update the UI */
+ g_settings_bind (sj_settings, SJ_SETTINGS_EJECT, G_OBJECT (check_eject),
"active", G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind (sj_settings, SJ_SETTINGS_OPEN, G_OBJECT (check_open),
"active", G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind (sj_settings, SJ_SETTINGS_STRIP, G_OBJECT (check_strip),
"active", G_SETTINGS_BIND_DEFAULT);
+ g_signal_connect (G_OBJECT (sj_settings), "changed::"SJ_SETTINGS_DEVICE,
+ (GCallback)device_changed_cb, NULL);
+ g_signal_connect (G_OBJECT (sj_settings), "changed::"SJ_SETTINGS_BASEURI,
+ (GCallback)baseuri_changed_cb, NULL);
+ g_signal_connect (G_OBJECT (sj_settings),
"changed::"SJ_SETTINGS_AUDIO_PROFILE,
+ (GCallback)audio_profile_changed_cb, NULL);
+ g_signal_connect (G_OBJECT (sj_settings),
"changed::"SJ_SETTINGS_PATH_PATTERN,
+ (GCallback)path_pattern_changed_cb, NULL);
+ g_signal_connect (G_OBJECT (sj_settings),
"changed::"SJ_SETTINGS_FILE_PATTERN,
+ (GCallback)file_pattern_changed_cb, NULL);
+ g_signal_connect (G_OBJECT (sj_settings), "changed::"SJ_SETTINGS_STRIP,
+ (GCallback)strip_changed_cb, NULL);
+
+ g_signal_connect (extractor, "notify::profile", pattern_label_update, NULL);
+
+ baseuri_changed_cb (sj_settings, SJ_SETTINGS_BASEURI, NULL);
+ audio_profile_changed_cb (sj_settings, SJ_SETTINGS_AUDIO_PROFILE, NULL);
+ file_pattern_changed_cb (sj_settings, SJ_SETTINGS_FILE_PATTERN, NULL);
+ path_pattern_changed_cb (sj_settings, SJ_SETTINGS_PATH_PATTERN, NULL);
+ device_changed_cb (sj_settings, SJ_SETTINGS_DEVICE, NULL);
+
+ return prefs_dialog;
+}
+
/**
* Clicked on Preferences in the UI
*/
G_MODULE_EXPORT void on_edit_preferences_cb (GtkMenuItem *item, gpointer
user_data)
{
static GtkWidget *prefs_dialog = NULL;
-
if (prefs_dialog) {
gtk_window_present (GTK_WINDOW (prefs_dialog));
} else {
- const char *labels[] = { "cd_label", "path_label", "folder_label",
"file_label", "profile_label" };
- guint i;
- GtkSizeGroup *group;
- GtkWidget *box;
-
- prefs_dialog = GET_WIDGET ("prefs_dialog");
- box = GET_WIDGET ("hack_hbox");
- g_assert (prefs_dialog != NULL);
- g_object_add_weak_pointer (G_OBJECT (prefs_dialog),
(gpointer)&prefs_dialog);
-
- gtk_window_set_transient_for (GTK_WINDOW (prefs_dialog), GTK_WINDOW
(gtkpod_app));
-
- group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
- for (i = 0; i < G_N_ELEMENTS (labels); i++) {
- GtkWidget *widget;
- widget = GET_WIDGET (labels[i]);
- if (widget) {
- gtk_size_group_add_widget (group, widget);
- } else {
- g_warning ("Widget %s not found", labels[i]);
- }
- }
- g_object_unref (group);
-
- cd_option = GET_WIDGET ("cd_option");
- basepath_fcb = GET_WIDGET ("path_chooser");
- path_option = GET_WIDGET ("path_option");
- file_option = GET_WIDGET ("file_option");
-#if 0
- /* FIXME: This cannot be currently used, because aufio profile selector
- * from gnome-media-profiles package is not fully qualified
widget.
- * Once gnome-media package is updated, this widget can be
created
- * using GtkBuilder. */
- audio_profile = GET_WIDGET ("audio_profile");
-#else
- audio_profile = sj_audio_profile_chooser_new();
- g_signal_connect (G_OBJECT (audio_profile), "changed",
- G_CALLBACK (prefs_profile_changed), NULL);
- gtk_box_pack_start (GTK_BOX (box), audio_profile, TRUE, TRUE, 0);
- gtk_widget_show (audio_profile);
-#endif
- check_strip = GET_WIDGET ("check_strip");
- check_eject = GET_WIDGET ("check_eject");
- check_open = GET_WIDGET ("check_open");
- path_example_label = GET_WIDGET ("path_example_label");
-
- sj_add_default_dirs (GTK_FILE_CHOOSER (basepath_fcb));
- populate_pattern_combo (GTK_COMBO_BOX (path_option), path_patterns);
- g_signal_connect (path_option, "changed", G_CALLBACK
(prefs_path_option_changed), NULL);
- populate_pattern_combo (GTK_COMBO_BOX (file_option), file_patterns);
- g_signal_connect (file_option, "changed", G_CALLBACK
(prefs_file_option_changed), NULL);
-
- g_signal_connect (cd_option, "drive-changed", G_CALLBACK
(prefs_drive_changed), NULL);
-
- /* Connect to GSettings to update the UI */
- g_settings_bind (sj_settings, SJ_SETTINGS_EJECT, G_OBJECT (check_eject),
"active", G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (sj_settings, SJ_SETTINGS_OPEN, G_OBJECT (check_open),
"active", G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (sj_settings, SJ_SETTINGS_STRIP, G_OBJECT (check_strip),
"active", G_SETTINGS_BIND_DEFAULT);
- g_signal_connect (G_OBJECT (sj_settings), "changed::"SJ_SETTINGS_DEVICE,
- (GCallback)device_changed_cb, NULL);
- g_signal_connect (G_OBJECT (sj_settings), "changed::"SJ_SETTINGS_BASEURI,
- (GCallback)baseuri_changed_cb, NULL);
- g_signal_connect (G_OBJECT (sj_settings),
"changed::"SJ_SETTINGS_AUDIO_PROFILE,
- (GCallback)audio_profile_changed_cb, NULL);
- g_signal_connect (G_OBJECT (sj_settings),
"changed::"SJ_SETTINGS_PATH_PATTERN,
- (GCallback)path_pattern_changed_cb, NULL);
- g_signal_connect (G_OBJECT (sj_settings),
"changed::"SJ_SETTINGS_FILE_PATTERN,
- (GCallback)file_pattern_changed_cb, NULL);
- g_signal_connect (G_OBJECT (sj_settings), "changed::"SJ_SETTINGS_STRIP,
- (GCallback)strip_changed_cb, NULL);
-
- g_signal_connect (extractor, "notify::profile",
pattern_label_update, NULL);
-
- baseuri_changed_cb (sj_settings, SJ_SETTINGS_BASEURI, NULL);
- audio_profile_changed_cb (sj_settings, SJ_SETTINGS_AUDIO_PROFILE, NULL);
- file_pattern_changed_cb (sj_settings, SJ_SETTINGS_FILE_PATTERN, NULL);
- path_pattern_changed_cb (sj_settings, SJ_SETTINGS_PATH_PATTERN, NULL);
- device_changed_cb (sj_settings, SJ_SETTINGS_DEVICE, NULL);
-
+ prefs_dialog = create_preferences_dialog();
g_signal_connect (GTK_DIALOG (prefs_dialog), "response", G_CALLBACK
(on_response), NULL);
-
gtk_widget_show_all (prefs_dialog);
}
}
+GtkWidget *init_sjcd_preferences()
+{
+ GtkWidget *prefs_dialog;
+ GtkWidget *container;
+ GtkWidget *vbox;
+ GList *children = NULL;
+
+ prefs_dialog = create_preferences_dialog();
+ container = gtk_dialog_get_content_area(GTK_DIALOG(prefs_dialog));
+ children = gtk_container_get_children(GTK_CONTAINER(container));
+ g_return_val_if_fail(children, NULL);
+
+ vbox = GTK_WIDGET(children->data);
+ g_object_ref(vbox);
+ gtk_container_remove(GTK_CONTAINER(container), vbox);
+
+ return vbox;
+}
diff --git a/plugins/sjcd/sj-prefs.h b/plugins/sjcd/sj-prefs.h
index fe8cc1a..7aaa97d 100644
--- a/plugins/sjcd/sj-prefs.h
+++ b/plugins/sjcd/sj-prefs.h
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright (C) 2003 Ross Burton <[email protected]>
*
* Sound Juicer - sj-prefs.h
@@ -23,6 +23,8 @@
#ifndef SJ_PREFS_H
#define SJ_PREFS_H
+GtkWidget *init_sjcd_preferences();
+
extern const char* prefs_get_default_device ();
void on_edit_preferences_cb (GtkMenuItem *item, gpointer user_data);
gboolean cd_drive_exists (const char *device);
------------------------------------------------------------------------------
Virtualization & Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2