nautilus/libnautilus/nautilus-view.c
Darin Adler 764d936aa0 reviewed by: John Sullivan <sullivan@eazel.com>
Fix bug 6859 (GTK signal macros don't work in non-GCC compilers
	for void return types).

	* libnautilus-extensions/nautilus-gtk-macros.h:
	Replaced old macros that accidentally relied on gccisms with
	new ones that are portable to other compilers.

		NAUTILUS_CALL_PARENT_CLASS is replaced by
			NAUTILUS_CALL_PARENT
		    and NAUTILUS_CALL_PARENT_WITH_RETURN_VALUE.

		NAUTILUS_CALL_VIRTUAL is replaced by
			NAUTILUS_CALL_METHOD
		    and NAUTILUS_CALL_METHOD_WITH_RETURN_VALUE

	* components/adapter/nautilus-adapter-control-embed-strategy.c:
	(nautilus_adapter_control_embed_strategy_destroy):
	* components/adapter/nautilus-adapter-embed-strategy.c:
	(nautilus_adapter_embed_strategy_destroy),
	(nautilus_adapter_embed_strategy_get_widget),
	(nautilus_adapter_embed_strategy_get_zoomable):
	* components/adapter/nautilus-adapter-embeddable-embed-strategy.c:
	(nautilus_adapter_embeddable_embed_strategy_destroy):
	* components/adapter/nautilus-adapter-factory-server.c:
	(nautilus_adapter_factory_server_destroy):
	* components/adapter/nautilus-adapter-file-load-strategy.c:
	(nautilus_adapter_file_load_strategy_destroy):
	* components/adapter/nautilus-adapter-load-strategy.c:
	(nautilus_adapter_load_strategy_destroy),
	(nautilus_adapter_load_strategy_load_location),
	(nautilus_adapter_load_strategy_stop_loading):
	* components/adapter/nautilus-adapter-progressive-load-strategy.c:
	(nautilus_adapter_progressive_load_strategy_destroy):
	* components/adapter/nautilus-adapter-stream-load-strategy.c:
	(nautilus_adapter_stream_load_strategy_destroy):
	* components/adapter/nautilus-adapter.c:
	(nautilus_adapter_destroy):
	* components/hardware/nautilus-hardware-view.c:
	(nautilus_hardware_view_destroy):
	* components/history/nautilus-history-view.c:
	(nautilus_history_view_destroy):
	* components/loser/content/nautilus-content-loser.c:
	(nautilus_content_loser_destroy):
	* components/loser/sidebar/nautilus-sidebar-loser.c:
	(nautilus_sidebar_loser_destroy):
	* components/music/nautilus-music-view.c:
	(nautilus_music_view_destroy):
	* components/rpmview/nautilus-rpm-verify-window.c:
	(nautilus_rpm_verify_window_destroy):
	* components/rpmview/nautilus-rpm-view.c:
	(nautilus_rpm_view_destroy):
	* components/sample/nautilus-sample-content-view.c:
	(nautilus_sample_content_view_destroy):
	* components/services/install/nautilus-view/nautilus-service-instal
	l-view.c: (nautilus_service_install_view_destroy),
	(nautilus_service_install_view_finalize):
	* components/services/inventory-view/nautilus-inventory-config-page
	.c: (nautilus_inventory_config_page_destroy):
	* components/services/inventory-view/nautilus-inventory-view.c:
	(nautilus_inventory_view_destroy):
	* components/services/login/nautilus-view/nautilus-change-password-
	view.c: (nautilus_change_password_view_destroy):
	* components/services/nautilus-dependent-shared/eazel-services-foot
	er.c: (footer_destroy):
	* components/services/nautilus-dependent-shared/eazel-services-head
	er.c: (header_destroy):
	* components/services/summary/nautilus-summary-view.c:
	(nautilus_summary_view_destroy):
	* components/services/time/nautilus-view/trilobite-eazel-time-view.
	c: (trilobite_eazel_time_view_destroy):
	* components/text/nautilus-text-view.c:
	(nautilus_text_view_destroy):
	* components/throbber/nautilus-throbber.c:
	(nautilus_throbber_destroy), (nautilus_throbber_map),
	(nautilus_throbber_size_allocate):
	* components/tree/nautilus-tree-change-queue.c:
	(nautilus_tree_change_queue_destroy):
	* components/tree/nautilus-tree-expansion-state.c:
	(nautilus_tree_expansion_state_destroy):
	* components/tree/nautilus-tree-model.c:
	(nautilus_tree_model_destroy):
	* components/tree/nautilus-tree-node.c:
	(nautilus_tree_node_destroy):
	* components/tree/nautilus-tree-view.c:
	(nautilus_tree_view_destroy):
	* help/nautilus-quick-reference/.cvsignore:
	* help/nautilus-quick-reference/C/.cvsignore:
	* libnautilus-extensions/nautilus-background-canvas-group.c:
	(nautilus_background_canvas_group_update),
	(nautilus_background_canvas_group_draw),
	(nautilus_background_canvas_group_render):
	* libnautilus-extensions/nautilus-background.c:
	(nautilus_background_destroy):
	* libnautilus-extensions/nautilus-bookmark.c:
	(nautilus_bookmark_destroy):
	* libnautilus-extensions/nautilus-caption.c:
	(nautilus_caption_destroy), (nautilus_font_picker_show_all):
	* libnautilus-extensions/nautilus-clickable-image.c:
	(nautilus_clickable_image_destroy),
	(nautilus_clickable_image_realize),
	(nautilus_clickable_image_expose_event):
	* libnautilus-extensions/nautilus-debug-drawing.c:
	(debug_pixbuf_viewer_destroy):
	* libnautilus-extensions/nautilus-directory-metafile-monitor.c:
	(destroy):
	* libnautilus-extensions/nautilus-directory.c:
	(nautilus_directory_destroy),
	(nautilus_directory_get_name_for_self_as_new_file),
	(nautilus_directory_are_all_files_seen),
	(nautilus_directory_contains_file),
	(nautilus_directory_call_when_ready),
	(nautilus_directory_cancel_callback),
	(nautilus_directory_file_monitor_add),
	(nautilus_directory_file_monitor_remove),
	(nautilus_directory_force_reload),
	(nautilus_directory_is_not_empty):
	* libnautilus-extensions/nautilus-druid-page-eazel.c:
	(nautilus_druid_page_eazel_destroy),
	(nautilus_druid_page_eazel_finalize),
	(nautilus_druid_page_eazel_size_allocate),
	(nautilus_druid_page_eazel_size_request):
	* libnautilus-extensions/nautilus-ellipsizing-label.c:
	(real_size_request), (real_size_allocate), (real_style_set):
	* libnautilus-extensions/nautilus-entry.c:
	(nautilus_entry_destroy), (nautilus_entry_key_press),
	(nautilus_entry_motion_notify), (nautilus_entry_set_selection),
	(nautilus_entry_insert_text), (nautilus_entry_delete_text),
	(nautilus_entry_selection_clear):
	* libnautilus-extensions/nautilus-file.c: (destroy),
	(nautilus_file_monitor_add), (nautilus_file_monitor_remove),
	(nautilus_file_get_date), (nautilus_file_get_where_string),
	(nautilus_file_get_directory_item_count),
	(nautilus_file_get_deep_counts), (nautilus_file_get_file_type),
	(nautilus_file_check_if_ready), (nautilus_file_call_when_ready),
	(nautilus_file_cancel_call_when_ready):
	* libnautilus-extensions/nautilus-font-factory.c: (destroy):
	* libnautilus-extensions/nautilus-font-picker.c:
	(nautilus_font_picker_destroy):
	* libnautilus-extensions/nautilus-horizontal-splitter.c:
	(nautilus_horizontal_splitter_destroy),
	(nautilus_horizontal_splitter_button_press):
	* libnautilus-extensions/nautilus-icon-canvas-item.c:
	(nautilus_icon_canvas_item_destroy),
	(nautilus_icon_canvas_item_update):
	* libnautilus-extensions/nautilus-icon-container.c: (destroy),
	(size_allocate), (realize), (unrealize), (button_press_event),
	(button_release_event), (motion_notify_event), (key_press_event):
	* libnautilus-extensions/nautilus-icon-factory.c:
	(nautilus_icon_factory_destroy):
	* libnautilus-extensions/nautilus-image-table.c:
	(nautilus_image_table_destroy),
	(nautilus_image_table_expose_event),
	(nautilus_image_table_realize), (nautilus_image_table_unrealize),
	(nautilus_image_table_remove):
	* libnautilus-extensions/nautilus-image.c:
	(nautilus_image_destroy):
	* libnautilus-extensions/nautilus-keep-last-vertical-box.c:
	(nautilus_keep_last_vertical_box_size_allocate):
	* libnautilus-extensions/nautilus-label.c:
	(nautilus_label_destroy), (nautilus_label_size_request),
	(nautilus_label_size_allocate), (label_paint_pixbuf_callback):
	* libnautilus-extensions/nautilus-labeled-image.c:
	(nautilus_labeled_image_destroy):
	* libnautilus-extensions/nautilus-list-column-title.c:
	(nautilus_list_column_title_finalize):
	* libnautilus-extensions/nautilus-list.c: (nautilus_list_destroy),
	(nautilus_list_button_press), (nautilus_list_button_release),
	(nautilus_list_key_press), (nautilus_list_style_set),
	(nautilus_list_realize), (nautilus_list_unrealize), (draw_rows),
	(draw_all), (nautilus_list_draw), (nautilus_list_expose),
	(nautilus_list_resize_column), (nautilus_list_set_cell_contents),
	(set_list_cell), (nautilus_list_track_new_column_width),
	(nautilus_list_motion), (nautilus_list_clear), (insert_row):
	* libnautilus-extensions/nautilus-merged-directory.c:
	(merged_destroy):
	* libnautilus-extensions/nautilus-metafile-factory.c: (destroy):
	* libnautilus-extensions/nautilus-metafile.c: (destroy):
	* libnautilus-extensions/nautilus-preferences-box.c:
	(nautilus_preferences_box_destroy):
	* libnautilus-extensions/nautilus-preferences-pane.c:
	(nautilus_preferences_pane_destroy):
	* libnautilus-extensions/nautilus-scalable-font.c:
	(nautilus_scalable_font_destroy):
	* libnautilus-extensions/nautilus-string-picker.c:
	(nautilus_string_picker_destroy):
	* libnautilus-extensions/nautilus-tabs.c: (nautilus_tabs_destroy):
	* libnautilus-extensions/nautilus-text-caption.c:
	(nautilus_text_caption_destroy):
	* libnautilus-extensions/nautilus-trash-directory.c:
	(trash_destroy):
	* libnautilus-extensions/nautilus-trash-file.c: (trash_destroy):
	* libnautilus-extensions/nautilus-undo-context.c: (destroy):
	* libnautilus-extensions/nautilus-undo-manager.c: (destroy):
	* libnautilus-extensions/nautilus-vfs-directory.c: (vfs_destroy):
	* libnautilus-extensions/nautilus-vfs-file.c: (vfs_destroy):
	* libnautilus-extensions/nautilus-viewport.c:
	(nautilus_viewport_destroy), (nautilus_viewport_realize):
	* libnautilus-extensions/nautilus-volume-monitor.c:
	(nautilus_volume_monitor_destroy):
	* libnautilus-extensions/nautilus-wrap-table.c:
	(nautilus_wrap_table_destroy):
	* libnautilus/nautilus-undo-transaction.c:
	(nautilus_undo_transaction_destroy):
	* libnautilus/nautilus-view.c: (nautilus_view_destroy):
	* src/file-manager/fm-desktop-icon-view.c:
	(fm_desktop_icon_view_destroy), (real_update_menus),
	(real_merge_menus):
	* src/file-manager/fm-directory-view.c:
	(text_attribute_names_changed_callback),
	(image_display_policy_changed_callback),
	(directory_view_font_family_changed_callback),
	(click_policy_changed_callback),
	(smooth_graphics_mode_changed_callback),
	(fm_directory_view_destroy),
	(fm_directory_view_file_limit_reached),
	(fm_directory_view_bump_zoom_level),
	(fm_directory_view_zoom_to_level),
	(fm_directory_view_restore_default_zoom_level),
	(fm_directory_view_can_zoom_in), (fm_directory_view_can_zoom_out),
	(fm_directory_view_get_background_widget),
	(fm_directory_view_get_selection), (reveal_newly_added_folder),
	(fm_directory_view_get_emblem_names_to_exclude),
	(fm_directory_view_merge_menus), (fm_directory_view_select_all),
	(fm_directory_view_set_selection),
	(fm_directory_get_selected_icon_locations),
	(fm_directory_view_reveal_selection),
	(fm_directory_view_is_read_only), (fm_directory_view_is_empty),
	(fm_directory_view_supports_creating_files),
	(fm_directory_view_accepts_dragged_files),
	(fm_directory_view_supports_properties),
	(fm_directory_view_supports_zooming),
	(fm_directory_view_update_menus):
	* src/file-manager/fm-icon-view.c: (fm_icon_view_destroy),
	(fm_icon_view_clean_up), (fm_icon_view_get_directory_sort_by),
	(fm_icon_view_set_directory_sort_by),
	(fm_icon_view_get_directory_sort_reversed),
	(fm_icon_view_set_directory_sort_reversed),
	(fm_icon_view_get_directory_auto_layout),
	(fm_icon_view_set_directory_auto_layout),
	(fm_icon_view_get_directory_tighter_layout),
	(fm_icon_view_set_directory_tighter_layout),
	(fm_icon_view_supports_auto_layout),
	(fm_icon_view_start_renaming_item), (fm_icon_view_merge_menus),
	(fm_icon_view_update_menus):
	* src/file-manager/fm-list-view.c: (fm_list_view_adding_file),
	(fm_list_view_removing_file), (fm_list_view_file_still_belongs),
	(get_number_of_columns), (get_link_column),
	(get_default_sort_attribute), (get_column_specification):
	* src/file-manager/fm-properties-window.c: (real_shutdown),
	(real_destroy), (real_finalize):
	* src/file-manager/fm-search-list-view.c: (real_destroy),
	(real_add_file), (real_adding_file), (real_removing_file),
	(real_merge_menus), (real_update_menus):
	* src/nautilus-about.c: (nautilus_about_destroy):
	* src/nautilus-application.c: (nautilus_application_destroy),
	(nautilus_application_startup):
	* src/nautilus-complex-search-bar.c:
	(nautilus_complex_search_bar_destroy):
	* src/nautilus-desktop-window.c: (destroy), (realize):
	* src/nautilus-location-bar.c: (destroy):
	* src/nautilus-navigation-bar.c:
	(nautilus_navigation_bar_get_location),
	(nautilus_navigation_bar_set_location):
	* src/nautilus-property-browser.c:
	(nautilus_property_browser_destroy):
	* src/nautilus-search-bar-criterion.c:
	(nautilus_search_bar_criterion_destroy):
	* src/nautilus-shell.c: (destroy):
	* src/nautilus-sidebar-tabs.c: (nautilus_sidebar_tabs_destroy),
	(nautilus_sidebar_tabs_size_allocate):
	* src/nautilus-sidebar-title.c: (nautilus_sidebar_title_destroy),
	(nautilus_sidebar_title_size_allocate):
	* src/nautilus-sidebar.c: (nautilus_sidebar_destroy),
	(nautilus_sidebar_size_allocate), (nautilus_sidebar_realize):
	* src/nautilus-simple-search-bar.c:
	(nautilus_simple_search_bar_destroy):
	* src/nautilus-switchable-navigation-bar.c:
	(nautilus_switchable_navigation_bar_destroy):
	* src/nautilus-switchable-search-bar.c:
	(nautilus_switchable_search_bar_destroy):
	* src/nautilus-theme-selector.c: (nautilus_theme_selector_destroy):
	* src/nautilus-view-frame.c: (nautilus_view_frame_destroy),
	(nautilus_view_frame_finalize), (nautilus_view_frame_map):
	* src/nautilus-window.c: (nautilus_window_destroy),
	(nautilus_window_realize), (nautilus_window_size_request),
	(nautilus_window_add_current_location_to_history_list),
	(nautilus_window_show):
	* src/nautilus-zoom-control.c: (nautilus_zoom_control_destroy),
	(nautilus_zoom_control_size_allocate):
	Use the macros by their new names.

	* RENAMING: Updated for some name changes and name change ideas.

	* user-guide/C/.cvsignore:
	* user-guide/C/html/.cvsignore:
	* user-guide/C/img/.cvsignore:
	* user-guide/C/sgml/.cvsignore:
	Added missing cvsignores.
