mirror of
https://gitlab.gnome.org/GNOME/nautilus
synced 2024-09-21 00:32:06 +00:00
764d936aa0
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.
692 lines
18 KiB
C
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;
|
|
}
|