static void window_history_capture (GiggleWindow *window) { GiggleWindowPriv *priv = GET_PRIV (window); GiggleWindowSnapshot *snapshot; if (priv->history_locked) return; snapshot = g_slice_new0 (GiggleWindowSnapshot); snapshot->view = giggle_view_shell_get_selected (GIGGLE_VIEW_SHELL (priv->view_shell)); if (GIGGLE_IS_HISTORY (snapshot->view)) { snapshot->view_data = giggle_history_capture (GIGGLE_HISTORY (snapshot->view)); } if (priv->history) { window_history_list_free (priv->history->next); priv->history->next = NULL; } priv->history = g_list_append (priv->history, snapshot); priv->history = g_list_last (priv->history); window_history_update_ui (window); }
GObject * giggle_history_capture (GiggleHistory *history) { GiggleHistoryIface *iface; g_return_val_if_fail (GIGGLE_IS_HISTORY (history), NULL); iface = GIGGLE_HISTORY_GET_IFACE (history); g_return_val_if_fail (NULL != iface->capture, NULL); return iface->capture (history); }
void giggle_history_restore (GiggleHistory *history, GObject *snapshot) { GiggleHistoryIface *iface; g_return_if_fail (GIGGLE_IS_HISTORY (history)); iface = GIGGLE_HISTORY_GET_IFACE (history); g_return_if_fail (NULL != iface->restore); iface->restore (history, snapshot); }
static void window_history_restore_snapshot (GiggleWindow *window, GiggleWindowSnapshot *snapshot) { GiggleWindowPriv *priv = GET_PRIV (window); if (priv->history_locked) return; priv->history_locked += 1; giggle_view_shell_select (GIGGLE_VIEW_SHELL (priv->view_shell), snapshot->view); if (GIGGLE_IS_HISTORY (snapshot->view)) { giggle_history_restore (GIGGLE_HISTORY (snapshot->view), snapshot->view_data); } window_history_update_ui (window); priv->history_locked -= 1; }
void giggle_history_changed (GiggleHistory *history) { g_return_if_fail (GIGGLE_IS_HISTORY (history)); g_signal_emit (history, signals[HISTORY_CHANGED], 0); }
void giggle_history_reset (GiggleHistory *history) { g_return_if_fail (GIGGLE_IS_HISTORY (history)); g_signal_emit (history, signals[HISTORY_RESET], 0); }