2001-02-23 02:08:46 +00:00

692 lines
18 KiB
C

/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* libnautilus: A library for nautilus view implementations.
*
* Copyright (C) 1999, 2000 Red Hat, Inc.
* Copyright (C) 2000, 2001 Eazel, Inc.
*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* Authors: Elliot Lee <sopwith@redhat.com>
* Maciej Stachowiak <mjs@eazel.com>
* Darin Adler <darin@eazel.com>
*
*/
/* nautilus-view.c: Implementation for object that represents a
nautilus view implementation. */
#include <config.h>
#include "nautilus-view.h"
#include "nautilus-bonobo-workarounds.h"
#include "nautilus-idle-queue.h"
#include "nautilus-undo.h"
#include <bonobo/bonobo-control.h>
#include <bonobo/bonobo-main.h>
#include <bonobo/bonobo-ui-util.h>
#include <gtk/gtkmain.h>
#include <gtk/gtksignal.h>
#include <libgnomevfs/gnome-vfs-utils.h>
#include <libnautilus-extensions/nautilus-gtk-macros.h>
enum {
HISTORY_CHANGED,
LOAD_LOCATION,
SELECTION_CHANGED,
STOP_LOADING,
TITLE_CHANGED,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL];
struct NautilusViewDetails {
BonoboControl *control;
NautilusIdleQueue *idle_queue;
};
typedef struct {
POA_Nautilus_View servant;
NautilusView *bonobo_object;
} impl_POA_Nautilus_View;
typedef void (* ViewFunction) (NautilusView *view,
gpointer callback_data);
typedef struct {
ViewFunction call;
gpointer callback_data;
GDestroyNotify destroy_callback_data;
} IncomingCall;
static void impl_Nautilus_View_load_location (PortableServer_Servant servant,
CORBA_char *location,
CORBA_Environment *ev);
static void impl_Nautilus_View_stop_loading (PortableServer_Servant servant,
CORBA_Environment *ev);
static void impl_Nautilus_View_selection_changed (PortableServer_Servant servant,
const Nautilus_URIList *selection,
CORBA_Environment *ev);
static void impl_Nautilus_View_title_changed (PortableServer_Servant servant,
const CORBA_char *title,
CORBA_Environment *ev);
static void impl_Nautilus_View_history_changed (PortableServer_Servant servant,
const Nautilus_History *history,
CORBA_Environment *ev);
static void nautilus_view_initialize (NautilusView *view);
static void nautilus_view_destroy (GtkObject *object);
static void nautilus_view_initialize_class (NautilusViewClass *klass);
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusView, nautilus_view, BONOBO_OBJECT_TYPE)
static POA_Nautilus_View__epv libnautilus_Nautilus_View_epv =
{
NULL,
impl_Nautilus_View_load_location,
impl_Nautilus_View_stop_loading,
impl_Nautilus_View_selection_changed,
impl_Nautilus_View_title_changed,
impl_Nautilus_View_history_changed
};
static PortableServer_ServantBase__epv base_epv;
static POA_Nautilus_View__vepv impl_Nautilus_View_vepv =
{
&base_epv,
NULL,
&libnautilus_Nautilus_View_epv
};
static void
queue_incoming_call (PortableServer_Servant servant,
ViewFunction call,
gpointer callback_data,
GDestroyNotify destroy_callback_data)
{
NautilusView *view;
view = ((impl_POA_Nautilus_View *) servant)->bonobo_object;
nautilus_idle_queue_add (view->details->idle_queue,
(GFunc) call,
view,
callback_data,
destroy_callback_data);
}
GList *
nautilus_g_list_from_uri_list (const Nautilus_URIList *uri_list)
{
GList *list;
guint i;
list = NULL;
for (i = 0; i < uri_list->_length; i++) {
list = g_list_prepend
(list, g_strdup (uri_list->_buffer[i]));
}
return g_list_reverse (list);
}
/* Must CORBA_free this list before destroying the URI's in
* the source list.
*/
Nautilus_URIList *
nautilus_uri_list_from_g_list (GList *list)
{
int length;
Nautilus_URIList *uri_list;
int i;
GList *p;
length = g_list_length (list);
uri_list = Nautilus_URIList__alloc ();
uri_list->_maximum = length;
uri_list->_length = length;
uri_list->_buffer = CORBA_sequence_Nautilus_URI_allocbuf (length);
for (i = 0, p = list; i < length; i++, p = p->next) {
g_assert (p != NULL);
uri_list->_buffer[i] = CORBA_string_dup (p->data);
}
CORBA_sequence_set_release (uri_list, CORBA_TRUE);
return uri_list;
}
static void
call_load_location (NautilusView *view,
gpointer callback_data)
{
gtk_signal_emit (GTK_OBJECT (view),
signals[LOAD_LOCATION],
callback_data);
}
static void
call_stop_loading (NautilusView *view,
gpointer callback_data)
{
gtk_signal_emit (GTK_OBJECT (view),
signals[STOP_LOADING]);
}
static void
call_selection_changed (NautilusView *view,
gpointer callback_data)
{
gtk_signal_emit (GTK_OBJECT (view),
signals[SELECTION_CHANGED],
callback_data);
}
static void
call_title_changed (NautilusView *view,
gpointer callback_data)
{
gtk_signal_emit (GTK_OBJECT (view),
signals[TITLE_CHANGED],
callback_data);
}
static void
call_history_changed (NautilusView *view,
gpointer callback_data)
{
gtk_signal_emit (GTK_OBJECT (view),
signals[HISTORY_CHANGED],
callback_data);
}
static void
list_deep_free_cover (gpointer callback_data)
{
gnome_vfs_list_deep_free (callback_data);
}
static Nautilus_History *
history_dup (const Nautilus_History *history)
{
Nautilus_History *dup;
int length, i;
length = history->_length;
dup = Nautilus_History__alloc ();
dup->_maximum = length;
dup->_length = length;
dup->_buffer = CORBA_sequence_Nautilus_HistoryItem_allocbuf (length);
for (i = 0; i < length; i++) {
dup->_buffer[i].title = CORBA_string_dup (history->_buffer[i].title);
dup->_buffer[i].location = CORBA_string_dup (history->_buffer[i].location);
dup->_buffer[i].icon = CORBA_string_dup (history->_buffer[i].icon);
}
CORBA_sequence_set_release (dup, CORBA_TRUE);
return dup;
}
static void
impl_Nautilus_View_load_location (PortableServer_Servant servant,
CORBA_char *location,
CORBA_Environment *ev)
{
queue_incoming_call (servant,
call_load_location,
g_strdup (location),
g_free);
}
static void
impl_Nautilus_View_stop_loading (PortableServer_Servant servant,
CORBA_Environment *ev)
{
queue_incoming_call (servant,
call_stop_loading,
NULL,
NULL);
}
static void
impl_Nautilus_View_selection_changed (PortableServer_Servant servant,
const Nautilus_URIList *selection,
CORBA_Environment *ev)
{
queue_incoming_call (servant,
call_selection_changed,
nautilus_g_list_from_uri_list (selection),
list_deep_free_cover);
}
static void
impl_Nautilus_View_title_changed (PortableServer_Servant servant,
const CORBA_char *title,
CORBA_Environment *ev)
{
queue_incoming_call (servant,
call_title_changed,
g_strdup (title),
g_free);
}
static void
impl_Nautilus_View_history_changed (PortableServer_Servant servant,
const Nautilus_History *history,
CORBA_Environment *ev)
{
queue_incoming_call (servant,
call_history_changed,
history_dup (history),
CORBA_free);
}
static void
impl_Nautilus_View__destroy (BonoboObject *object,
PortableServer_Servant servant)
{
PortableServer_ObjectId *object_id;
CORBA_Environment ev;
CORBA_exception_init (&ev);
object_id = PortableServer_POA_servant_to_id (bonobo_poa (), servant, &ev);
PortableServer_POA_deactivate_object (bonobo_poa (), object_id, &ev);
CORBA_free (object_id);
object->servant = NULL;
POA_Nautilus_View__fini (servant, &ev);
g_free (servant);
CORBA_exception_free (&ev);
}
static Nautilus_ViewFrame
impl_Nautilus_View__create (NautilusView *bonobo_object,
CORBA_Environment * ev)
{
impl_POA_Nautilus_View *servant;
impl_Nautilus_View_vepv.Bonobo_Unknown_epv = nautilus_bonobo_object_get_epv ();
servant = g_new0 (impl_POA_Nautilus_View, 1);
servant->servant.vepv = &impl_Nautilus_View_vepv;
POA_Nautilus_View__init ((PortableServer_Servant) servant, ev);
gtk_signal_connect (GTK_OBJECT (bonobo_object), "destroy",
GTK_SIGNAL_FUNC (impl_Nautilus_View__destroy), servant);
servant->bonobo_object = bonobo_object;
return bonobo_object_activate_servant (BONOBO_OBJECT (bonobo_object), servant);
}
static void
nautilus_view_initialize_class (NautilusViewClass *klass)
{
GtkObjectClass *object_class;
object_class = (GtkObjectClass*) klass;
object_class->destroy = nautilus_view_destroy;
signals[LOAD_LOCATION] =
gtk_signal_new ("load_location",
GTK_RUN_LAST,
object_class->type,
GTK_SIGNAL_OFFSET (NautilusViewClass, load_location),
gtk_marshal_NONE__STRING,
GTK_TYPE_NONE, 1, GTK_TYPE_STRING);
signals[STOP_LOADING] =
gtk_signal_new ("stop_loading",
GTK_RUN_LAST,
object_class->type,
GTK_SIGNAL_OFFSET (NautilusViewClass, stop_loading),
gtk_marshal_NONE__NONE,
GTK_TYPE_NONE, 0);
signals[SELECTION_CHANGED] =
gtk_signal_new ("selection_changed",
GTK_RUN_LAST,
object_class->type,
GTK_SIGNAL_OFFSET (NautilusViewClass, selection_changed),
gtk_marshal_NONE__POINTER,
GTK_TYPE_NONE, 1, GTK_TYPE_POINTER);
signals[TITLE_CHANGED] =
gtk_signal_new ("title_changed",
GTK_RUN_LAST,
object_class->type,
GTK_SIGNAL_OFFSET (NautilusViewClass, title_changed),
gtk_marshal_NONE__STRING,
GTK_TYPE_NONE, 1, GTK_TYPE_STRING);
signals[HISTORY_CHANGED] =
gtk_signal_new ("history_changed",
GTK_RUN_LAST,
object_class->type,
GTK_SIGNAL_OFFSET (NautilusViewClass, history_changed),
gtk_marshal_NONE__POINTER,
GTK_TYPE_NONE, 1, GTK_TYPE_POINTER);
gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
}
static void
nautilus_view_initialize (NautilusView *view)
{
CORBA_Environment ev;
view->details = g_new0 (NautilusViewDetails, 1);
view->details->idle_queue = nautilus_idle_queue_new ();
CORBA_exception_init (&ev);
bonobo_object_construct
(BONOBO_OBJECT (view),
impl_Nautilus_View__create (view, &ev));
CORBA_exception_free (&ev);
}
NautilusView *
nautilus_view_new (GtkWidget *widget)
{
return nautilus_view_new_from_bonobo_control
(bonobo_control_new (widget));
}
NautilusView *
nautilus_view_new_from_bonobo_control (BonoboControl *control)
{
return nautilus_view_construct_from_bonobo_control
(NAUTILUS_VIEW (gtk_object_new (NAUTILUS_TYPE_VIEW, NULL)),
control);
}
NautilusView *
nautilus_view_construct (NautilusView *view,
GtkWidget *widget)
{
return nautilus_view_construct_from_bonobo_control
(view, bonobo_control_new (widget));
}
NautilusView *
nautilus_view_construct_from_bonobo_control (NautilusView *view,
BonoboControl *control)
{
g_return_val_if_fail (NAUTILUS_IS_VIEW (view), NULL);
g_return_val_if_fail (BONOBO_IS_CONTROL (control), NULL);
view->details->control = control;
bonobo_object_add_interface (BONOBO_OBJECT (view), BONOBO_OBJECT (control));
nautilus_undo_set_up_bonobo_control (control);
return view;
}
static void
nautilus_view_destroy (GtkObject *object)
{
NautilusView *view;
view = NAUTILUS_VIEW (object);
nautilus_idle_queue_destroy (view->details->idle_queue);
g_free (view->details);
NAUTILUS_CALL_PARENT (GTK_OBJECT_CLASS, destroy, (object));
}
static Nautilus_ViewFrame
view_frame_call_begin (NautilusView *view, CORBA_Environment *ev)
{
Nautilus_ViewFrame view_frame;
g_return_val_if_fail (NAUTILUS_IS_VIEW (view), CORBA_OBJECT_NIL);
CORBA_exception_init (ev);
view_frame = Bonobo_Unknown_queryInterface
(bonobo_control_get_control_frame (nautilus_view_get_bonobo_control (view)),
"IDL:Nautilus/ViewFrame:1.0", ev);
if (ev->_major != CORBA_NO_EXCEPTION) {
view_frame = CORBA_OBJECT_NIL;
}
return view_frame;
}
static void
view_frame_call_end (Nautilus_ViewFrame frame, CORBA_Environment *ev)
{
if (frame != CORBA_OBJECT_NIL) {
bonobo_object_release_unref (frame, ev);
}
CORBA_exception_free (ev);
}
void
nautilus_view_open_location_in_this_window (NautilusView *view,
const char *location)
{
CORBA_Environment ev;
Nautilus_ViewFrame view_frame;
view_frame = view_frame_call_begin (view, &ev);
if (view_frame != CORBA_OBJECT_NIL) {
Nautilus_ViewFrame_open_location_in_this_window
(view_frame, (CORBA_char *) location, &ev);
}
view_frame_call_end (view_frame, &ev);
}
void
nautilus_view_open_location_prefer_existing_window (NautilusView *view,
const char *location)
{
CORBA_Environment ev;
Nautilus_ViewFrame view_frame;
view_frame = view_frame_call_begin (view, &ev);
if (view_frame != CORBA_OBJECT_NIL) {
Nautilus_ViewFrame_open_location_prefer_existing_window
(view_frame, (CORBA_char *) location, &ev);
}
view_frame_call_end (view_frame, &ev);
}
void
nautilus_view_open_location_force_new_window (NautilusView *view,
const char *location,
GList *selection)
{
CORBA_Environment ev;
Nautilus_ViewFrame view_frame;
Nautilus_URIList *uri_list;
view_frame = view_frame_call_begin (view, &ev);
if (view_frame != CORBA_OBJECT_NIL) {
uri_list = nautilus_uri_list_from_g_list (selection);
Nautilus_ViewFrame_open_location_force_new_window
(view_frame, (CORBA_char *) location, uri_list, &ev);
CORBA_free (uri_list);
}
view_frame_call_end (view_frame, &ev);
}
void
nautilus_view_report_location_change (NautilusView *view,
const char *location,
GList *selection,
const char *title)
{
CORBA_Environment ev;
Nautilus_ViewFrame view_frame;
Nautilus_URIList *uri_list;
view_frame = view_frame_call_begin (view, &ev);
if (view_frame != CORBA_OBJECT_NIL) {
uri_list = nautilus_uri_list_from_g_list (selection);
Nautilus_ViewFrame_report_location_change
(view_frame, (CORBA_char *) location, uri_list, (CORBA_char *) title, &ev);
CORBA_free (uri_list);
}
view_frame_call_end (view_frame, &ev);
}
void
nautilus_view_report_selection_change (NautilusView *view,
GList *selection)
{
CORBA_Environment ev;
Nautilus_ViewFrame view_frame;
Nautilus_URIList *uri_list;
view_frame = view_frame_call_begin (view, &ev);
if (view_frame != CORBA_OBJECT_NIL) {
uri_list = nautilus_uri_list_from_g_list (selection);
Nautilus_ViewFrame_report_selection_change (view_frame, uri_list, &ev);
CORBA_free (uri_list);
}
view_frame_call_end (view_frame, &ev);
}
void
nautilus_view_report_status (NautilusView *view,
const char *status)
{
CORBA_Environment ev;
Nautilus_ViewFrame view_frame;
view_frame = view_frame_call_begin (view, &ev);
if (view_frame != CORBA_OBJECT_NIL) {
Nautilus_ViewFrame_report_status (view_frame, status, &ev);
}
view_frame_call_end (view_frame, &ev);
}
void
nautilus_view_report_load_underway (NautilusView *view)
{
CORBA_Environment ev;
Nautilus_ViewFrame view_frame;
view_frame = view_frame_call_begin (view, &ev);
if (view_frame != CORBA_OBJECT_NIL) {
Nautilus_ViewFrame_report_load_underway (view_frame, &ev);
}
view_frame_call_end (view_frame, &ev);
}
void
nautilus_view_report_load_progress (NautilusView *view,
double fraction_done)
{
CORBA_Environment ev;
Nautilus_ViewFrame view_frame;
view_frame = view_frame_call_begin (view, &ev);
if (view_frame != CORBA_OBJECT_NIL) {
Nautilus_ViewFrame_report_load_progress (view_frame, fraction_done, &ev);
}
view_frame_call_end (view_frame, &ev);
}
void
nautilus_view_report_load_complete (NautilusView *view)
{
CORBA_Environment ev;
Nautilus_ViewFrame view_frame;
view_frame = view_frame_call_begin (view, &ev);
if (view_frame != CORBA_OBJECT_NIL) {
Nautilus_ViewFrame_report_load_complete (view_frame, &ev);
}
view_frame_call_end (view_frame, &ev);
}
void
nautilus_view_report_load_failed (NautilusView *view)
{
CORBA_Environment ev;
Nautilus_ViewFrame view_frame;
view_frame = view_frame_call_begin (view, &ev);
if (view_frame != CORBA_OBJECT_NIL) {
Nautilus_ViewFrame_report_load_failed (view_frame, &ev);
}
view_frame_call_end (view_frame, &ev);
}
void
nautilus_view_set_title (NautilusView *view,
const char *title)
{
CORBA_Environment ev;
Nautilus_ViewFrame view_frame;
view_frame = view_frame_call_begin (view, &ev);
if (view_frame != CORBA_OBJECT_NIL) {
Nautilus_ViewFrame_set_title (view_frame, title, &ev);
}
view_frame_call_end (view_frame, &ev);
}
void
nautilus_view_go_back (NautilusView *view)
{
CORBA_Environment ev;
Nautilus_ViewFrame view_frame;
view_frame = view_frame_call_begin (view, &ev);
if (view_frame != CORBA_OBJECT_NIL) {
Nautilus_ViewFrame_go_back (view_frame, &ev);
}
view_frame_call_end (view_frame, &ev);
}
BonoboControl *
nautilus_view_get_bonobo_control (NautilusView *view)
{
g_return_val_if_fail (NAUTILUS_IS_VIEW (view), NULL);
return view->details->control;
}
BonoboUIComponent *
nautilus_view_set_up_ui (NautilusView *view,
const char *datadir,
const char *ui_file_name,
const char *application_name)
{
BonoboUIComponent *ui_component;
Bonobo_UIContainer ui_container;
/* Get the UI component that's pre-made by the control. */
ui_component = bonobo_control_get_ui_component (view->details->control);
/* Connect the UI component to the control frame's UI container. */
ui_container = bonobo_control_get_remote_ui_container (view->details->control);
bonobo_ui_component_set_container (ui_component, ui_container);
bonobo_object_release_unref (ui_container, NULL);
/* Set up the UI from an XML file. */
bonobo_ui_util_set_ui (ui_component, datadir, ui_file_name, application_name);
return ui_component;
}