static void action_split_view_callback (GtkAction *action, gpointer user_data) { NemoWindow *window; gboolean is_active; window = NEMO_WINDOW (user_data); is_active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); if (is_active != nemo_window_split_view_showing (window)) { NemoWindowSlot *slot; if (is_active) { nemo_window_split_view_on (window); } else { nemo_window_split_view_off (window); } slot = nemo_window_get_active_slot (window); if (slot != NULL) { nemo_view_update_menus (slot->content_view); } } }
static void nemo_window_update_split_view_actions_sensitivity (NemoWindow *window) { GtkActionGroup *action_group; GtkAction *action; gboolean have_multiple_panes; gboolean next_pane_is_in_same_location; GFile *active_pane_location; GFile *next_pane_location; NemoWindowPane *next_pane; NemoWindowSlot *active_slot; active_slot = nemo_window_get_active_slot (window); action_group = nemo_window_get_main_action_group (window); /* collect information */ have_multiple_panes = nemo_window_split_view_showing (window); if (active_slot != NULL) { active_pane_location = nemo_window_slot_get_location (active_slot); } else { active_pane_location = NULL; } next_pane = nemo_window_get_next_pane (window); if (next_pane && next_pane->active_slot) { next_pane_location = nemo_window_slot_get_location (next_pane->active_slot); next_pane_is_in_same_location = (active_pane_location && next_pane_location && g_file_equal (active_pane_location, next_pane_location)); } else { next_pane_location = NULL; next_pane_is_in_same_location = FALSE; } /* switch to next pane */ action = gtk_action_group_get_action (action_group, "SplitViewNextPane"); gtk_action_set_sensitive (action, have_multiple_panes); /* same location */ action = gtk_action_group_get_action (action_group, "SplitViewSameLocation"); gtk_action_set_sensitive (action, have_multiple_panes && !next_pane_is_in_same_location); /* clean up */ g_clear_object (&active_pane_location); g_clear_object (&next_pane_location); }
void nemo_window_pane_slot_close (NemoWindowPane *pane, NemoWindowSlot *slot) { NemoWindowSlot *next_slot; DEBUG ("Requesting to remove slot %p from pane %p", slot, pane); if (pane->window) { NemoWindow *window; window = pane->window; if (pane->active_slot == slot) { next_slot = get_first_inactive_slot (NEMO_WINDOW_PANE (pane)); nemo_window_set_active_slot (window, next_slot); } nemo_window_pane_close_slot (pane, slot); /* If that was the last slot in the pane, close the pane or even the whole window. */ if (pane->slots == NULL) { if (nemo_window_split_view_showing (window)) { NemoWindowPane *new_pane; DEBUG ("Last slot removed from the pane %p, closing it", pane); nemo_window_close_pane (window, pane); new_pane = g_list_nth_data (window->details->panes, 0); if (new_pane->active_slot == NULL) { new_pane->active_slot = get_first_inactive_slot (new_pane); } DEBUG ("Calling set_active_pane, new slot %p", new_pane->active_slot); nemo_window_set_active_pane (window, new_pane); nemo_window_update_show_hide_menu_items (window); } else { DEBUG ("Last slot removed from the last pane, close the window"); nemo_window_close (window); } } } }
void nemo_window_update_show_hide_menu_items (NemoWindow *window) { GtkActionGroup *action_group; GtkAction *action; guint current_value; action_group = nemo_window_get_main_action_group (window); action = gtk_action_group_get_action (action_group, NEMO_ACTION_SHOW_HIDE_EXTRA_PANE); gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), nemo_window_split_view_showing (window)); nemo_window_update_split_view_actions_sensitivity (window); action = gtk_action_group_get_action (action_group, "Sidebar Places"); current_value = sidebar_id_to_value (window->details->sidebar_id); gtk_radio_action_set_current_value (GTK_RADIO_ACTION (action), current_value); }