mirror of
https://gitlab.gnome.org/GNOME/nautilus
synced 2024-08-25 10:45:41 +00:00
Consolidate zoom handling. Add nautilus_window_sync_zoom_level(), and
2008-08-06 Christian Neumair <cneumair@gnome.org> * src/nautilus-navigation-window.c (real_sync_zoom_widgets), (nautilus_navigation_window_class_init): * src/nautilus-window-manage-views.c (create_content_view), (location_has_really_changed), (update_for_new_location), (free_location_change), (nautilus_window_report_view_failed), (nautilus_window_manage_views_destroy), (nautilus_window_manage_views_close_slot): * src/nautilus-window-private.h: * src/nautilus-window-slot.c (real_active), (title_changed_callback), (nautilus_window_slot_connect_content_view), (nautilus_window_slot_disconnect_content_view), (nautilus_window_slot_set_content_view_widget): * src/nautilus-window-slot.h: * src/nautilus-window.c (nautilus_window_set_active_slot), (real_sync_zoom_widgets), (nautilus_window_sync_zoom_widgets), (zoom_level_changed_callback), (nautilus_window_connect_content_view), (nautilus_window_disconnect_content_view), (nautilus_window_class_init): * src/nautilus-window.h: Consolidate zoom handling. Add nautilus_window_sync_zoom_level(), and sync_zoom_level() method to NautilusWindow. Use it to sync both the menu state, and the toolbar state. Remove NautilusWindow's (dis)connect_content_view(), and use unified code in nautilus_window_(dis)connect_content_view(), wrapped by nautilus_window_slot_(dis)connect_content_view(), which also handles the (notebook) title sync. Fixes #546333. svn path=/trunk/; revision=14454
This commit is contained in:
parent
c0a2bfa0fc
commit
bd8931b354
31
ChangeLog
31
ChangeLog
|
@ -1,3 +1,34 @@
|
|||
2008-08-06 Christian Neumair <cneumair@gnome.org>
|
||||
|
||||
* src/nautilus-navigation-window.c (real_sync_zoom_widgets),
|
||||
(nautilus_navigation_window_class_init):
|
||||
* src/nautilus-window-manage-views.c (create_content_view),
|
||||
(location_has_really_changed), (update_for_new_location),
|
||||
(free_location_change), (nautilus_window_report_view_failed),
|
||||
(nautilus_window_manage_views_destroy),
|
||||
(nautilus_window_manage_views_close_slot):
|
||||
* src/nautilus-window-private.h:
|
||||
* src/nautilus-window-slot.c (real_active),
|
||||
(title_changed_callback),
|
||||
(nautilus_window_slot_connect_content_view),
|
||||
(nautilus_window_slot_disconnect_content_view),
|
||||
(nautilus_window_slot_set_content_view_widget):
|
||||
* src/nautilus-window-slot.h:
|
||||
* src/nautilus-window.c (nautilus_window_set_active_slot),
|
||||
(real_sync_zoom_widgets), (nautilus_window_sync_zoom_widgets),
|
||||
(zoom_level_changed_callback),
|
||||
(nautilus_window_connect_content_view),
|
||||
(nautilus_window_disconnect_content_view),
|
||||
(nautilus_window_class_init):
|
||||
* src/nautilus-window.h:
|
||||
Consolidate zoom handling. Add nautilus_window_sync_zoom_level(),
|
||||
and sync_zoom_level() method to NautilusWindow. Use it to sync both
|
||||
the menu state, and the toolbar state. Remove NautilusWindow's
|
||||
(dis)connect_content_view(), and use unified code in
|
||||
nautilus_window_(dis)connect_content_view(), wrapped by
|
||||
nautilus_window_slot_(dis)connect_content_view(), which also handles
|
||||
the (notebook) title sync. Fixes #546333.
|
||||
|
||||
2008-08-06 Cosimo Cecchi <cosimoc@gnome.org>
|
||||
|
||||
* src/nautilus-bookmarks-window.c: (on_selection_changed),
|
||||
|
|
|
@ -1224,78 +1224,6 @@ real_get_icon (NautilusWindow *window,
|
|||
return nautilus_icon_info_lookup_from_name ("system-file-manager", 48);
|
||||
}
|
||||
|
||||
static void
|
||||
zoom_level_changed_callback (NautilusView *view,
|
||||
NautilusNavigationWindow *window)
|
||||
{
|
||||
g_assert (NAUTILUS_WINDOW (window)->details->active_slot->content_view == view);
|
||||
|
||||
/* This is called each time the component successfully completed
|
||||
* a zooming operation.
|
||||
*/
|
||||
nautilus_zoom_control_set_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control),
|
||||
nautilus_view_get_zoom_level (view));
|
||||
}
|
||||
|
||||
static void
|
||||
real_connect_content_view (NautilusWindow *nautilus_window,
|
||||
NautilusView *view)
|
||||
{
|
||||
NautilusNavigationWindow *window;
|
||||
NautilusWindowSlot *slot;
|
||||
|
||||
window = NAUTILUS_NAVIGATION_WINDOW (nautilus_window);
|
||||
slot = nautilus_window->details->active_slot;
|
||||
|
||||
EEL_CALL_PARENT (NAUTILUS_WINDOW_CLASS,
|
||||
connect_content_view,
|
||||
(nautilus_window, view));
|
||||
|
||||
g_signal_connect (view, "zoom_level_changed",
|
||||
G_CALLBACK (zoom_level_changed_callback),
|
||||
window);
|
||||
|
||||
if (nautilus_view_supports_zooming (view)) {
|
||||
gtk_widget_show (window->zoom_control);
|
||||
} else {
|
||||
gtk_widget_hide (window->zoom_control);
|
||||
}
|
||||
|
||||
/* Update displayed view in menu. Only do this if we're not switching
|
||||
* locations though, because if we are switching locations we'll
|
||||
* install a whole new set of views in the menu later (the current
|
||||
* views in the menu are for the old location).
|
||||
*/
|
||||
if (slot->pending_location == NULL) {
|
||||
load_view_as_menu (nautilus_window);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
real_disconnect_content_view (NautilusWindow *nautilus_window,
|
||||
NautilusView *view)
|
||||
{
|
||||
NautilusNavigationWindow *window;
|
||||
|
||||
window = NAUTILUS_NAVIGATION_WINDOW (nautilus_window);
|
||||
|
||||
EEL_CALL_PARENT (NAUTILUS_WINDOW_CLASS,
|
||||
disconnect_content_view,
|
||||
(nautilus_window, view));
|
||||
|
||||
g_signal_handlers_disconnect_by_func
|
||||
(view,
|
||||
G_CALLBACK (zoom_level_changed_callback),
|
||||
window);
|
||||
|
||||
if (window->zoom_control != NULL) {
|
||||
/* if we run in destroy(), the
|
||||
* zoom control is already gone
|
||||
*/
|
||||
gtk_widget_hide (window->zoom_control);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
real_sync_allow_stop (NautilusWindow *window,
|
||||
NautilusWindowSlot *slot)
|
||||
|
@ -1563,6 +1491,50 @@ real_sync_search_widgets (NautilusWindow *window)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
real_sync_zoom_widgets (NautilusWindow *nautilus_window)
|
||||
{
|
||||
NautilusNavigationWindow *window;
|
||||
NautilusWindowSlot *slot;
|
||||
NautilusView *view;
|
||||
gboolean supports_zooming, can_zoom;
|
||||
|
||||
window = NAUTILUS_NAVIGATION_WINDOW (nautilus_window);
|
||||
|
||||
slot = nautilus_window->details->active_slot;
|
||||
view = slot->content_view;
|
||||
|
||||
EEL_CALL_PARENT (NAUTILUS_WINDOW_CLASS,
|
||||
sync_zoom_widgets, (nautilus_window));
|
||||
|
||||
if (view == NULL) {
|
||||
/* don't toggle UI state at all. This might be
|
||||
* wrong, but it prevents flickering when opening
|
||||
* a new tab and immediately switching to it -
|
||||
* before view selection.
|
||||
*/
|
||||
return;
|
||||
}
|
||||
|
||||
supports_zooming = nautilus_view_supports_zooming (view);
|
||||
can_zoom = supports_zooming &&
|
||||
nautilus_view_get_zoom_level (view) != 0.0;
|
||||
|
||||
if (window->zoom_control != NULL) {
|
||||
if (supports_zooming) {
|
||||
gtk_widget_set_sensitive (window->zoom_control, can_zoom);
|
||||
gtk_widget_show (window->zoom_control);
|
||||
if (can_zoom) {
|
||||
nautilus_zoom_control_set_zoom_level (NAUTILUS_ZOOM_CONTROL (window->zoom_control),
|
||||
nautilus_view_get_zoom_level (view));
|
||||
}
|
||||
} else {
|
||||
gtk_widget_hide (window->zoom_control);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
side_panel_image_changed_callback (NautilusSidebar *side_panel,
|
||||
gpointer callback_data)
|
||||
|
@ -2017,11 +1989,10 @@ nautilus_navigation_window_class_init (NautilusNavigationWindowClass *class)
|
|||
GTK_WIDGET_CLASS (class)->window_state_event = nautilus_navigation_window_state_event;
|
||||
GTK_WIDGET_CLASS (class)->key_press_event = nautilus_navigation_window_key_press_event;
|
||||
NAUTILUS_WINDOW_CLASS (class)->load_view_as_menu = real_load_view_as_menu;
|
||||
NAUTILUS_WINDOW_CLASS (class)->connect_content_view = real_connect_content_view;
|
||||
NAUTILUS_WINDOW_CLASS (class)->disconnect_content_view = real_disconnect_content_view;
|
||||
NAUTILUS_WINDOW_CLASS (class)->sync_allow_stop = real_sync_allow_stop;
|
||||
NAUTILUS_WINDOW_CLASS (class)->prompt_for_location = real_prompt_for_location;
|
||||
NAUTILUS_WINDOW_CLASS (class)->sync_search_widgets = real_sync_search_widgets;
|
||||
NAUTILUS_WINDOW_CLASS (class)->sync_zoom_widgets = real_sync_zoom_widgets;
|
||||
NAUTILUS_WINDOW_CLASS (class)->sync_title = real_sync_title;
|
||||
NAUTILUS_WINDOW_CLASS (class)->get_icon = real_get_icon;
|
||||
NAUTILUS_WINDOW_CLASS (class)->get_default_size = real_get_default_size;
|
||||
|
|
|
@ -82,10 +82,6 @@
|
|||
*/
|
||||
#define MAX_URI_IN_DIALOG_LENGTH 60
|
||||
|
||||
static void slot_connect_view (NautilusWindowSlot *slot,
|
||||
NautilusView *view);
|
||||
static void slot_disconnect_view (NautilusWindowSlot *slot,
|
||||
NautilusView *view);
|
||||
static void begin_location_change (NautilusWindowSlot *slot,
|
||||
GFile *location,
|
||||
GList *new_selection,
|
||||
|
@ -110,8 +106,6 @@ static void load_new_location (NautilusWindowSlot
|
|||
gboolean tell_new_content_view);
|
||||
static void location_has_really_changed (NautilusWindowSlot *slot);
|
||||
static void update_for_new_location (NautilusWindowSlot *slot);
|
||||
static void zoom_parameters_changed_callback (NautilusView *view,
|
||||
NautilusWindowSlot *window);
|
||||
|
||||
void
|
||||
nautilus_window_report_selection_changed (NautilusWindowInfo *window)
|
||||
|
@ -1194,7 +1188,6 @@ create_content_view (NautilusWindowSlot *slot,
|
|||
NautilusWindow *window;
|
||||
NautilusView *view;
|
||||
GList *selection;
|
||||
GtkAction *action;
|
||||
|
||||
window = slot->window;
|
||||
|
||||
|
@ -1209,16 +1202,6 @@ create_content_view (NautilusWindowSlot *slot,
|
|||
*/
|
||||
view_id = NAUTILUS_DESKTOP_ICON_VIEW_IID;
|
||||
}
|
||||
|
||||
action = gtk_action_group_get_action (window->details->main_action_group,
|
||||
NAUTILUS_ACTION_ZOOM_IN);
|
||||
gtk_action_set_sensitive (action, FALSE);
|
||||
action = gtk_action_group_get_action (window->details->main_action_group,
|
||||
NAUTILUS_ACTION_ZOOM_OUT);
|
||||
gtk_action_set_sensitive (action, FALSE);
|
||||
action = gtk_action_group_get_action (window->details->main_action_group,
|
||||
NAUTILUS_ACTION_ZOOM_NORMAL);
|
||||
gtk_action_set_sensitive (action, FALSE);
|
||||
|
||||
if (slot->content_view != NULL &&
|
||||
eel_strcmp (nautilus_view_get_view_id (slot->content_view),
|
||||
|
@ -1234,10 +1217,9 @@ create_content_view (NautilusWindowSlot *slot,
|
|||
|
||||
eel_accessibility_set_name (view, _("Content View"));
|
||||
eel_accessibility_set_description (view, _("View of the current folder"));
|
||||
|
||||
slot_connect_view (slot, view);
|
||||
|
||||
|
||||
slot->new_content_view = view;
|
||||
nautilus_window_slot_connect_content_view (slot, slot->new_content_view);
|
||||
}
|
||||
|
||||
/* Actually load the pending location and selection: */
|
||||
|
@ -1395,7 +1377,9 @@ location_has_really_changed (NautilusWindowSlot *slot)
|
|||
widget = nautilus_view_get_widget (slot->new_content_view);
|
||||
/* Switch to the new content view. */
|
||||
if (widget->parent == NULL) {
|
||||
slot_disconnect_view (slot, slot->content_view);
|
||||
if (slot->content_view != NULL) {
|
||||
nautilus_window_slot_disconnect_content_view (slot, slot->content_view);
|
||||
}
|
||||
nautilus_window_slot_set_content_view_widget (slot, slot->new_content_view);
|
||||
}
|
||||
g_object_unref (slot->new_content_view);
|
||||
|
@ -1635,12 +1619,9 @@ update_for_new_location (NautilusWindowSlot *slot)
|
|||
/* Check if we can go up. */
|
||||
update_up_button (window);
|
||||
}
|
||||
|
||||
/* Set up the initial zoom levels */
|
||||
zoom_parameters_changed_callback (slot->content_view,
|
||||
slot);
|
||||
|
||||
if (slot == window->details->active_slot) {
|
||||
nautilus_window_sync_zoom_widgets (window);
|
||||
/* Set up the content view menu for this new location. */
|
||||
nautilus_window_load_view_as_menus (window);
|
||||
|
||||
|
@ -1786,7 +1767,7 @@ free_location_change (NautilusWindowSlot *slot)
|
|||
nautilus_view_stop_loading (slot->new_content_view);
|
||||
window->details->temporarily_ignore_view_signals = FALSE;
|
||||
|
||||
slot_disconnect_view (slot, slot->new_content_view);
|
||||
nautilus_window_slot_disconnect_content_view (slot, slot->new_content_view);
|
||||
g_object_unref (slot->new_content_view);
|
||||
slot->new_content_view = NULL;
|
||||
}
|
||||
|
@ -1839,7 +1820,7 @@ nautilus_window_report_view_failed (NautilusWindow *window,
|
|||
fallback_load_location = NULL;
|
||||
|
||||
if (view == slot->content_view) {
|
||||
slot_disconnect_view (slot, slot->content_view);
|
||||
nautilus_window_slot_disconnect_content_view (slot, view);
|
||||
nautilus_window_slot_set_content_view_widget (slot, NULL);
|
||||
|
||||
report_current_content_view_failure_to_user (slot);
|
||||
|
@ -2037,123 +2018,6 @@ nautilus_window_slot_set_content_view (NautilusWindowSlot *slot,
|
|||
create_content_view (slot, id);
|
||||
}
|
||||
|
||||
static void
|
||||
zoom_level_changed_callback (NautilusView *view,
|
||||
NautilusWindowSlot *slot)
|
||||
{
|
||||
NautilusWindow *window;
|
||||
GtkAction *action;
|
||||
gboolean supports_zooming;
|
||||
|
||||
window = slot->window;
|
||||
g_assert (NAUTILUS_IS_WINDOW (window));
|
||||
|
||||
if (slot != nautilus_window_get_active_slot (window)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* This is called each time the component successfully completed
|
||||
* a zooming operation.
|
||||
*/
|
||||
|
||||
supports_zooming = nautilus_view_supports_zooming (view);
|
||||
|
||||
action = gtk_action_group_get_action (window->details->main_action_group,
|
||||
NAUTILUS_ACTION_ZOOM_IN);
|
||||
gtk_action_set_visible (action, supports_zooming);
|
||||
gtk_action_set_sensitive (action,
|
||||
nautilus_view_can_zoom_in (view));
|
||||
|
||||
action = gtk_action_group_get_action (window->details->main_action_group,
|
||||
NAUTILUS_ACTION_ZOOM_OUT);
|
||||
gtk_action_set_visible (action, supports_zooming);
|
||||
gtk_action_set_sensitive (action,
|
||||
nautilus_view_can_zoom_out (view));
|
||||
|
||||
action = gtk_action_group_get_action (window->details->main_action_group,
|
||||
NAUTILUS_ACTION_ZOOM_NORMAL);
|
||||
gtk_action_set_visible (action, supports_zooming);
|
||||
gtk_action_set_sensitive (action, supports_zooming);
|
||||
}
|
||||
|
||||
static void
|
||||
zoom_parameters_changed_callback (NautilusView *view,
|
||||
NautilusWindowSlot *slot)
|
||||
{
|
||||
NautilusWindow *window;
|
||||
float zoom_level;
|
||||
GtkAction *action;
|
||||
|
||||
window = slot->window;
|
||||
g_assert (NAUTILUS_IS_WINDOW (window));
|
||||
|
||||
if (slot != window->details->active_slot) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* The initial zoom level of a component is allowed to be 0.0 if
|
||||
* there is no file loaded yet. In this case we need to set the
|
||||
* commands insensitive but display the zoom control nevertheless
|
||||
* (the component is just temporarily unable to zoom, but the
|
||||
* zoom control will "do the right thing" here).
|
||||
*/
|
||||
zoom_level = nautilus_view_get_zoom_level (view);
|
||||
if (zoom_level == 0.0) {
|
||||
action = gtk_action_group_get_action (window->details->main_action_group,
|
||||
NAUTILUS_ACTION_ZOOM_IN);
|
||||
gtk_action_set_sensitive (action, FALSE);
|
||||
action = gtk_action_group_get_action (window->details->main_action_group,
|
||||
NAUTILUS_ACTION_ZOOM_OUT);
|
||||
gtk_action_set_sensitive (action, FALSE);
|
||||
action = gtk_action_group_get_action (window->details->main_action_group,
|
||||
NAUTILUS_ACTION_ZOOM_NORMAL);
|
||||
gtk_action_set_sensitive (action, FALSE);
|
||||
|
||||
/* Don't attempt to set 0.0 as zoom level. */
|
||||
return;
|
||||
}
|
||||
|
||||
/* "zoom_parameters_changed" always implies "zoom_level_changed",
|
||||
* but you won't get both signals, so we need to pass it down.
|
||||
*/
|
||||
zoom_level_changed_callback (view, slot);
|
||||
}
|
||||
|
||||
static void
|
||||
title_changed_callback (NautilusView *view,
|
||||
NautilusWindowSlot *slot)
|
||||
{
|
||||
g_assert (NAUTILUS_IS_WINDOW (slot->window));
|
||||
|
||||
nautilus_window_slot_update_title (slot);
|
||||
nautilus_window_slot_update_icon (slot);
|
||||
}
|
||||
|
||||
static void
|
||||
slot_connect_view (NautilusWindowSlot *slot,
|
||||
NautilusView *view)
|
||||
{
|
||||
g_signal_connect (view, "title_changed",
|
||||
G_CALLBACK (title_changed_callback), slot);
|
||||
g_signal_connect (view, "zoom_level_changed",
|
||||
G_CALLBACK (zoom_level_changed_callback), slot);
|
||||
g_signal_connect (view, "zoom_parameters_changed",
|
||||
G_CALLBACK (zoom_parameters_changed_callback), slot);
|
||||
}
|
||||
|
||||
static void
|
||||
slot_disconnect_view (NautilusWindowSlot *slot,
|
||||
NautilusView *view)
|
||||
{
|
||||
if (view == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
g_signal_handlers_disconnect_by_func (view, title_changed_callback, slot);
|
||||
g_signal_handlers_disconnect_by_func (view, zoom_level_changed_callback, slot);
|
||||
g_signal_handlers_disconnect_by_func (view, zoom_parameters_changed_callback, slot);
|
||||
}
|
||||
|
||||
void
|
||||
nautilus_window_manage_views_destroy (NautilusWindow *window)
|
||||
{
|
||||
|
@ -2168,10 +2032,10 @@ nautilus_window_manage_views_destroy (NautilusWindow *window)
|
|||
slot = l->data;
|
||||
|
||||
if (slot->content_view != NULL) {
|
||||
slot_disconnect_view (slot, slot->content_view);
|
||||
nautilus_window_slot_disconnect_content_view (slot, slot->content_view);
|
||||
}
|
||||
if (slot->new_content_view != NULL) {
|
||||
slot_disconnect_view (slot, slot->new_content_view);
|
||||
nautilus_window_slot_disconnect_content_view (slot, slot->new_content_view);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2180,6 +2044,9 @@ void
|
|||
nautilus_window_manage_views_close_slot (NautilusWindow *window,
|
||||
NautilusWindowSlot *slot)
|
||||
{
|
||||
if (slot->content_view != NULL) {
|
||||
nautilus_window_slot_disconnect_content_view (slot, slot->content_view);
|
||||
}
|
||||
|
||||
free_location_change (slot);
|
||||
cancel_viewed_file_changed_callback (slot);
|
||||
|
|
|
@ -224,6 +224,7 @@ void nautilus_window_sync_allow_stop (NautilusWindow *window,
|
|||
void nautilus_window_sync_title (NautilusWindow *window,
|
||||
NautilusWindowSlot *slot);
|
||||
void nautilus_window_sync_location_widgets (NautilusWindow *window);
|
||||
void nautilus_window_sync_zoom_widgets (NautilusWindow *window);
|
||||
|
||||
/* Navigation window menus */
|
||||
void nautilus_navigation_window_initialize_actions (NautilusNavigationWindow *window);
|
||||
|
|
|
@ -114,6 +114,7 @@ real_active (NautilusWindowSlot *slot)
|
|||
nautilus_window_sync_status (window);
|
||||
nautilus_window_sync_allow_stop (window, slot);
|
||||
nautilus_window_sync_title (window, slot);
|
||||
nautilus_window_sync_zoom_widgets (window);
|
||||
nautilus_window_sync_location_widgets (window);
|
||||
nautilus_window_sync_search_widgets (window);
|
||||
|
||||
|
@ -359,24 +360,60 @@ nautilus_window_slot_update_icon (NautilusWindowSlot *slot)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
title_changed_callback (NautilusView *view,
|
||||
NautilusWindowSlot *slot)
|
||||
{
|
||||
g_assert (NAUTILUS_IS_WINDOW (slot->window));
|
||||
|
||||
nautilus_window_slot_update_title (slot);
|
||||
nautilus_window_slot_update_icon (slot);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
nautilus_window_slot_connect_content_view (NautilusWindowSlot *slot,
|
||||
NautilusView *view)
|
||||
{
|
||||
NautilusWindow *window;
|
||||
|
||||
g_signal_connect (view, "title-changed",
|
||||
G_CALLBACK (title_changed_callback),
|
||||
slot);
|
||||
|
||||
window = slot->window;
|
||||
if (window != NULL && slot == nautilus_window_get_active_slot (window)) {
|
||||
nautilus_window_connect_content_view (window, view);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
nautilus_window_slot_disconnect_content_view (NautilusWindowSlot *slot,
|
||||
NautilusView *view)
|
||||
{
|
||||
NautilusWindow *window;
|
||||
|
||||
g_signal_handlers_disconnect_by_func (view, G_CALLBACK (title_changed_callback), slot);
|
||||
|
||||
window = slot->window;
|
||||
if (window != NULL && slot == nautilus_window_get_active_slot (window)) {
|
||||
nautilus_window_disconnect_content_view (window, view);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
nautilus_window_slot_set_content_view_widget (NautilusWindowSlot *slot,
|
||||
NautilusView *new_view)
|
||||
{
|
||||
NautilusWindow *window;
|
||||
GtkWidget *widget;
|
||||
gboolean inform_window;
|
||||
|
||||
window = slot->window;
|
||||
g_return_if_fail (NAUTILUS_IS_WINDOW (window));
|
||||
|
||||
inform_window = slot == window->details->active_slot;
|
||||
g_assert (NAUTILUS_IS_WINDOW (window));
|
||||
|
||||
if (slot->content_view != NULL) {
|
||||
/* disconnect old view */
|
||||
if (inform_window) {
|
||||
nautilus_window_disconnect_content_view (window, slot->content_view);
|
||||
}
|
||||
nautilus_window_slot_disconnect_content_view (slot, slot->content_view);
|
||||
|
||||
widget = nautilus_view_get_widget (slot->content_view);
|
||||
gtk_widget_destroy (widget);
|
||||
|
@ -395,9 +432,7 @@ nautilus_window_slot_set_content_view_widget (NautilusWindowSlot *slot,
|
|||
g_object_ref (slot->content_view);
|
||||
|
||||
/* connect new view */
|
||||
if (inform_window) {
|
||||
nautilus_window_connect_content_view (window, new_view);
|
||||
}
|
||||
nautilus_window_slot_connect_content_view (slot, new_view);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -142,6 +142,11 @@ const char *nautilus_window_slot_get_content_view_id (NautilusWindow
|
|||
gboolean nautilus_window_slot_content_view_matches_iid (NautilusWindowSlot *slot,
|
||||
const char *iid);
|
||||
|
||||
void nautilus_window_slot_connect_content_view (NautilusWindowSlot *slot,
|
||||
NautilusView *view);
|
||||
void nautilus_window_slot_disconnect_content_view (NautilusWindowSlot *slot,
|
||||
NautilusView *view);
|
||||
|
||||
#define nautilus_window_slot_go_to(slot,location, new_tab) \
|
||||
nautilus_window_slot_open_location_full(slot, location, NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE, \
|
||||
(new_tab ? NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB : 0), \
|
||||
|
|
|
@ -762,7 +762,7 @@ nautilus_window_set_active_slot (NautilusWindow *window,
|
|||
if (old_slot != NULL) {
|
||||
/* inform window */
|
||||
if (old_slot->content_view != NULL) {
|
||||
nautilus_window_disconnect_content_view (window, old_slot->content_view);
|
||||
nautilus_window_slot_disconnect_content_view (old_slot, old_slot->content_view);
|
||||
}
|
||||
|
||||
/* inform slot & view */
|
||||
|
@ -782,7 +782,7 @@ nautilus_window_set_active_slot (NautilusWindow *window,
|
|||
|
||||
if (new_slot->content_view != NULL) {
|
||||
/* inform window */
|
||||
nautilus_window_connect_content_view (window, new_slot->content_view);
|
||||
nautilus_window_slot_connect_content_view (new_slot, new_slot->content_view);
|
||||
}
|
||||
|
||||
/* inform slot & view */
|
||||
|
@ -1313,12 +1313,86 @@ nautilus_window_sync_title (NautilusWindow *window,
|
|||
}
|
||||
|
||||
static void
|
||||
real_connect_content_view (NautilusWindow *window,
|
||||
NautilusView *view)
|
||||
real_sync_zoom_widgets (NautilusWindow *window)
|
||||
{
|
||||
NautilusWindowSlot *slot;
|
||||
NautilusView *view;
|
||||
GtkAction *action;
|
||||
gboolean supports_zooming;
|
||||
gboolean can_zoom, can_zoom_in, can_zoom_out;
|
||||
|
||||
slot = window->details->active_slot;
|
||||
view = slot->content_view;
|
||||
|
||||
if (view != NULL) {
|
||||
supports_zooming = nautilus_view_supports_zooming (view);
|
||||
can_zoom = supports_zooming && nautilus_view_get_zoom_level (view) != 0.0;
|
||||
can_zoom_in = can_zoom && nautilus_view_can_zoom_in (view);
|
||||
can_zoom_out = can_zoom && nautilus_view_can_zoom_out (view);
|
||||
} else {
|
||||
supports_zooming = FALSE;
|
||||
can_zoom = FALSE;
|
||||
can_zoom_in = FALSE;
|
||||
can_zoom_out = FALSE;
|
||||
}
|
||||
|
||||
action = gtk_action_group_get_action (window->details->main_action_group,
|
||||
NAUTILUS_ACTION_ZOOM_IN);
|
||||
gtk_action_set_visible (action, supports_zooming);
|
||||
gtk_action_set_sensitive (action, can_zoom_in);
|
||||
|
||||
action = gtk_action_group_get_action (window->details->main_action_group,
|
||||
NAUTILUS_ACTION_ZOOM_OUT);
|
||||
gtk_action_set_visible (action, supports_zooming);
|
||||
gtk_action_set_sensitive (action, can_zoom_out);
|
||||
|
||||
action = gtk_action_group_get_action (window->details->main_action_group,
|
||||
NAUTILUS_ACTION_ZOOM_NORMAL);
|
||||
gtk_action_set_visible (action, supports_zooming);
|
||||
gtk_action_set_sensitive (action, can_zoom);
|
||||
}
|
||||
|
||||
void
|
||||
nautilus_window_sync_zoom_widgets (NautilusWindow *window)
|
||||
{
|
||||
EEL_CALL_METHOD (NAUTILUS_WINDOW_CLASS, window,
|
||||
sync_zoom_widgets, (window));
|
||||
}
|
||||
|
||||
static void
|
||||
zoom_level_changed_callback (NautilusView *view,
|
||||
NautilusWindow *window)
|
||||
{
|
||||
g_assert (NAUTILUS_IS_WINDOW (window));
|
||||
|
||||
/* This is called each time the component in
|
||||
* the active slot successfully completed
|
||||
* a zooming operation.
|
||||
*/
|
||||
nautilus_window_sync_zoom_widgets (window);
|
||||
}
|
||||
|
||||
|
||||
/* These are called
|
||||
* A) when switching the view within the active slot
|
||||
* B) when switching the active slot
|
||||
* C) when closing the active slot (disconnect)
|
||||
*/
|
||||
void
|
||||
nautilus_window_connect_content_view (NautilusWindow *window,
|
||||
NautilusView *view)
|
||||
{
|
||||
NautilusWindowSlot *slot;
|
||||
|
||||
slot = window->details->active_slot;
|
||||
g_assert (NAUTILUS_IS_WINDOW (window));
|
||||
g_assert (NAUTILUS_IS_VIEW (view));
|
||||
|
||||
slot = nautilus_window_get_slot_for_view (window, view);
|
||||
g_assert (slot == nautilus_window_get_active_slot (window));
|
||||
|
||||
g_signal_connect (view, "zoom-level-changed",
|
||||
G_CALLBACK (zoom_level_changed_callback),
|
||||
window);
|
||||
|
||||
/* Update displayed view in menu. Only do this if we're not switching
|
||||
* locations though, because if we are switching locations we'll
|
||||
|
@ -1332,36 +1406,19 @@ real_connect_content_view (NautilusWindow *window,
|
|||
nautilus_view_grab_focus (view);
|
||||
}
|
||||
|
||||
static void
|
||||
real_disconnect_content_view (NautilusWindow *window,
|
||||
NautilusView *view)
|
||||
{
|
||||
g_assert (NAUTILUS_IS_WINDOW (window));
|
||||
g_assert (NAUTILUS_IS_VIEW (view));
|
||||
|
||||
/* nothing to do... */
|
||||
}
|
||||
|
||||
void
|
||||
nautilus_window_connect_content_view (NautilusWindow *window,
|
||||
NautilusView *view)
|
||||
{
|
||||
g_assert (NAUTILUS_IS_WINDOW (window));
|
||||
g_assert (NAUTILUS_IS_VIEW (view));
|
||||
|
||||
EEL_CALL_METHOD (NAUTILUS_WINDOW_CLASS, window,
|
||||
connect_content_view, (window, view));
|
||||
}
|
||||
|
||||
void
|
||||
nautilus_window_disconnect_content_view (NautilusWindow *window,
|
||||
NautilusView *view)
|
||||
{
|
||||
NautilusWindowSlot *slot;
|
||||
|
||||
g_assert (NAUTILUS_IS_WINDOW (window));
|
||||
g_assert (NAUTILUS_IS_VIEW (view));
|
||||
|
||||
EEL_CALL_METHOD (NAUTILUS_WINDOW_CLASS, window,
|
||||
disconnect_content_view, (window, view));
|
||||
slot = nautilus_window_get_slot_for_view (window, view);
|
||||
g_assert (slot == nautilus_window_get_active_slot (window));
|
||||
|
||||
g_signal_handlers_disconnect_by_func (view, G_CALLBACK (zoom_level_changed_callback), window);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1772,8 +1829,7 @@ nautilus_window_class_init (NautilusWindowClass *class)
|
|||
GTK_WIDGET_CLASS (class)->key_press_event = nautilus_window_key_press_event;
|
||||
class->get_title = real_get_title;
|
||||
class->sync_title = real_sync_title;
|
||||
class->connect_content_view = real_connect_content_view;
|
||||
class->disconnect_content_view = real_disconnect_content_view;
|
||||
class->sync_zoom_widgets = real_sync_zoom_widgets;
|
||||
class->load_view_as_menu = real_load_view_as_menu;
|
||||
class->set_allow_up = real_set_allow_up;
|
||||
class->close_slot = real_close_slot;
|
||||
|
|
|
@ -89,21 +89,13 @@ typedef struct {
|
|||
|
||||
void (* load_view_as_menu) (NautilusWindow *window);
|
||||
|
||||
/* these are called
|
||||
* A) when switching the view within the active slot
|
||||
* B) when switching the active slot
|
||||
*/
|
||||
void (* connect_content_view) (NautilusWindow *window,
|
||||
NautilusView *new_view);
|
||||
void (* disconnect_content_view) (NautilusWindow *window,
|
||||
NautilusView *new_view);
|
||||
|
||||
void (* sync_allow_stop) (NautilusWindow *window,
|
||||
NautilusWindowSlot *slot);
|
||||
void (* set_allow_up) (NautilusWindow *window, gboolean allow);
|
||||
void (* reload) (NautilusWindow *window);
|
||||
void (* prompt_for_location) (NautilusWindow *window, const char *initial);
|
||||
void (* sync_search_widgets) (NautilusWindow *window);
|
||||
void (* sync_zoom_widgets) (NautilusWindow *window);
|
||||
void (* get_default_size) (NautilusWindow *window, guint *default_width, guint *default_height);
|
||||
void (* show_window) (NautilusWindow *window);
|
||||
void (* close) (NautilusWindow *window);
|
||||
|
|
Loading…
Reference in a new issue