nautilus/libnautilus-private/nautilus-preferences-group.c
Darin Adler 2cd5440e93 Fixed bug bug 3264 (Tree view shows no branches for directories,
...HACK... nodes visible), bug 3290 (changing directory or
	refreshing causes Gdk to assert), bug 2420 (Need to free original
	key when removing model node), and other assorted problems.

	* components/tree/nautilus-tree-view.c: (insert_hack_node),
	(remove_hack_node), (nautilus_tree_view_insert_model_node):
	Fix problem where the hash table key was neither g_strdup'd on the
	way in, nor g_free'd on the way out. This caused all the problems
	with bad nesting in the tree view.

	* nautilus-installer/src/installer.c: (create_pixmap):
	* src/file-manager/fm-list-view.c: (install_row_images):
	* src/nautilus-theme-selector.c: (add_theme):
	Added more checks for NULL before calling gdk_bitmap_unref.

	* src/file-manager/fm-directory-view.c: (no_items_showing):
	Fixed a NautilusDirectory ref. count leak.

	* libnautilus-extensions/nautilus-font-factory.c:
	(unref_global_font_factory), (nautilus_get_current_font_factory):
	Unref the font factory on exit.
	(nautilus_font_factory_initialize_class), (font_hash_node_free),
	(free_one_hash_node), (destroy): Added code to actually destroy
	the font factory.
	(unref_fixed_font), (nautilus_font_factory_get_fallback_font):
	Unref the fixed font on exit.
	* libnautilus-extensions/nautilus-volume-monitor.c:
	(unref_global_volume_monitor), (nautilus_volume_monitor_get):
	Unref the volume monitor on exit.
	* src/nautilus-signaller.c: (unref_global_signaller),
	(nautilus_signaller_get_current): Unref the signaller on exit.

	* src/nautilus-component-adapter-factory.c:
	(nautilus_component_adapter_factory_initialize): Replaced some
	strange FIXMEs with a simpler one.
	(nautilus_component_adapter_factory_destroy): Fix a CORBA object
	reference leak.
	(nautilus_component_adapter_factory_get): Did a ref/sink.

	* components/adapter/nautilus-adapter-control-embed-strategy.c:
	(nautilus_adapter_control_embed_strategy_new):
	* components/adapter/nautilus-adapter-embeddable-embed-strategy.c:
	(nautilus_adapter_embeddable_embed_strategy_new):
	* components/adapter/nautilus-adapter-file-load-strategy.c:
	(nautilus_adapter_file_load_strategy_new):
	* components/adapter/nautilus-adapter-progressive-load-strategy.c:
	(nautilus_adapter_progressive_load_strategy_new):
	* components/adapter/nautilus-adapter-stream-load-strategy.c:
	(nautilus_adapter_stream_load_strategy_new):
	* components/adapter/nautilus-adapter.c: (nautilus_adapter_new):
	* components/rpmview/nautilus-rpm-verify-window.c:
	(nautilus_rpm_verify_window_new):
	* components/services/install/lib/eazel-install-object.c:
	(eazel_install_new), (eazel_install_new_with_config):
	* components/services/time/service/trilobite-eazel-time-service.c:
	(trilobite_eazel_time_service_new):
	* components/services/trilobite/libtrilobite/trilobite-service-pass
	wordquery.c: (trilobite_passwordquery_new):
	* components/services/trilobite/libtrilobite/trilobite-service.c:
	(trilobite_service_new):
	* components/tree/nautilus-tree-expansion-state.c:
	(nautilus_tree_expansion_state_new):
	* components/tree/nautilus-tree-model.c: (nautilus_tree_model_new):
	* components/tree/nautilus-tree-node.c: (nautilus_tree_node_new):
	* cut-n-paste-code/widgets/e-paned/e-hpaned.c: (e_hpaned_new):
	* cut-n-paste-code/widgets/e-paned/e-vpaned.c: (e_vpaned_new):
	* libnautilus-extensions/bonobo-stream-vfs.c:
	(bonobo_stream_create):
	* libnautilus-extensions/nautilus-any-width-bin.c:
	(nautilus_any_width_bin_new):
	* libnautilus-extensions/nautilus-background.c:
	(nautilus_background_new):
	* libnautilus-extensions/nautilus-bookmark.c:
	(nautilus_bookmark_new_with_icon):
	* libnautilus-extensions/nautilus-caption-table.c:
	(nautilus_caption_table_new):
	* libnautilus-extensions/nautilus-caption.c:
	(nautilus_caption_new):
	* libnautilus-extensions/nautilus-directory.c:
	(nautilus_directory_new):
	* libnautilus-extensions/nautilus-druid-page-eazel.c:
	(nautilus_druid_page_eazel_new),
	(nautilus_druid_page_eazel_new_with_vals):
	* libnautilus-extensions/nautilus-druid.c: (nautilus_druid_new):
	* libnautilus-extensions/nautilus-entry.c: (nautilus_entry_new):
	* libnautilus-extensions/nautilus-file-operations-progress.c:
	(nautilus_file_operations_progress_new):
	* libnautilus-extensions/nautilus-file.c:
	(nautilus_file_new_from_name), (nautilus_file_new_from_info):
	* libnautilus-extensions/nautilus-font-picker.c:
	(nautilus_font_picker_new):
	* libnautilus-extensions/nautilus-horizontal-splitter.c:
	(nautilus_horizontal_splitter_new):
	* libnautilus-extensions/nautilus-icon-container.c:
	(nautilus_icon_container_new):
	* libnautilus-extensions/nautilus-icon-factory.c:
	(get_icon_factory):
	* libnautilus-extensions/nautilus-image.c: (nautilus_image_new):
	* libnautilus-extensions/nautilus-keep-last-vertical-box.c:
	(nautilus_keep_last_vertical_box_new):
	* libnautilus-extensions/nautilus-label.c: (nautilus_label_new):
	* libnautilus-extensions/nautilus-list-column-title.c:
	(nautilus_list_column_title_new):
	* libnautilus-extensions/nautilus-list.c:
	(nautilus_list_new_with_titles):
	* libnautilus-extensions/nautilus-password-dialog.c:
	(nautilus_password_dialog_new):
	* libnautilus-extensions/nautilus-preference.c:
	(nautilus_preference_new_from_type):
	* libnautilus-extensions/nautilus-preferences-box.c:
	(nautilus_preferences_box_new):
	* libnautilus-extensions/nautilus-preferences-dialog.c:
	(nautilus_preferences_dialog_new):
	* libnautilus-extensions/nautilus-preferences-group.c:
	(nautilus_preferences_group_new):
	* libnautilus-extensions/nautilus-preferences-item.c:
	(nautilus_preferences_item_new):
	* libnautilus-extensions/nautilus-preferences-pane.c:
	(nautilus_preferences_pane_new):
	* libnautilus-extensions/nautilus-radio-button-group.c:
	(nautilus_radio_button_group_new):
	* libnautilus-extensions/nautilus-scalable-font.c:
	(nautilus_scalable_font_new):
	* libnautilus-extensions/nautilus-string-picker.c:
	(nautilus_string_picker_new):
	* libnautilus-extensions/nautilus-text-caption.c:
	(nautilus_text_caption_new):
	* libnautilus-extensions/nautilus-undo-context.c:
	(nautilus_undo_context_new):
	* libnautilus-extensions/nautilus-undo-manager.c:
	(nautilus_undo_manager_new):
	* libnautilus-extensions/nautilus-user-level-manager.c:
	(user_level_manager_new):
	* libnautilus/nautilus-undo-transaction.c:
	(nautilus_undo_transaction_new):
	* libnautilus/nautilus-view.c:
	(nautilus_view_new_from_bonobo_control):
	* src/file-manager/nautilus-trash-monitor.c:
	(nautilus_trash_monitor_get):
	* src/nautilus-desktop-window.c: (nautilus_desktop_window_new):
	* src/nautilus-property-browser.c: (nautilus_property_browser_new):
	* src/nautilus-shell.c: (nautilus_shell_new):
	* src/nautilus-sidebar-tabs.c: (nautilus_sidebar_tabs_new):
	* src/nautilus-sidebar-title.c: (nautilus_sidebar_title_new):
	* src/nautilus-sidebar.c: (nautilus_sidebar_create_context_menu),
	(nautilus_sidebar_new):
	* src/nautilus-theme-selector.c: (nautilus_theme_selector_new):
	* src/nautilus-throbber.c: (nautilus_throbber_new):
	* src/nautilus-view-frame.c: (nautilus_view_frame_new):
	* src/nautilus-zoom-control.c: (nautilus_zoom_control_new):
	* src/nautilus-about.c: (nautilus_about_new):
	* src/nautilus-application.c: (nautilus_application_new),
	(nautilus_application_create_window):
	* src/nautilus-bookmark-list.c: (nautilus_bookmark_list_new):
	After Tim Janik explained that gtk_type_new is a low-level call to
	be avoided, changed most uses of gtk_type_new to gtk_object_new or
	gtk_widget_new. Also, after Owen and Havoc explained that you
	can't just ignore the floating bit, added ref/sink calls to the
	functions used to create objects where we don't use the floating
	scheme.

	* src/nautilus-zoom-control.c:
	(nautilus_zoom_control_button_press_event): Take advantage of the
	fact that the new menu is floating and don't bother with ref'ing.

	* libnautilus-extensions/nautilus-ctree.c:
	(nautilus_ctree_new_with_titles):
	Added a cast.

	* components/adapter/main.c: (adapter_factory_make_object):
	* components/hardware/main.c: (hardware_view_make_object):
	* components/services/install/lib/eazel-install-corba-callback.c:
	(eazel_install_callback_get_type), (eazel_install_callback_new):
	* libnautilus-extensions/nautilus-theme.c:
	(nautilus_theme_get_theme), (nautilus_theme_set_theme),
	(nautilus_theme_get_theme_data):
	Whitespace tweaks.
