/* DESCRIPTION : This function is called when a toggle changes. * BEHAVIOR : Updates the key given as parameter to the new value of the * toggle. * PRE : Non-Null data corresponding to the boolean config key to * modify. */ void toggle_changed (GtkCheckButton *but, gpointer data) { gchar *key = NULL; key = (gchar *) data; if (gm_conf_get_bool (key) != gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (but))) gm_conf_set_bool (key, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (but))); }
GtkWidget * gnome_prefs_toggle_new (GtkWidget *table, const gchar *label_txt, const gchar *conf_key, const gchar *tooltip, int row) { GnomePrefsWindow *gpw = NULL; GValue value = { 0, {{0}, {0}}}; GtkWidget *toggle = NULL; gboolean writable = FALSE; int cols = 0; writable = gm_conf_is_key_writable (conf_key); g_value_init (&value, G_TYPE_INT); g_object_get_property (G_OBJECT (table), "n-columns", &value); cols = g_value_get_int (&value); g_value_unset (&value); toggle = gtk_check_button_new_with_mnemonic (label_txt); if (!writable) gtk_widget_set_sensitive (GTK_WIDGET (toggle), FALSE); gtk_table_attach (GTK_TABLE (table), toggle, 0, cols, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), gm_conf_get_bool (conf_key)); gpw = (GnomePrefsWindow *) g_object_get_data (G_OBJECT (table), "gpw"); if (gpw && tooltip) gtk_widget_set_tooltip_text (toggle, tooltip); g_signal_connect (toggle, "toggled", G_CALLBACK (toggle_changed), (gpointer) conf_key); gm_conf_notifier_add (conf_key, toggle_changed_nt, (gpointer) toggle); gtk_widget_show_all (table); return toggle; }
static void gm_prefs_window_sound_events_list_build (GtkWidget *prefs_window) { GmPreferencesWindow *pw = NULL; GtkTreeSelection *selection = NULL; GtkTreePath *path = NULL; GtkTreeModel *model = NULL; GtkTreeIter iter, selected_iter; bool enabled = FALSE; pw = gm_pw_get_pw (prefs_window); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (pw->sound_events_list)); if (gtk_tree_selection_get_selected (selection, &model, &selected_iter)) path = gtk_tree_model_get_path (model, &selected_iter); gtk_list_store_clear (GTK_LIST_STORE (model)); /* Sound on incoming calls */ enabled = gm_conf_get_bool (SOUND_EVENTS_KEY "enable_incoming_call_sound"); gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, enabled, 1, _("Play sound on incoming calls"), 2, SOUND_EVENTS_KEY "incoming_call_sound", 3, SOUND_EVENTS_KEY "enable_incoming_call_sound", 4, "incoming_call_sound", -1); enabled = gm_conf_get_bool (SOUND_EVENTS_KEY "enable_ring_tone_sound"); gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, enabled, 1, _("Play ring tone"), 2, SOUND_EVENTS_KEY "ring_tone_sound", 3, SOUND_EVENTS_KEY "enable_ring_tone_sound", 4, "ring_tone_sound", -1); enabled = gm_conf_get_bool (SOUND_EVENTS_KEY "enable_busy_tone_sound"); gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, enabled, 1, _("Play busy tone"), 2, SOUND_EVENTS_KEY "busy_tone_sound", 3, SOUND_EVENTS_KEY "enable_busy_tone_sound", 4, "busy_tone_sound", -1); enabled = gm_conf_get_bool (SOUND_EVENTS_KEY "enable_new_voicemail_sound"); gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, enabled, 1, _("Play sound for new voice mails"), 2, SOUND_EVENTS_KEY "new_voicemail_sound", 3, SOUND_EVENTS_KEY "enable_new_voicemail_sound", 4, "new_voicemail_sound", -1); enabled = gm_conf_get_bool (SOUND_EVENTS_KEY "enable_new_message_sound"); gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, enabled, 1, _("Play sound for new instant messages"), 2, SOUND_EVENTS_KEY "new_message_sound", 3, SOUND_EVENTS_KEY "enable_new_message_sound", 4, "new_message_sound", -1); if (!path) path = gtk_tree_path_new_from_string ("0"); gtk_tree_view_set_cursor (GTK_TREE_VIEW (pw->sound_events_list), path, NULL, false); gtk_tree_path_free (path); }
static void roster_view_gtk_init (G_GNUC_UNUSED RosterViewGtk* self) { GtkWidget *scrolled_window; GtkWidget *vbox = NULL; GtkTreeModel *filtered = NULL; GtkTreeSelection *selection = NULL; GtkTreeViewColumn *col = NULL; GtkCellRenderer *renderer = NULL; self->priv = new RosterViewGtkPrivate; self->priv->folded_groups = gm_conf_get_string_list (CONTACTS_KEY "roster_folded_groups"); self->priv->show_offline_contacts = gm_conf_get_bool (CONTACTS_KEY "show_offline_contacts"); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_container_set_border_width (GTK_CONTAINER (vbox), 0); gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 0); gtk_frame_set_shadow_type (GTK_FRAME (self), GTK_SHADOW_NONE); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); self->priv->store = gtk_tree_store_new (COLUMN_NUMBER, G_TYPE_INT, // type G_TYPE_POINTER, // heap G_TYPE_POINTER, // presentity G_TYPE_STRING, // name G_TYPE_STRING, // status G_TYPE_STRING, // presence G_TYPE_STRING, // color if active G_TYPE_STRING, // group name (invisible) G_TYPE_STRING, // presence G_TYPE_BOOLEAN, // offline G_TYPE_INT); // timeout source gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (self->priv->store), COLUMN_NAME, GTK_SORT_ASCENDING); filtered = gtk_tree_model_filter_new (GTK_TREE_MODEL (self->priv->store), NULL); g_object_unref (self->priv->store); self->priv->tree_view = GTK_TREE_VIEW (gtk_tree_view_new_with_model (filtered)); g_object_unref (filtered); gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filtered), tree_model_filter_hide_show_offline, self, NULL); gtk_tree_view_set_headers_visible (self->priv->tree_view, FALSE); gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (vbox)); gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (scrolled_window), TRUE, TRUE, 0); gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET (self->priv->tree_view)); /* Build the GtkTreeView */ // We hide the normal GTK+ expanders and use our own col = gtk_tree_view_column_new (); renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_column_set_spacing (col, 0); gtk_tree_view_column_pack_start (col, renderer, TRUE); g_object_set (col, "visible", FALSE, NULL); gtk_tree_view_append_column (self->priv->tree_view, col); gtk_tree_view_set_expander_column (self->priv->tree_view, col); col = gtk_tree_view_column_new (); renderer = gm_cell_renderer_expander_new (); gtk_tree_view_column_pack_start (col, renderer, FALSE); g_object_set (renderer, "xalign", 0.0, "xpad", 0, "ypad", 0, "visible", TRUE, "expander-style", GTK_EXPANDER_COLLAPSED, NULL); gtk_tree_view_column_set_cell_data_func (col, renderer, expand_cell_data_func, NULL, NULL); gtk_tree_view_append_column (self->priv->tree_view, col); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_set_spacing (col, 0); gtk_tree_view_column_pack_start (col, renderer, TRUE); gtk_tree_view_column_add_attribute (col, renderer, "text", COLUMN_NAME); gtk_tree_view_column_set_alignment (col, 0.0); g_object_set (renderer, "xalign", 0.5, "ypad", 0, NULL); g_object_set (renderer, "weight", PANGO_WEIGHT_BOLD, NULL); gtk_tree_view_column_set_cell_data_func (col, renderer, show_cell_data_func, GINT_TO_POINTER (TYPE_HEAP), NULL); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (col, renderer, TRUE); gtk_tree_view_column_add_attribute (col, renderer, "text", COLUMN_NAME); g_object_set (renderer, "weight", PANGO_WEIGHT_BOLD, NULL); gtk_tree_view_column_set_cell_data_func (col, renderer, show_cell_data_func, GINT_TO_POINTER (TYPE_GROUP), NULL); renderer = gtk_cell_renderer_pixbuf_new (); g_object_set (renderer, "yalign", 0.5, "xpad", 5, NULL); gtk_tree_view_column_pack_start (col, renderer, FALSE); gtk_tree_view_column_add_attribute (col, renderer, "icon-name", COLUMN_PRESENCE_ICON); gtk_tree_view_column_set_cell_data_func (col, renderer, show_cell_data_func, GINT_TO_POINTER (TYPE_PRESENTITY), NULL); renderer = gm_cell_renderer_bitext_new (); g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, "width-chars", 30, NULL); gtk_tree_view_column_pack_start (col, renderer, FALSE); gtk_tree_view_column_add_attribute (col, renderer, "primary-text", COLUMN_NAME); gtk_tree_view_column_add_attribute (col, renderer, "secondary-text", COLUMN_STATUS); gtk_tree_view_column_add_attribute (col, renderer, "foreground", COLUMN_ACTIVE); gtk_tree_view_column_set_cell_data_func (col, renderer, show_cell_data_func, GINT_TO_POINTER (TYPE_PRESENTITY), NULL); /* Callback when the selection has been changed */ selection = gtk_tree_view_get_selection (self->priv->tree_view); gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); g_signal_connect (selection, "changed", G_CALLBACK (on_selection_changed), self); g_signal_connect (self->priv->tree_view, "event-after", G_CALLBACK (on_view_event_after), self); /* Notifiers */ self->priv->notifier = gm_conf_notifier_add (CONTACTS_KEY "show_offline_contacts", show_offline_contacts_changed_nt, self); }