/* save_yourself handler for the master client */ static gboolean client_save_yourself_cb (GnomeClient *client, gint phase, GnomeSaveStyle save_style, gboolean shutdown, GnomeInteractStyle interact_style, gboolean fast, gpointer data) { const char *prefix; char *argv[4] = { NULL }; save_session (client); prefix = gnome_client_get_config_prefix (client); /* Tell the session manager how to discard this save */ argv[0] = "rm"; argv[1] = "-rf"; argv[2] = gnome_config_get_real_path (prefix); argv[3] = NULL; gnome_client_set_discard_command (client, 3, argv); /* Tell the session manager how to clone or restart this instance */ argv[0] = (char *) program_argv0; argv[1] = NULL; /* "--debug-session"; */ gnome_client_set_clone_command (client, 1, argv); gnome_client_set_restart_command (client, 1, argv); return TRUE; }
static void load_session (gboolean use_factory, GNOME_GThumb_Application app, CORBA_Environment *env) { int i, n; gnome_config_push_prefix (gnome_client_get_config_prefix (master_client)); n = gnome_config_get_int ("Session/locations"); for (i = 0; i < n; i++) { char *key; char *location; key = g_strdup_printf ("Session/location%d", i); location = gnome_config_get_string (key); if (uri_scheme_is_file (location) && path_is_file (location)) open_viewer_window (location, use_factory, app, env); else open_browser_window (location, TRUE, use_factory, app, env); g_free (location); g_free (key); } gnome_config_pop_prefix (); }
static int save_state (GnomeClient *client, gint phase, GnomeSaveStyle save_style, gint shutdown, GnomeInteractStyle interact_style, gint fast, gpointer client_data) { gchar *prefix = gnome_client_get_config_prefix (client); gchar *argv []= { "rm", "-r", NULL }; gchar *buf; struct ball *f = (struct ball*) field; int i; if (debugging) g_print ("Saving state\n"); gnome_config_push_prefix (prefix); gnome_config_set_int ("Game/Score", score); gnome_config_set_int ("Game/NStones", sync_stones ? 1 : nstones); buf= g_malloc (STONE_COLS*STONE_LINES+1); for (i = 0 ; i < (STONE_COLS*STONE_LINES); i++){ buf [i]= f [i].color + 'a'; } buf [STONE_COLS*STONE_LINES]= '\0'; gnome_config_set_string ("Game/Field", buf); g_free(buf); gnome_config_pop_prefix (); gnome_config_sync(); argv[2]= gnome_config_get_real_path (prefix); gnome_client_set_discard_command (client, 3, argv); return TRUE; }
int main (int argc, char *argv []) { GtkWidget *label; GnomeClient *client; gnome_score_init("same-gnome"); bindtextdomain (PACKAGE, GNOMELOCALEDIR); textdomain (PACKAGE); gnome_init_with_popt_table ("same-gnome", VERSION, argc, argv, options, 0, NULL); gnome_window_icon_set_default_from_file (GNOME_ICONDIR"/gnome-gsame.png"); client= gnome_master_client (); gtk_signal_connect (GTK_OBJECT (client), "save_yourself", GTK_SIGNAL_FUNC (save_state), argv[0]); gtk_signal_connect (GTK_OBJECT (client), "die", GTK_SIGNAL_FUNC (client_die), NULL); if (GNOME_CLIENT_RESTARTED (client)){ gnome_config_push_prefix (gnome_client_get_config_prefix (client)); restart (); restarted = 1; gnome_config_pop_prefix (); } srand (time (NULL)); app = gnome_app_new("same-gnome", _("Same Gnome")); gtk_window_set_policy(GTK_WINDOW(app), FALSE, FALSE, TRUE); gtk_signal_connect (GTK_OBJECT(app), "delete_event", (GtkSignalFunc)game_quit_callback, NULL); appbar = gnome_appbar_new(FALSE, TRUE, GNOME_PREFERENCES_USER); gnome_app_set_statusbar(GNOME_APP (app), GTK_WIDGET(appbar)); gnome_appbar_set_status(GNOME_APPBAR (appbar), _("Welcome to Same Gnome!")); gnome_app_create_menus(GNOME_APP(app), mainmenu); gnome_app_install_menu_hints(GNOME_APP (app), mainmenu); vb = gtk_vbox_new (FALSE, 0); gnome_app_set_contents (GNOME_APP (app), vb); if (!fname) { fname = gnome_config_get_string ("/same-gnome/Preferences/Scenario=stones.png"); } create_same_board (fname); label = gtk_label_new (_("Score: ")); scorew = gtk_label_new (""); set_score (score); gtk_box_pack_start(GTK_BOX(appbar), label, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(appbar), scorew, FALSE, TRUE, 0); if (!restarted) new_game (); g_free (fname); gtk_widget_show (vb); gtk_widget_show (GTK_WIDGET(label)); gtk_widget_show (GTK_WIDGET(scorew)); gtk_widget_show (app); gtk_main (); return 0; }
static void save_session (GnomeClient *client) { const char *prefix; GList *scan; int i = 0; prefix = gnome_client_get_config_prefix (client); gnome_config_push_prefix (prefix); for (scan = gth_window_get_window_list (); scan; scan = scan->next) { GthWindow *window = scan->data; char *uri = NULL; const char *location; char *key; if (GTH_IS_VIEWER (window)) { location = gth_window_get_image_filename (window); if (location == NULL) continue; uri = add_scheme_if_absent (location); } else { GthBrowser *browser = (GthBrowser*) window; switch (gth_browser_get_sidebar_content (browser)) { case GTH_SIDEBAR_DIR_LIST: location = gth_browser_get_current_directory (browser); if (location == NULL) continue; uri = add_scheme_if_absent (location); break; case GTH_SIDEBAR_CATALOG_LIST: location = gth_browser_get_current_catalog (browser); if (location == NULL) continue; uri = add_scheme_if_absent (location); break; default: break; } } if (uri == NULL) continue; key = g_strdup_printf ("Session/location%d", i); gnome_config_set_string (key, uri); g_free (uri); g_free (key); i++; } gnome_config_set_int ("Session/locations", i); gnome_config_pop_prefix (); gnome_config_sync (); }