summaryrefslogtreecommitdiff
path: root/profiles/audio-profiles-edit.c
diff options
context:
space:
mode:
Diffstat (limited to 'profiles/audio-profiles-edit.c')
-rw-r--r--profiles/audio-profiles-edit.c988
1 files changed, 0 insertions, 988 deletions
diff --git a/profiles/audio-profiles-edit.c b/profiles/audio-profiles-edit.c
deleted file mode 100644
index 4f1cb98..0000000
--- a/profiles/audio-profiles-edit.c
+++ /dev/null
@@ -1,988 +0,0 @@
-/* gm_audio-profiles-edit.c: widget for a profiles edit dialog */
-
-/*
- * Copyright (C) 2003 Thomas Vander Stichele
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <glib/gi18n-lib.h>
-#include <gtk/gtk.h>
-#include <gst/gst.h>
-
-#include "audio-profile.h"
-#include "audio-profile-edit.h"
-#include "audio-profile-private.h"
-#include "gmp-util.h"
-#include "audio-profiles-edit.h"
-
-#define MANAGE_STOCK_EDIT "manage-edit"
-
-struct _GMAudioProfilesEditPrivate
-{
- MateConfClient *conf;
- GtkWidget *new_button;
- GtkWidget *new_profile_dialog;
- GtkWidget *edit_button;
- GtkWidget *delete_button;
- GtkWindow *transient_parent;
- GtkWidget *manage_profiles_list; /* FIXME: rename this one ? */
- GList *deleted_profiles_list; /* pass through to delete confirm dialog */
-};
-
-static void gm_audio_profiles_edit_init (GMAudioProfilesEdit *edit);
-static void gm_audio_profiles_edit_class_init (GMAudioProfilesEditClass *klass);
-static void gm_audio_profiles_edit_finalize (GObject *object);
-
-
-/* profile list column names */
-enum
-{
- COLUMN_NAME,
- COLUMN_PROFILE_OBJECT,
- COLUMN_LAST
-};
-
-G_DEFINE_TYPE (GMAudioProfilesEdit, gm_audio_profiles_edit, GTK_TYPE_DIALOG);
-
-/* register custom edit stock icon */
-static void
-gm_audio_profile_manage_register_stock (void)
-{
- static gboolean registered = FALSE;
-
- if (!registered)
- {
- GtkIconFactory *factory;
- GtkIconSet *icons;
-
- static const GtkStockItem edit_item [] = {
- { MANAGE_STOCK_EDIT, N_("_Edit"), 0, 0, GETTEXT_PACKAGE },
- };
-
- icons = gtk_icon_factory_lookup_default (GTK_STOCK_PREFERENCES);
- factory = gtk_icon_factory_new ();
- gtk_icon_factory_add (factory, MANAGE_STOCK_EDIT, icons);
- gtk_icon_factory_add_default (factory);
- gtk_stock_add (edit_item, 1);
- registered = TRUE;
- }
-}
-
-/* widget callbacks */
-
-static void
-count_selected_profiles_func (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer data)
-{
- int *count = data;
-
- *count += 1;
-}
-
-static void
-selection_changed_callback (GtkTreeSelection *selection,
- GMAudioProfilesEditPrivate *priv)
-{
- int count;
-
- count = 0;
- gtk_tree_selection_selected_foreach (selection,
- count_selected_profiles_func,
- &count);
-
- gtk_widget_set_sensitive (priv->edit_button,
- count == 1);
- gtk_widget_set_sensitive (priv->delete_button,
- count > 0);
-}
-
-static void
-profile_activated_callback (GtkTreeView *tree_view,
- GtkTreePath *path,
- GtkTreeViewColumn *column,
- gpointer *ptr)
-{
- GMAudioProfile *profile;
- GtkTreeIter iter;
- GtkTreeModel *model;
- GtkWidget *edit_dialog;
-
- model = gtk_tree_view_get_model (tree_view);
-
- if (!gtk_tree_model_get_iter (model, &iter, path))
- return;
-
- profile = NULL;
- gtk_tree_model_get (model,
- &iter,
- COLUMN_PROFILE_OBJECT,
- &profile,
- -1);
- if (profile) {
- /* FIXME: is this the right function name ? */
- edit_dialog = gm_audio_profile_edit_new ((MateConfClient *) profile, gm_audio_profile_get_id (profile));
- g_return_if_fail (edit_dialog != NULL);
- gtk_widget_show_all (GTK_WIDGET (edit_dialog));
- } else {
- g_warning ("Could not retrieve profile");
- }
-}
-
-static void
-fix_button_align (GtkWidget *button)
-{
- GtkWidget *child;
-
- child = gtk_bin_get_child (GTK_BIN (button));
-
- if (GTK_IS_ALIGNMENT (child))
- g_object_set (G_OBJECT (child), "xalign", 0.0, NULL);
- else if (GTK_IS_LABEL (child))
- g_object_set (G_OBJECT (child), "xalign", 0.0, NULL);
-}
-
-static void
-list_selected_profiles_func (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer data)
-{
- GList **list = data;
- GMAudioProfile *profile = NULL;
-
- gtk_tree_model_get (model,
- iter,
- COLUMN_PROFILE_OBJECT,
- &profile,
- -1);
-
- *list = g_list_prepend (*list, profile);
-}
-
-static void
-free_profiles_list (gpointer data)
-{
- GList *profiles = data;
-
- g_list_foreach (profiles, (GFunc) g_object_unref, NULL);
- g_list_free (profiles);
-}
-
-/* refill profile treeview
- * recreates the profile tree view from scratch */
-static void
-refill_profile_treeview (GtkWidget *tree_view)
-{
- GList *profiles;
- GList *tmp;
- GtkTreeSelection *selection;
- GtkListStore *model;
- GList *selected_profiles;
- GtkTreeIter iter;
-
- GST_DEBUG ("refill_profile_treeview: start\n");
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
- model = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view)));
-
- selected_profiles = NULL;
- gtk_tree_selection_selected_foreach (selection,
- list_selected_profiles_func,
- &selected_profiles);
-
- gtk_list_store_clear (model);
-
- profiles = gm_audio_profile_get_list ();
- tmp = profiles;
- while (tmp != NULL)
- {
- GMAudioProfile *profile = tmp->data;
-
- GST_DEBUG ("refill: appending profile with name %s\n",
- gm_audio_profile_get_name (profile));
- gtk_list_store_append (model, &iter);
-
- /* We are assuming the list store will hold a reference to
- * the profile object, otherwise we would be in danger of disappearing
- * profiles.
- */
- gtk_list_store_set (model,
- &iter,
- COLUMN_NAME, gm_audio_profile_get_name (profile),
- COLUMN_PROFILE_OBJECT, profile,
- -1);
-
- if (g_list_find (selected_profiles, profile) != NULL)
- gtk_tree_selection_select_iter (selection, &iter);
-
- tmp = tmp->next;
- }
-
- if (selected_profiles == NULL)
- {
- /* Select first row */
- GtkTreePath *path;
-
- path = gtk_tree_path_new ();
- gtk_tree_path_append_index (path, 0);
- gtk_tree_selection_select_path (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)), path);
- gtk_tree_path_free (path);
- }
-
- free_profiles_list (selected_profiles);
- GST_DEBUG ("refill_profile_treeview: stop\n");
-}
-
-
-/* create a profile list widget */
-static GtkWidget*
-create_profile_list (void)
-{
- GtkTreeSelection *selection;
- GtkCellRenderer *cell;
- GtkWidget *tree_view;
- GtkTreeViewColumn *column;
- GtkListStore *model;
-
- model = gtk_list_store_new (COLUMN_LAST,
- G_TYPE_STRING,
- G_TYPE_OBJECT);
-
- tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
- //terminal_util_set_atk_name_description (tree_view, _("Profile list"), NULL);
-
- g_object_unref (G_OBJECT (model));
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
-
- gtk_tree_selection_set_mode (GTK_TREE_SELECTION (selection),
- GTK_SELECTION_MULTIPLE);
-
- refill_profile_treeview (tree_view);
-
- cell = gtk_cell_renderer_text_new ();
-
- g_object_set (G_OBJECT (cell),
- "xpad", 2,
- NULL);
-
- column = gtk_tree_view_column_new_with_attributes (NULL,
- cell,
- "text", COLUMN_NAME,
- NULL);
-
- gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view),
- GTK_TREE_VIEW_COLUMN (column));
-
- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_view), FALSE);
-
- return tree_view;
-}
-
-/* profile callbacks */
-static void
-on_profile_changed (GMAudioProfile *profile,
- const GMAudioSettingMask *mask,
- GtkWidget *tree_view)
-{
- GtkListStore *list_store;
- GtkTreeIter iter;
- GtkTreeModel *tree_model;
- gboolean valid;
-
- if (mask->name)
- {
- tree_model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view));
- list_store = GTK_LIST_STORE (tree_model);
-
- /* Get the first iter in the list */
- valid = gtk_tree_model_get_iter_first (tree_model, &iter);
-
- while (valid)
- {
- /* Walk through the list, reading each row */
- GMAudioProfile *model_profile;
-
- /* Make sure you terminate calls to gtk_tree_model_get()
- * with a '-1' value
- */
- gtk_tree_model_get (tree_model, &iter,
- COLUMN_PROFILE_OBJECT, &model_profile,
- -1);
-
- if (profile == model_profile)
- {
- /* bingo ! */
- gtk_list_store_set (list_store,
- &iter,
- COLUMN_NAME, gm_audio_profile_get_name (profile),
- -1);
- }
- valid = gtk_tree_model_iter_next (tree_model, &iter);
- }
- }
-}
-
-/* ui callbacks */
-static void new_button_clicked(GtkWidget* button, GMAudioProfilesEdit* dialog)
-{
- gm_audio_profiles_edit_new_profile(dialog, GTK_WINDOW(dialog));
-}
-
-static void edit_button_clicked(GtkWidget* button, GMAudioProfilesEdit* dialog)
-{
- GtkTreeSelection* selection;
- GList* profiles;
- GMAudioProfile* profile;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->priv->manage_profiles_list));
-
- profiles = NULL;
- gtk_tree_selection_selected_foreach (selection,
- list_selected_profiles_func,
- &profiles);
-
- if (profiles == NULL)
- return; /* edit button was supposed to be insensitive... */
-
- /* only one selection ? */
- if (profiles->next == NULL)
- {
- GtkWidget *edit_dialog;
- profile = (GMAudioProfile *) profiles->data;
- /* connect to profile changed signal so we can update the name in the list
- * if it gets changed */
- g_signal_connect_object (G_OBJECT (profile), "changed",
- G_CALLBACK (on_profile_changed),
- dialog->priv->manage_profiles_list, 0);
-
- /* FIXME: is this the right function name ? */
- edit_dialog = gm_audio_profile_edit_new ((MateConfClient *)profile, gm_audio_profile_get_id (profile));
- g_return_if_fail (edit_dialog != NULL);
- gtk_window_set_modal (GTK_WINDOW (edit_dialog), TRUE);
- gtk_widget_show_all (GTK_WIDGET (edit_dialog));
- }
- else
- {
- /* edit button was supposed to be insensitive due to multiple
- * selection
- */
- }
-
- g_list_foreach (profiles, (GFunc) g_object_unref, NULL);
- g_list_free (profiles);
-}
-
-/* ui callback for confirmation from delete_button_clicked */
-static void
-delete_confirm_response (GtkWidget *confirm_dialog,
- int response_id,
- GMAudioProfilesEdit *dialog)
-{
- GList *deleted_profiles;
- GError *err;
-
- deleted_profiles = dialog->priv->deleted_profiles_list;
-
- err = NULL;
- if (response_id == GTK_RESPONSE_ACCEPT)
- {
- gm_audio_profile_delete_list (dialog->priv->conf, deleted_profiles,
- &err);
- }
-
- if (err != NULL)
- {
- g_print ("FIXME: GError on deletion: %s\n", err->message);
- g_error_free (err);
- }
-
- dialog->priv->deleted_profiles_list = NULL;
-
- /* reget from MateConf and refill tree view */
- gm_audio_profile_sync_list (FALSE, NULL);
- refill_profile_treeview (dialog->priv->manage_profiles_list);
-
- gtk_widget_destroy (confirm_dialog);
-}
-
-static void
-delete_button_clicked (GtkWidget *button,
- GMAudioProfilesEdit *dialog)
-{
- GtkTreeSelection *selection;
- GList *deleted_profiles;
- GtkWidget *confirm_dialog;
- GString *str;
- GList *tmp;
- int count;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->priv->manage_profiles_list));
-
- deleted_profiles = NULL;
- gtk_tree_selection_selected_foreach (selection,
- list_selected_profiles_func,
- &deleted_profiles);
-
- count = g_list_length (deleted_profiles);
- if (count > 1)
- {
- str = g_string_new (NULL);
- /* the first argument will never be used since we only run for count > 1 */
- g_string_printf (str, ngettext ("Delete this profile?\n",
- "Delete these %d profiles?\n", count), count);
-
- tmp = deleted_profiles;
- while (tmp != NULL)
- {
- g_string_append (str, " ");
- g_string_append (str,
- gm_audio_profile_get_name (tmp->data));
- if (tmp->next)
- g_string_append (str, "\n");
-
- tmp = tmp->next;
- }
- }
- else
- {
- str = g_string_new (NULL);
- g_string_printf (str,
- _("Delete profile \"%s\"?"),
- gm_audio_profile_get_name (deleted_profiles->data));
- }
-
- confirm_dialog = gtk_message_dialog_new (GTK_WINDOW (dialog),
- GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_QUESTION,
- GTK_BUTTONS_NONE,
- "%s",
- str->str);
- g_string_free (str, TRUE);
-
- gtk_dialog_add_buttons (GTK_DIALOG (confirm_dialog),
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_REJECT,
- GTK_STOCK_DELETE,
- GTK_RESPONSE_ACCEPT,
- NULL);
-
- gtk_dialog_set_default_response (GTK_DIALOG (confirm_dialog),
- GTK_RESPONSE_ACCEPT);
-
- gtk_window_set_title (GTK_WINDOW (confirm_dialog), _("Delete Profile"));
- gtk_window_set_resizable (GTK_WINDOW (confirm_dialog), FALSE);
-
- /* FIXME: what's this ? */
- dialog->priv->deleted_profiles_list = deleted_profiles;
-
- g_signal_connect (G_OBJECT (confirm_dialog), "response",
- G_CALLBACK (delete_confirm_response),
- dialog);
- g_return_if_fail (confirm_dialog != NULL);
- gtk_widget_show_all (confirm_dialog);
- gtk_dialog_run (GTK_DIALOG (confirm_dialog));
-}
-
-/* ui callbacks */
-static void
-on_gm_audio_profiles_edit_response (GtkWidget *dialog,
- int id,
- void *data)
-{
- if (id == GTK_RESPONSE_HELP)
- {
- GError *err = NULL;
-
- gtk_show_uri (gtk_widget_get_screen (GTK_WIDGET (dialog)),
- "ghelp:mate-audio-profiles?mate-audio-profiles-profile-edit",
- gtk_get_current_event_time (),
- &err);
-
- if (err)
- {
- gmp_util_show_error_dialog (GTK_WINDOW (dialog), NULL,
- _("There was an error displaying help: %s"), err->message);
- g_error_free (err);
- }
- return;
- }
-
- gtk_widget_destroy (dialog);
-}
-
-static void
-on_gm_audio_profiles_edit_destroy (GtkWidget *dialog, gpointer *user_data)
-{
- GST_DEBUG ("on_destroy: destroying dialog widget\n");
- /* FIXME: set stuff to NULL here */
-}
-
-#if 0
-/* MateConf notification callback for profile_list */
-static void
-gm_audio_profiles_list_notify (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- GMAudioProfilesEdit *dialog;
-
- dialog = (GMAudioProfilesEdit *) user_data;
- GST_DEBUG ("profile_list changed, notified from mateconf, redrawing\n");
- /* refill the profile tree view */
-
- refill_profile_treeview (dialog->priv->manage_profiles_list);
-}
-#endif
-
-/* create a dialog widget from scratch */
-static void
-gm_audio_profiles_edit_init (GMAudioProfilesEdit *dialog)
-{
- GtkDialog *gdialog = GTK_DIALOG (dialog);
- GtkWidget *vbox;
- GtkWidget *label;
- GtkWidget *sw;
- GtkWidget *hbox;
- GtkWidget *bbox;
- GtkWidget *button;
- GtkTreeSelection *selection;
-
- /*
- dialog =
- gtk_dialog_new_with_buttons (_("Edit Profiles"),
- NULL,
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_STOCK_HELP,
- GTK_RESPONSE_HELP,
- GTK_STOCK_CLOSE,
- GTK_RESPONSE_ACCEPT,
- NULL);
- */
- // FIXME: GTK_DIALOG_DESTROY_WITH_PARENT,
- dialog->priv = G_TYPE_INSTANCE_GET_PRIVATE (dialog, GM_AUDIO_TYPE_PROFILES_EDIT, GMAudioProfilesEditPrivate);
-
- gtk_window_set_title (GTK_WINDOW (dialog), _("Edit MATE Audio Profiles"));
- gtk_window_set_default_size (GTK_WINDOW (dialog), 320, 240);
- gtk_dialog_add_buttons (GTK_DIALOG (dialog),
- GTK_STOCK_HELP,
- GTK_RESPONSE_HELP,
- GTK_STOCK_CLOSE,
- GTK_RESPONSE_ACCEPT,
- NULL);
-
-#if !GTK_CHECK_VERSION (2, 21, 8)
- gtk_dialog_set_has_separator (gdialog, FALSE);
-#endif
- gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
- gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_content_area (gdialog)), 2); /* 2 * 5 + 2 = 12 */
- gtk_container_set_border_width (GTK_CONTAINER (gtk_dialog_get_action_area (gdialog)), 5);
- gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_action_area (gdialog)), 6);
-
- g_signal_connect (GTK_DIALOG (dialog),
- "response",
- G_CALLBACK (on_gm_audio_profiles_edit_response),
- NULL);
-
- g_signal_connect (G_OBJECT (dialog),
- "destroy",
- G_CALLBACK (on_gm_audio_profiles_edit_destroy),
- NULL);
-
- vbox = gtk_vbox_new (FALSE, 6);
- gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
- gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (gdialog)),
- vbox, TRUE, TRUE, 0);
-
- /* FIXME
- hbox = gtk_hbox_new (FALSE, PADDING);
- gtk_box_pack_end (GTK_BOX (vbox),
- hbox, FALSE, FALSE, 0);
-
- app->manage_profiles_default_menu = profile_optionmenu_new ();
- g_signal_connect (G_OBJECT (app->manage_profiles_default_menu),
- "changed", G_CALLBACK (default_menu_changed),
- app);
-
- gtk_box_pack_start (GTK_BOX (hbox),
- label, TRUE, TRUE, 0);
-
- gtk_box_pack_end (GTK_BOX (hbox),
- app->manage_profiles_default_menu, FALSE, FALSE, 0);
- */
-
- hbox = gtk_hbox_new (FALSE, 6);
-
- label = gtk_label_new_with_mnemonic (_("_Profiles:"));
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (vbox),
- hbox, TRUE, TRUE, 0);
-
- dialog->priv->manage_profiles_list = create_profile_list ();
-
- g_signal_connect (G_OBJECT (dialog->priv->manage_profiles_list),
- "row_activated",
- G_CALLBACK (profile_activated_callback),
- NULL);
-
- sw = gtk_scrolled_window_new (NULL, NULL);
- /* FIXME
- terminal_util_set_labelled_by (GTK_WIDGET (dialog->priv->manage_profiles_list),
- GTK_LABEL (label));
- */
-
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
- GTK_SHADOW_IN);
-
- gtk_box_pack_start (GTK_BOX (hbox), sw, TRUE, TRUE, 0);
-
- gtk_container_add (GTK_CONTAINER (sw), dialog->priv->manage_profiles_list);
-
- gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
-
- gtk_label_set_mnemonic_widget (GTK_LABEL (label),
- dialog->priv->manage_profiles_list);
-
- bbox = gtk_vbutton_box_new ();
- gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_START);
- gtk_box_set_spacing (GTK_BOX (bbox), 6);
- gtk_box_pack_end (GTK_BOX (hbox), bbox, FALSE, FALSE, 0);
-
- button = gtk_button_new_from_stock (GTK_STOCK_NEW);
- fix_button_align (button);
- gtk_box_pack_start (GTK_BOX (bbox),
- button, FALSE, FALSE, 0);
- g_signal_connect (G_OBJECT (button), "clicked",
- G_CALLBACK (new_button_clicked), dialog);
- dialog->priv->new_button = button;
-/*
- terminal_util_set_atk_name_description (dialog->priv->new_button, NULL,
- _("Click to open new profile dialog"));
-*/
-
- gm_audio_profile_manage_register_stock ();
-
- button = gtk_button_new_from_stock (MANAGE_STOCK_EDIT);
- fix_button_align (button);
- gtk_box_pack_start (GTK_BOX (bbox),
- button, FALSE, FALSE, 0);
- g_signal_connect (G_OBJECT (button), "clicked",
- G_CALLBACK (edit_button_clicked), dialog);
- gtk_widget_set_sensitive (button, FALSE);
- dialog->priv->edit_button = button;
-/*
- terminal_util_set_atk_name_description (app->manage_profiles_edit_button, NULL,
- _("Click to open edit profile dialog"));
-*/
-
- button = gtk_button_new_from_stock (GTK_STOCK_DELETE);
- fix_button_align (button);
- gtk_box_pack_start (GTK_BOX (bbox),
- button, FALSE, FALSE, 0);
- g_signal_connect (G_OBJECT (button), "clicked",
- G_CALLBACK (delete_button_clicked), dialog);
- gtk_widget_set_sensitive (button, FALSE);
- dialog->priv->delete_button = button;
-/*
- terminal_util_set_atk_name_description (app->manage_profiles_delete_button, NULL,
- _("Click to delete selected profile"));
- */
-
- gtk_widget_grab_focus (dialog->priv->manage_profiles_list);
-
- /* Monitor selection for sensitivity */
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->priv->manage_profiles_list));
-
- selection_changed_callback (selection, dialog->priv);
- g_signal_connect (G_OBJECT (selection), "changed",
- G_CALLBACK (selection_changed_callback),
- dialog->priv);
-}
-
-static void
-gm_audio_profiles_edit_class_init (GMAudioProfilesEditClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = gm_audio_profiles_edit_finalize;
-
- g_type_class_add_private (object_class, sizeof (GMAudioProfilesEditPrivate));
-}
-
-static void
-gm_audio_profiles_edit_finalize (GObject *object)
-{
- GMAudioProfilesEdit *dialog;
-
- dialog = GM_AUDIO_PROFILES_EDIT (object);
- G_OBJECT_CLASS (gm_audio_profiles_edit_parent_class)->finalize (object);
-}
-
-GtkWidget*
-gm_audio_profiles_edit_new (MateConfClient *conf, GtkWindow *transient_parent)
-{
- GMAudioProfilesEdit *dialog;
- /*GError *err;*/
-
- dialog = g_object_new (GM_AUDIO_TYPE_PROFILES_EDIT, NULL);
-
- g_object_ref (G_OBJECT (conf));
- dialog->priv->conf = conf;
- /* set transient parent to itself if NULL */
- if (transient_parent)
- dialog->priv->transient_parent = transient_parent;
- else
- dialog->priv->transient_parent = GTK_WINDOW (dialog);
-
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
-
- /* subscribe to changes to profile list */
-/*
- err = NULL;
- GST_DEBUG ("gap_p_e_new: subscribing to profile_list changes\n");
- mateconf_client_notify_add (dialog->priv->conf,
- CONF_GLOBAL_PREFIX"/profile_list",
- gm_audio_profiles_list_notify,
- dialog,
- NULL, &err);
-
- if (err)
- {
- g_printerr (_("There was an error subscribing to notification of terminal profile list changes. (%s)\n"),
- err->message);
- g_error_free (err);
- }
-*/
- return GTK_WIDGET (dialog);
-}
-
-/*
- * creating a new profile from the Edit Profiles dialog
- */
-
-static void
-new_profile_response_callback (GtkWidget *new_profile_dialog,
- int response_id,
- GMAudioProfilesEdit *dialog)
-{
- if (response_id == GTK_RESPONSE_ACCEPT)
- {
- GtkWidget *name_entry;
- char *name;
- char *id;
- /*GtkWidget *base_option_menu;*/
- GMAudioProfile *new_profile;
- GList *profiles;
- GList *tmp;
- GtkWindow *transient_parent;
- GError *error;
-
- name_entry = g_object_get_data (G_OBJECT (new_profile_dialog), "name_entry");
- name = gtk_editable_get_chars (GTK_EDITABLE (name_entry), 0, -1);
- g_strstrip (name); /* name will be non empty after stripping */
-
- profiles = gm_audio_profile_get_list ();
- for (tmp = profiles; tmp != NULL; tmp = tmp->next)
- {
- GMAudioProfile *profile = tmp->data;
-
- if (strcmp (name, gm_audio_profile_get_name (profile)) == 0)
- break;
- }
- if (tmp)
- {
- gmp_util_run_error_dialog (GTK_WINDOW (new_profile_dialog),
- _("You already have a profile called \"%s\""), name);
- goto cleanup;
- }
- g_list_free (profiles);
-
-/*
- base_option_menu = g_object_get_data (G_OBJECT (new_profile_dialog), "base_option_menu");
- base_profile = profile_optionmenu_get_selected (base_option_menu);
-
- if (base_profile == NULL)
- {
- terminal_util_show_error_dialog (GTK_WINDOW (new_profile_dialog), NULL,
- _("The profile you selected as a base for your new profile no longer exists"));
- goto cleanup;
- }
-*/
- transient_parent = gtk_window_get_transient_for (GTK_WINDOW (new_profile_dialog));
-
-
- error = NULL;
- id = gm_audio_profile_create (name, dialog->priv->conf, &error);
- if (error)
- {
- g_print ("ERROR: %s\n", error->message);
- gmp_util_run_error_dialog (GTK_WINDOW (transient_parent),
- _("MateConf Error (FIXME): %s\n"),
- error->message);
- g_error_free (error);
- goto cleanup;
- }
- gtk_widget_destroy (new_profile_dialog);
-
- /* FIXME: hm, not very proud of having to unstatic this function */
- GST_DEBUG ("new profile callback: syncing list\n");
- //FIXME: in mate-terminal, it's TRUE, &n, which then gets overruled
- // by some other sync call with the new list
- //audio_profile_sync_list (TRUE, &n);
- gm_audio_profile_sync_list (FALSE, NULL);
- refill_profile_treeview (dialog->priv->manage_profiles_list);
-
- new_profile = gm_audio_profile_lookup (id);
- g_assert (new_profile != NULL);
-
- //audio_profile_edit (new_profile, transient_parent);
-
- cleanup:
- g_free (name);
- }
- else
- {
- gtk_widget_destroy (new_profile_dialog);
- }
- GST_DEBUG ("done creating new profile\n");
-}
-
-static void
-new_profile_name_entry_changed_callback (GtkEditable *editable, gpointer data)
-{
- char *name, *saved_name;
- GtkWidget *create_button;
-
- create_button = (GtkWidget*) data;
-
- saved_name = name = gtk_editable_get_chars (editable, 0, -1);
-
- /* make the create button sensitive only if something other than space has been set */
- while (*name != '\0' && g_ascii_isspace (*name))
- name++;
-
- gtk_widget_set_sensitive (create_button, *name != '\0' ? TRUE : FALSE);
-
- g_free (saved_name);
-}
-
-void gm_audio_profiles_edit_new_profile(GMAudioProfilesEdit* dialog, GtkWindow* transient_parent)
-{
- GtkWindow* old_transient_parent;
- GtkWidget* create_button;
- gint response;
- GError* error = NULL;
-
- if (dialog->priv->new_profile_dialog == NULL)
- {
- GtkBuilder* builder;
- GtkWidget* w;
- GtkWidget* wl;
- GtkWidget* create_button;
- GtkSizeGroup* size_group;
- GtkSizeGroup* size_group_labels;
-
- builder = gmp_util_load_builder_file("mate-audio-profile-new.ui", transient_parent, &error);
-
- if (error != NULL)
- {
- g_warning("%s", error->message);
- g_error_free(error);
- return;
- }
-
- dialog->priv->new_profile_dialog = GTK_WIDGET(gtk_builder_get_object(builder, "new-profile-dialog"));
- g_signal_connect(G_OBJECT (dialog->priv->new_profile_dialog), "response", G_CALLBACK(new_profile_response_callback), dialog);
-
- g_object_add_weak_pointer(G_OBJECT(dialog->priv->new_profile_dialog), (void**) &dialog->priv->new_profile_dialog);
-
- create_button = GTK_WIDGET(gtk_builder_get_object(builder, "new-profile-create-button"));
- g_object_set_data(G_OBJECT(dialog->priv->new_profile_dialog), "create_button", create_button);
- gtk_widget_set_sensitive(create_button, FALSE);
-
- size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
- size_group_labels = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
-
- /* the name entry */
- w = GTK_WIDGET(gtk_builder_get_object(builder, "new-profile-name-entry"));
- g_object_set_data (G_OBJECT(dialog->priv->new_profile_dialog), "name_entry", w);
- g_signal_connect(G_OBJECT(w), "changed", G_CALLBACK(new_profile_name_entry_changed_callback), create_button);
- gtk_entry_set_activates_default(GTK_ENTRY (w), TRUE);
- gtk_widget_grab_focus(w);
- // FIXME terminal_util_set_atk_name_description (w, _("Enter profile name"), NULL);
- gtk_size_group_add_widget(size_group, w);
-
- wl = GTK_WIDGET(gtk_builder_get_object (builder, "new-profile-name-label"));
- gtk_label_set_mnemonic_widget(GTK_LABEL(wl), w);
- // FIXME terminal_util_set_labelled_by (w, GTK_LABEL (wl));
- gtk_size_group_add_widget(size_group_labels, wl);
-
- #ifdef BASE
- /* the base profile option menu */
- w = GTK_WIDGET (gtk_builder_get_object(builder, "new-profile-base-option-menu"));
- g_object_set_data(G_OBJECT(dialog->priv->new_profile_dialog), "base_option_menu", w);
- // FIXME terminal_util_set_atk_name_description (w, _("Choose base profile"), NULL);
- //FIXME profile_optionmenu_refill (w);
- gtk_size_group_add_widget(size_group, w);
-
- wl = GTK_WIDGET(gtk_builder_get_object (builder, "new-profile-base-label"));
- gtk_label_set_mnemonic_widget(GTK_LABEL(wl), w);
- // FIXME terminal_util_set_labelled_by (w, GTK_LABEL (wl));
- gtk_size_group_add_widget(size_group_labels, wl);
- #endif
-
-
- /* gtk_dialog_set_default_response (GTK_DIALOG (dialog->priv->new_profile_dialog), GTK_RESPONSE_CREATE); */
-
- g_object_unref(G_OBJECT(size_group));
- g_object_unref(G_OBJECT(size_group_labels));
-
- g_object_unref(G_OBJECT(builder));
- }
-
- old_transient_parent = gtk_window_get_transient_for(GTK_WINDOW(dialog->priv->new_profile_dialog));
-
- if (old_transient_parent != transient_parent)
- {
- gtk_window_set_transient_for(GTK_WINDOW(dialog->priv->new_profile_dialog), transient_parent);
- gtk_widget_hide(dialog->priv->new_profile_dialog); /* re-show the window on its new parent */
- }
-
- create_button = g_object_get_data(G_OBJECT(dialog->priv->new_profile_dialog), "create_button");
- gtk_widget_set_sensitive(create_button, FALSE);
-
- gtk_window_set_modal(GTK_WINDOW(dialog->priv->new_profile_dialog), TRUE);
- gtk_widget_show_all(dialog->priv->new_profile_dialog);
- gtk_window_present(GTK_WINDOW(dialog->priv->new_profile_dialog));
-
- //keep running the dialog until the response is GTK_RESPONSE_NONE
- do {
- response = gtk_dialog_run(GTK_DIALOG(dialog->priv->new_profile_dialog));
- } while(response != GTK_RESPONSE_NONE);
-}