2000-09-26 00:52:22 +00:00

232 lines
5.9 KiB
C

/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
/* nautilus-prefs-group-radio.c - Radio button prefs group implementation.
Copyright (C) 1999, 2000 Eazel, Inc.
The Gnome 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.
The Gnome 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 the Gnome Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
Authors: Ramiro Estrugo <ramiro@eazel.com>
*/
#include <config.h>
#include "nautilus-preferences-group.h"
#include <gnome.h>
#include <gtk/gtkradiobutton.h>
#include <gtk/gtksignal.h>
#include "nautilus-gtk-macros.h"
/* Signals */
typedef enum
{
CHANGED,
LAST_SIGNAL
} RadioGroupSignals;
typedef struct
{
GtkWidget *radio_button;
} ButtonInfo;
struct _NautilusPreferencesGroupDetails
{
GtkWidget *main_box;
GtkWidget *content_box;
GtkWidget *description_label;
gboolean show_description;
};
static const gint PREFERENCES_GROUP_NOT_FOUND = -1;
/* NautilusPreferencesGroupClass methods */
static void nautilus_preferences_group_initialize_class (NautilusPreferencesGroupClass *klass);
static void nautilus_preferences_group_initialize (NautilusPreferencesGroup *preferences_group);
/* GtkObjectClass methods */
static void nautilus_preferences_group_destroy (GtkObject *object);
/* Private stuff */
static void preferences_group_construct (NautilusPreferencesGroup *prefs_group,
const gchar * title);
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusPreferencesGroup,
nautilus_preferences_group,
GTK_TYPE_FRAME);
/*
* NautilusPreferencesGroupClass methods
*/
static void
nautilus_preferences_group_initialize_class (NautilusPreferencesGroupClass *preferences_group_class)
{
GtkObjectClass *object_class;
GtkWidgetClass *widget_class;
object_class = GTK_OBJECT_CLASS (preferences_group_class);
widget_class = GTK_WIDGET_CLASS (preferences_group_class);
parent_class = gtk_type_class (gtk_frame_get_type ());
/* GtkObjectClass */
object_class->destroy = nautilus_preferences_group_destroy;
}
static void
nautilus_preferences_group_initialize (NautilusPreferencesGroup *group)
{
group->details = g_new (NautilusPreferencesGroupDetails, 1);
group->details->main_box = NULL;
group->details->content_box = NULL;
group->details->description_label = NULL;
group->details->show_description = FALSE;
}
/*
* GtkObjectClass methods
*/
static void
nautilus_preferences_group_destroy(GtkObject* object)
{
NautilusPreferencesGroup *group;
g_return_if_fail (object != NULL);
g_return_if_fail (NAUTILUS_IS_PREFERENCES_GROUP (object));
group = NAUTILUS_PREFERENCES_GROUP (object);
g_free (group->details);
/* Chain */
if (GTK_OBJECT_CLASS (parent_class)->destroy != NULL)
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
}
/*
* Private stuff
*/
static void
preferences_group_construct (NautilusPreferencesGroup *group,
const gchar * title)
{
g_assert (group != NULL);
g_assert (title != NULL);
g_assert (group->details->content_box == NULL);
g_assert (group->details->main_box == NULL);
g_assert (group->details->description_label == NULL);
/* Ourselves */
gtk_frame_set_shadow_type (GTK_FRAME (group),
GTK_SHADOW_ETCHED_IN);
gtk_frame_set_label (GTK_FRAME (group), title);
/* Main box */
group->details->main_box = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (group),
group->details->main_box);
/* Description label */
group->details->description_label = gtk_label_new ("Blurb");
gtk_label_set_justify (GTK_LABEL (group->details->description_label),
GTK_JUSTIFY_LEFT);
gtk_box_pack_start (GTK_BOX (group->details->main_box),
group->details->description_label,
FALSE,
FALSE,
0);
if (group->details->show_description)
{
gtk_widget_show (group->details->description_label);
}
/* Content box */
group->details->content_box =
gtk_vbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (group->details->main_box),
group->details->content_box,
FALSE,
FALSE,
0);
gtk_container_set_border_width (GTK_CONTAINER (group->details->content_box),
4);
gtk_widget_show (group->details->content_box);
gtk_widget_show (group->details->main_box);
}
/*
* NautilusPreferencesGroup public methods
*/
GtkWidget *
nautilus_preferences_group_new (const gchar *title)
{
NautilusPreferencesGroup *group;
g_return_val_if_fail (title != NULL, NULL);
group = NAUTILUS_PREFERENCES_GROUP
(gtk_widget_new (nautilus_preferences_group_get_type (), NULL));
preferences_group_construct (group, title);
return GTK_WIDGET (group);
}
GtkWidget *
nautilus_preferences_group_add_item (NautilusPreferencesGroup *group,
const char *preference_name,
NautilusPreferencesItemType item_type)
{
GtkWidget *item;
NautilusPreference *preference;
g_return_val_if_fail (group != NULL, NULL);
g_return_val_if_fail (NAUTILUS_IS_PREFERENCES_GROUP (group), NULL);
g_return_val_if_fail (preference_name != NULL, NULL);
preference = nautilus_preference_find_by_name (preference_name);
g_assert (preference != NULL);
gtk_object_unref (GTK_OBJECT (preference));
preference = NULL;
item = nautilus_preferences_item_new (preference_name, item_type);
gtk_box_pack_start (GTK_BOX (group->details->content_box),
item,
TRUE,
TRUE,
0);
gtk_widget_show (item);
return item;
}