void nemo_window_slot_make_hosting_pane_active (NemoWindowSlot *slot) { g_assert (NEMO_IS_WINDOW_PANE (slot->pane)); nemo_window_set_active_slot (nemo_window_slot_get_window (slot), slot); }
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); } } } }
static void notebook_page_added_cb (GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer user_data) { NemoWindowPane *pane; NemoWindowSlot *slot; NemoWindowSlot *dummy_slot; gboolean dnd_slot; pane = NEMO_WINDOW_PANE (user_data); slot = NEMO_WINDOW_SLOT (page); //Slot has been dropped onto another pane (new window or tab bar of other window) //So reassociate the pane if needed. if (slot->pane != pane) { slot->pane->slots = g_list_remove (slot->pane->slots, slot); slot->pane = pane; pane->slots = g_list_append (pane->slots, slot); g_signal_emit_by_name (slot, "changed-pane"); nemo_window_set_active_slot (nemo_window_slot_get_window (slot), slot); } dnd_slot = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (slot), "dnd-window-slot")); if (!dnd_slot) { //Slot does not come from dnd window creation. return; } g_object_set_data (G_OBJECT (page), "dnd-window-slot", GINT_TO_POINTER (FALSE)); dummy_slot = g_list_nth_data (pane->slots, 0); if (dummy_slot != NULL) { nemo_window_pane_close_slot (dummy_slot->pane, dummy_slot); } gtk_widget_show (GTK_WIDGET (pane)); gtk_widget_show (GTK_WIDGET (pane->window)); }
static gboolean notebook_switch_page_cb (GtkNotebook *notebook, GtkWidget *page, unsigned int page_num, NemoWindowPane *pane) { NemoWindowSlot *slot; GtkWidget *widget; widget = gtk_notebook_get_nth_page (GTK_NOTEBOOK (pane->notebook), page_num); g_assert (widget != NULL); /* find slot corresponding to the target page */ slot = NEMO_WINDOW_SLOT (widget); g_assert (slot != NULL); nemo_window_set_active_slot (nemo_window_slot_get_window (slot), slot); return FALSE; }
static void notebook_page_removed_cb (GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer user_data) { NemoWindowPane *pane = user_data; NemoWindowSlot *slot = NEMO_WINDOW_SLOT (page), *next_slot; gboolean dnd_slot; dnd_slot = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (slot), "dnd-window-slot")); if (!dnd_slot) { return; } if (pane->active_slot == slot) { next_slot = get_first_inactive_slot (pane); nemo_window_set_active_slot (pane->window, next_slot); } nemo_window_manage_views_close_slot (slot); pane->slots = g_list_remove (pane->slots, slot); }