~ubuntu-branches/ubuntu/feisty/gnumeric/feisty

« back to all changes in this revision

Viewing changes to src/workbook-control-gui.c

  • Committer: Bazaar Package Importer
  • Author(s): Gauvain Pocentek
  • Date: 2006-12-06 13:55:23 UTC
  • mfrom: (1.1.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20061206135523-6bh02cebuk0hduva
Tags: 1.7.5-1ubuntu1
* Merge with debian experimental:
  - debian/control, debian/*-gtk-*, debian/rules,
    debian/shlibs.local: Xubuntu changes for
    gtk/gnome multibuild.
  - run intltool-update in po*
  - Build Depend on intltool

Show diffs side-by-side

added added

removed removed

Lines of Context:
46
46
#include "workbook-cmd-format.h"
47
47
#include "selection.h"
48
48
#include "clipboard.h"
49
 
#include "print.h"
50
49
#include "gui-clipboard.h"
51
50
#include "workbook-edit.h"
52
51
#include "libgnumeric.h"
53
52
#include "dependent.h"
54
53
#include "expr.h"
55
54
#include "expr-impl.h"
 
55
#include "func.h"
56
56
#include "position.h"
57
57
#include "parse-util.h"
58
58
#include "ranges.h"
77
77
#include <goffice/graph/gog-data-set.h>
78
78
#include <goffice/utils/go-file.h>
79
79
#include <goffice/app/go-cmd-context-impl.h>
 
80
#include <goffice/utils/go-glib-extras.h>
80
81
 
81
82
#include <gsf/gsf-impl-utils.h>
82
83
 
86
87
#include <string.h>
87
88
#include <errno.h>
88
89
 
 
90
enum {
 
91
        PROP_0,
 
92
        PROP_AUTOSAVE_PROMPT,
 
93
        PROP_AUTOSAVE_TIME      
 
94
};
 
95
 
 
96
guint wbcg_signals[WBCG_LAST_SIGNAL];
 
97
 
89
98
#define WBCG_CLASS(o) WORKBOOK_CONTROL_GUI_CLASS (G_OBJECT_GET_CLASS (o))
90
99
#define WBCG_VIRTUAL_FULL(func, handle, arglist, call)          \
91
100
void wbcg_ ## func arglist                                      \
147
156
wbcg_get_scg (WorkbookControlGUI *wbcg, Sheet *sheet)
148
157
{
149
158
        GtkWidget *w;
 
159
        int i, npages;
150
160
 
151
161
        if (sheet == NULL || wbcg->notebook == NULL)
152
162
                return NULL;
153
163
 
154
164
        g_return_val_if_fail (IS_SHEET (sheet), NULL);
 
165
        g_return_val_if_fail (sheet->index_in_wb >= 0, NULL);
155
166
 
156
167
        w = gtk_notebook_get_nth_page (wbcg->notebook, sheet->index_in_wb);
157
 
        return g_object_get_data (G_OBJECT (w), SHEET_CONTROL_KEY);
 
168
        if (w) {
 
169
                SheetControlGUI *scg = g_object_get_data (G_OBJECT (w), SHEET_CONTROL_KEY);
 
170
                if (scg_sheet (scg) == sheet)
 
171
                        return scg;
 
172
        }
 
173
 
 
174
        /*
 
175
         * index_in_wb is probably not accurate because we are in the
 
176
         * middle of removing or adding a sheet.
 
177
         */
 
178
        npages = gtk_notebook_get_n_pages (wbcg->notebook);
 
179
        for (i = 0; i < npages; i++) {
 
180
                GtkWidget *w = gtk_notebook_get_nth_page (wbcg->notebook, i);
 
181
                SheetControlGUI *scg = g_object_get_data (G_OBJECT (w), SHEET_CONTROL_KEY);
 
182
                if (scg_sheet (scg) == sheet)
 
183
                        return scg;
 
184
        }
 
185
 
 
186
        g_warning ("Failed to find scg for sheet %s", sheet->name_quoted);
 
187
        return NULL;
158
188
}
159
189
 
160
190
GtkWindow *
201
231
        g_return_val_if_fail (scg != NULL, NULL);
202
232
 
203
233
        scg_take_focus (scg);
204
 
        return sc_sheet (SHEET_CONTROL (scg));
 
234
        return scg_sheet (scg);
205
235
}
206
236
 
207
237
Sheet *
218
248
 
219
249
/****************************************************************************/
220
250
/* Autosave */
 
251
 
221
252
static gboolean
222
 
cb_autosave (gpointer *data)
 
253
cb_autosave (WorkbookControlGUI *wbcg)
223
254
{
224
255
        WorkbookView *wb_view;
225
 
        WorkbookControlGUI *wbcg = (WorkbookControlGUI *)data;
226
256
 
227
257
        g_return_val_if_fail (IS_WORKBOOK_CONTROL_GUI (wbcg), FALSE);
228
258
 
231
261
        if (wb_view == NULL)
232
262
                return FALSE;
233
263
 
234
 
        if (wbcg->autosave &&
 
264
        if (wbcg->autosave_time > 0 &&
235
265
            go_doc_is_dirty (wb_view_get_doc (wb_view))) {
236
266
                if (wbcg->autosave_prompt && !dialog_autosave_prompt (wbcg))
237
267
                        return TRUE;
271
301
        return wbcg->wb_control.editing;
272
302
}
273
303
 
274
 
void
 
304
static void
275
305
wbcg_autosave_cancel (WorkbookControlGUI *wbcg)
276
306
{
277
 
        g_return_if_fail (IS_WORKBOOK_CONTROL_GUI (wbcg));
278
 
 
279
307
        if (wbcg->autosave_timer != 0) {
280
308
                g_source_remove (wbcg->autosave_timer);
281
309
                wbcg->autosave_timer = 0;
282
310
        }
283
311
}
284
312
 
285
 
void
286
 
wbcg_autosave_set (WorkbookControlGUI *wbcg, int minutes, gboolean prompt)
287
 
{
288
 
        g_return_if_fail (IS_WORKBOOK_CONTROL_GUI (wbcg));
289
 
 
290
 
        wbcg_autosave_cancel (wbcg);
291
 
 
292
 
        wbcg->autosave = (minutes != 0);
293
 
        wbcg->autosave_minutes = minutes;
294
 
        wbcg->autosave_prompt = prompt;
295
 
 
296
 
        if (wbcg->autosave)
297
 
                wbcg->autosave_timer = g_timeout_add (minutes * 60000,
298
 
                        (GSourceFunc) cb_autosave, wbcg);
299
 
}
 
313
static void
 
314
wbcg_autosave_activate (WorkbookControlGUI *wbcg)
 
315
{
 
316
        wbcg_autosave_cancel (wbcg);    
 
317
 
 
318
        if (wbcg->autosave_time > 0) {
 
319
                int secs = MIN (wbcg->autosave_time, G_MAXINT / 1000);
 
320
                wbcg->autosave_timer =
 
321
                        g_timeout_add (secs * 1000,
 
322
                                       (GSourceFunc) cb_autosave,
 
323
                                       wbcg);
 
324
        }
 
325
}
 
326
 
 
327
static void
 
328
wbcg_set_autosave_time (WorkbookControlGUI *wbcg, int secs)
 
329
{
 
330
        if (secs == wbcg->autosave_time)
 
331
                return;
 
332
 
 
333
        wbcg->autosave_time = secs;
 
334
        wbcg_autosave_activate (wbcg);
 
335
}
 
336
 
300
337
/****************************************************************************/
301
338
 
302
339
static void
493
530
                gboolean inactive =
494
531
                        ((flags & SHEET_CONTEXT_TEST_SIZE) &&
495
532
                         workbook_sheet_count (sc->sheet->workbook) < 2) ||
496
 
                        wbcg_edit_get_guru (scg_get_wbcg (scg)) != NULL;
 
533
                        wbcg_edit_get_guru (scg_wbcg (scg)) != NULL;
497
534
 
498
535
                if (text == NULL) {
499
536
                        item = gtk_separator_menu_item_new ();
525
562
        GtkNotebook *notebook;
526
563
        gint page_number;
527
564
        GtkWidget *table = GTK_WIDGET (scg->table);
528
 
 
529
565
        if (event->type != GDK_BUTTON_PRESS)
530
566
                return FALSE;
531
567
 
537
573
        if (event->button == 1 || NULL != scg->wbcg->rangesel)
538
574
                return TRUE;
539
575
 
540
 
        if (event->button == 3) {
 
576
        if (event->button == 3 && 
 
577
            editable_label_get_editable (EDITABLE_LABEL (widget))) {
541
578
                sheet_menu_label_run (scg, event);
542
579
                scg_take_focus (scg);
543
580
                return TRUE;
946
983
        sc = (SheetControl *) scg;
947
984
        for (ptr = sheet->sheet_objects; ptr != NULL ; ptr = ptr->next)
948
985
                sc_object_create_view (sc, ptr->data);
949
 
        scg_adjust_preferences (sc);
 
986
        scg_adjust_preferences (scg);
950
987
        if (sheet == wb_control_cur_sheet (wbc))
951
988
                scg_take_focus (scg);
952
989
}
972
1009
        WorkbookControlGUI *wbcg = (WorkbookControlGUI *)wbc;
973
1010
        SheetControlGUI *scg = wbcg_get_scg (wbcg, sheet);
974
1011
 
975
 
        gtk_notebook_set_current_page (wbcg->notebook, sheet->index_in_wb);
 
1012
        if (sheet)
 
1013
                gtk_notebook_set_current_page (wbcg->notebook,
 
1014
                                               sheet->index_in_wb);
976
1015
        if (wbcg->rangesel == NULL)
977
1016
                gnm_expr_entry_set_scg (wbcg->edit_line.entry, scg);
978
1017
 
979
1018
        disconnect_sheet_signals (wbcg, wbcg_cur_sheet (wbcg), TRUE);
980
1019
 
981
 
        wbcg_update_menu_feedback (wbcg, sheet);
 
1020
        if (sheet) {
 
1021
                wbcg_update_menu_feedback (wbcg, sheet);
982
1022
 
983
 
        g_object_connect
984
 
                (G_OBJECT (sheet),
985
 
                 "signal::notify::display-formulas", cb_toggle_menu_item_changed, wbcg,
986
 
                 "signal::notify::display-zeros", cb_toggle_menu_item_changed, wbcg,
987
 
                 "signal::notify::display-grid", cb_toggle_menu_item_changed, wbcg,
988
 
                 "signal::notify::display-column-header", cb_toggle_menu_item_changed, wbcg,
989
 
                 "signal::notify::display-row-header", cb_toggle_menu_item_changed, wbcg,
990
 
                 "signal::notify::display-outlines", cb_toggle_menu_item_changed, wbcg,
991
 
                 "signal::notify::display-outlines-below", cb_toggle_menu_item_changed, wbcg,
992
 
                 "signal::notify::display-outlines-right", cb_toggle_menu_item_changed, wbcg,
993
 
                 "signal::notify::text-is-rtl", cb_direction_change, scg,
994
 
                 "signal::notify::zoom-factor", cb_zoom_change, wbcg,
995
 
                 NULL);
 
1023
                g_object_connect
 
1024
                        (G_OBJECT (sheet),
 
1025
                         "signal::notify::display-formulas", cb_toggle_menu_item_changed, wbcg,
 
1026
                         "signal::notify::display-zeros", cb_toggle_menu_item_changed, wbcg,
 
1027
                         "signal::notify::display-grid", cb_toggle_menu_item_changed, wbcg,
 
1028
                         "signal::notify::display-column-header", cb_toggle_menu_item_changed, wbcg,
 
1029
                         "signal::notify::display-row-header", cb_toggle_menu_item_changed, wbcg,
 
1030
                         "signal::notify::display-outlines", cb_toggle_menu_item_changed, wbcg,
 
1031
                         "signal::notify::display-outlines-below", cb_toggle_menu_item_changed, wbcg,
 
1032
                         "signal::notify::display-outlines-right", cb_toggle_menu_item_changed, wbcg,
 
1033
                         "signal::notify::text-is-rtl", cb_direction_change, scg,
 
1034
                         "signal::notify::zoom-factor", cb_zoom_change, wbcg,
 
1035
                         NULL);
 
1036
        }
996
1037
}
997
1038
 
998
1039
static void
1059
1100
}
1060
1101
 
1061
1102
static void
1062
 
wbcg_auto_expr_value (WorkbookControl *wbc)
 
1103
wbcg_auto_expr_text_changed (WorkbookView *wbv,
 
1104
                             G_GNUC_UNUSED GParamSpec *pspec,
 
1105
                             WorkbookControlGUI *wbcg)
1063
1106
{
1064
 
        WorkbookControlGUI *wbcg = WORKBOOK_CONTROL_GUI (wbc);
1065
 
        WorkbookView *wbv = wb_control_view (wbc);
1066
 
 
1067
 
        g_return_if_fail (wbcg != NULL);
1068
 
        g_return_if_fail (wbv != NULL);
1069
 
        g_return_if_fail (wbv->auto_expr_value_as_string != NULL);
1070
 
 
1071
 
        if (wbcg_ui_update_begin (wbcg)) {
1072
 
                gtk_label_set_text(
1073
 
                         GTK_LABEL (wbcg->auto_expr_label),
1074
 
                         wbv->auto_expr_value_as_string);
1075
 
                wbcg_ui_update_end (wbcg);
1076
 
        }
 
1107
        gtk_label_set_text (GTK_LABEL (wbcg->auto_expr_label),
 
1108
                            wbv->auto_expr_text ? wbv->auto_expr_text : "");
1077
1109
}
1078
1110
 
1079
1111
static void
1206
1238
        int ret = 0;
1207
1239
 
1208
1240
        if (wb_uri) {
1209
 
                char *base = go_basename_from_uri (wb_uri);
 
1241
                char *base    = go_basename_from_uri (wb_uri);
 
1242
                char *display = g_markup_escape_text (base, -1);
1210
1243
                msg = g_strdup_printf (
1211
1244
                        _("Save changes to workbook '%s' before closing?"),
1212
 
                        base);
 
1245
                        display);
1213
1246
                g_free (base);
 
1247
                g_free (display);
1214
1248
        } else {
1215
1249
                msg = g_strdup (_("Save changes to workbook before closing?"));
1216
1250
        }
1380
1414
        } else
1381
1415
                g_object_unref (G_OBJECT (wbcg));
1382
1416
 
 
1417
        _gnm_app_flag_windows_changed ();
 
1418
 
1383
1419
        return FALSE;
1384
1420
}
1385
1421
 
1400
1436
                      WorkbookControlGUI *wbcg)
1401
1437
{
1402
1438
        if (!wbcg_is_editing (wbcg))
1403
 
                if (!wbcg_edit_start (wbcg, FALSE, TRUE))
 
1439
                if (!wbcg_edit_start (wbcg, FALSE, TRUE)) {
 
1440
                        GtkEntry *entry = GTK_ENTRY (w);
1404
1441
                        wbcg_focus_cur_scg (wbcg);
 
1442
                        entry->in_drag = FALSE;
 
1443
                        /*
 
1444
                         * ->button is private, ugh.  Since the text area
 
1445
                         * never gets a release event, there seems to be
 
1446
                         * no official way of returning the widget to its
 
1447
                         * correct state.
 
1448
                         */
 
1449
                        entry->button = 0;
 
1450
                        return TRUE;
 
1451
                }
1405
1452
 
1406
1453
        return FALSE;
1407
1454
}
1573
1620
        }
1574
1621
}
1575
1622
 
 
1623
static void
 
1624
wbcg_set_property (GObject *object, guint property_id,
 
1625
                   const GValue *value, GParamSpec *pspec)
 
1626
{
 
1627
        WorkbookControlGUI *wbcg = (WorkbookControlGUI *)object;
 
1628
 
 
1629
        switch (property_id) {
 
1630
        case PROP_AUTOSAVE_PROMPT:
 
1631
                wbcg->autosave_prompt = g_value_get_boolean (value);
 
1632
                break;
 
1633
        case PROP_AUTOSAVE_TIME:
 
1634
                wbcg_set_autosave_time (wbcg, g_value_get_int (value));
 
1635
                break;
 
1636
        default:
 
1637
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
 
1638
                break;
 
1639
        }
 
1640
}
 
1641
 
 
1642
static void
 
1643
wbcg_get_property (GObject *object, guint property_id,
 
1644
                   GValue *value, GParamSpec *pspec)
 
1645
{
 
1646
        WorkbookControlGUI *wbcg = (WorkbookControlGUI *)object;
 
1647
 
 
1648
        switch (property_id) {
 
1649
        case PROP_AUTOSAVE_PROMPT:
 
1650
                g_value_set_boolean (value, wbcg->autosave_prompt);
 
1651
                break;
 
1652
        case PROP_AUTOSAVE_TIME:
 
1653
                g_value_set_int (value, wbcg->autosave_time);
 
1654
                break;
 
1655
        default:
 
1656
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
 
1657
                break;
 
1658
        }
 
1659
}
 
1660
 
 
1661
 
1576
1662
static GObjectClass *parent_class;
1577
1663
static void
1578
1664
wbcg_finalize (GObject *obj)
1582
1668
        /* Disconnect signals that would attempt to change things during
1583
1669
         * destruction.
1584
1670
         */
 
1671
 
 
1672
        wbcg_autosave_cancel (wbcg);
 
1673
 
1585
1674
        if (wbcg->notebook != NULL)
1586
1675
                g_signal_handlers_disconnect_by_func (
1587
1676
                        G_OBJECT (wbcg->notebook),
1619
1708
        }
1620
1709
#endif
1621
1710
 
1622
 
        (*parent_class->finalize) (obj);
 
1711
        parent_class->finalize (obj);
1623
1712
}
1624
1713
 
1625
 
/* protected */
1626
 
gboolean
1627
 
wbcg_scroll_wheel_support_cb (GtkWidget *ignored, GdkEventScroll *event,
1628
 
                              WorkbookControlGUI *wbcg)
 
1714
static gboolean
 
1715
cb_scroll_wheel (GtkWidget *ignored, GdkEventScroll *event,
 
1716
                 WorkbookControlGUI *wbcg)
1629
1717
{
1630
1718
        /* scroll always operates on pane 0 */
1631
1719
        SheetControlGUI *scg = wbcg_cur_scg (wbcg);
1632
 
        Sheet           *sheet = sc_sheet (SHEET_CONTROL (scg));
 
1720
        Sheet           *sheet = scg_sheet (scg);
1633
1721
        GnmCanvas *gcanvas = scg_pane (scg, 0);
1634
1722
        gboolean go_horiz = (event->direction == GDK_SCROLL_LEFT ||
1635
1723
                             event->direction == GDK_SCROLL_RIGHT);
1859
1947
static void
1860
1948
cb_auto_expr_changed (GtkWidget *item, WorkbookControlGUI *wbcg)
1861
1949
{
 
1950
        const GnmFunc *func;
 
1951
        const char *descr;
 
1952
        WorkbookView *wbv = wb_control_view (WORKBOOK_CONTROL (wbcg));
 
1953
 
1862
1954
        if (wbcg->updating_ui)
1863
1955
                return;
1864
1956
 
1865
 
        wb_view_auto_expr (
1866
 
                wb_control_view (WORKBOOK_CONTROL (wbcg)),
1867
 
                g_object_get_data (G_OBJECT (item), "name"),
1868
 
                g_object_get_data (G_OBJECT (item), "expr"));
 
1957
        func = g_object_get_data (G_OBJECT (item), "func");
 
1958
        descr = g_object_get_data (G_OBJECT (item), "descr");
 
1959
 
 
1960
        g_object_set (wbv,
 
1961
                      "auto-expr-func", func,
 
1962
                      "auto-expr-descr", descr,
 
1963
                      NULL);
1869
1964
}
1870
1965
 
1871
1966
static void
1875
1970
        if (wbcg->updating_ui)
1876
1971
                return;
1877
1972
 
1878
 
        wb_view_auto_expr_precision (wbv, !wbv->auto_expr_use_max_precision);
 
1973
        go_object_toggle (wbv, "auto-expr-max-precision");
1879
1974
}
1880
1975
 
1881
1976
static gboolean
1930
2025
 
1931
2026
                item = gtk_menu_item_new_with_label (
1932
2027
                        _(quick_compute_routines [i].displayed_name));
1933
 
                g_object_set_data (G_OBJECT (item), "expr", (gpointer)expr);
1934
 
                g_object_set_data (G_OBJECT (item), "name",
 
2028
                g_object_set_data (G_OBJECT (item),
 
2029
                                   "func",
 
2030
                                   gnm_func_lookup (expr, NULL));
 
2031
                g_object_set_data (G_OBJECT (item), "descr",
1935
2032
                        (gpointer)_(quick_compute_routines [i].displayed_name));
1936
2033
                g_signal_connect (G_OBJECT (item),
1937
2034
                        "activate",
2014
2111
                if (requisition.height + 20 > rect.height || 
2015
2112
                    requisition.width > rect.width) {
2016
2113
                        gtk_window_maximize (GTK_WINDOW (wbcg->toplevel));
 
2114
                } else {
 
2115
                        gtk_window_set_default_size 
 
2116
                                (wbcg_toplevel (wbcg), 
 
2117
                                 requisition.width, requisition.height);
2017
2118
                }
2018
2119
        } else {
2019
2120
                /* Use default */
2028
2129
 
2029
2130
        /* rehide headers if necessary */
2030
2131
        if (NULL != scg && wb_control_cur_sheet (WORKBOOK_CONTROL (wbcg)))
2031
 
                scg_adjust_preferences (SHEET_CONTROL (scg));
 
2132
                scg_adjust_preferences (scg);
2032
2133
 
2033
2134
        return FALSE;
2034
2135
}
2310
2411
        g_signal_connect_after (w, "set_focus",
2311
2412
                G_CALLBACK (cb_set_focus), wbcg);
2312
2413
        g_signal_connect (w, "scroll-event",
2313
 
                G_CALLBACK (wbcg_scroll_wheel_support_cb), wbcg);
 
2414
                G_CALLBACK (cb_scroll_wheel), wbcg);
2314
2415
        g_signal_connect (w, "realize",
2315
2416
                G_CALLBACK (cb_realize), wbcg);
2316
2417
 
2397
2498
        gtk_progress_bar_set_text (GTK_PROGRESS_BAR (wbcg->progress_bar), msg);
2398
2499
}
2399
2500
 
2400
 
#define DISCONNECT(field)                                               \
2401
 
        if (wbcg->field) {                                              \
2402
 
                g_signal_handler_disconnect (old_wb, wbcg->field);      \
2403
 
                wbcg->field = 0;                                        \
 
2501
#define DISCONNECT(obj,field)                                   \
 
2502
        if (wbcg->field) {                                      \
 
2503
                g_signal_handler_disconnect (obj, wbcg->field); \
 
2504
                wbcg->field = 0;                                \
2404
2505
        }
2405
2506
 
2406
2507
static void
2407
2508
wbcg_view_changed (WorkbookControlGUI *wbcg,
2408
2509
                   G_GNUC_UNUSED GParamSpec *pspec,
2409
 
                   Workbook *old_wb)
 
2510
                   WorkbookView *old_wbv)
2410
2511
{
2411
2512
        WorkbookControl *wbc = WORKBOOK_CONTROL (wbcg);
2412
2513
        Workbook *wb = wb_control_get_workbook (wbc);
 
2514
        Workbook *old_wb = old_wbv ? wb_view_get_workbook (old_wbv) : NULL;
 
2515
        WorkbookView *wbv = wb_control_view (wbc);
2413
2516
 
2414
2517
        /* Reconnect self because we need to change data.  */
2415
 
        if (wbcg->sig_view_changed)
2416
 
                g_signal_handler_disconnect (wbc, wbcg->sig_view_changed);
 
2518
        DISCONNECT (wbc, sig_view_changed);
2417
2519
        wbcg->sig_view_changed =
2418
2520
                g_signal_connect_object
2419
2521
                (G_OBJECT (wbc),
2420
2522
                 "notify::view",
2421
2523
                 G_CALLBACK (wbcg_view_changed),
2422
 
                 wb,
2423
 
                 0);
 
2524
                 wbv,
 
2525
                 0);
 
2526
 
 
2527
        if (wbcg->sig_auto_expr_text)
 
2528
                DISCONNECT (old_wbv, sig_auto_expr_text);
 
2529
        wbcg->sig_auto_expr_text =
 
2530
                g_signal_connect_object
 
2531
                (G_OBJECT (wbv),
 
2532
                 "notify::auto-expr-text",
 
2533
                 G_CALLBACK (wbcg_auto_expr_text_changed),
 
2534
                 wbcg,
 
2535
                 0);
 
2536
        wbcg_auto_expr_text_changed (wbv, NULL, wbcg);
2424
2537
 
2425
2538
        if (old_wb) {
2426
 
                DISCONNECT (sig_sheet_order);
2427
 
                DISCONNECT (sig_notify_uri);
2428
 
                DISCONNECT (sig_notify_dirty);
 
2539
                DISCONNECT (old_wb, sig_sheet_order);
 
2540
                DISCONNECT (old_wb, sig_notify_uri);
 
2541
                DISCONNECT (old_wb, sig_notify_dirty);
2429
2542
        }
2430
2543
 
2431
2544
        if (wb) {
2466
2579
wbcg_data_allocator_allocate (GogDataAllocator *dalloc, GogPlot *plot)
2467
2580
{
2468
2581
        SheetControlGUI *scg = wbcg_cur_scg (WORKBOOK_CONTROL_GUI (dalloc));
2469
 
        sv_selection_to_plot (sc_view (SHEET_CONTROL (scg)), plot);
 
2582
        sv_selection_to_plot (scg_view (scg), plot);
2470
2583
}
2471
2584
 
2472
2585
typedef struct {
2492
2605
                return;
2493
2606
 
2494
2607
        g_object_get (G_OBJECT (gee), "scg", &scg, NULL);
2495
 
        sheet = sc_sheet (SHEET_CONTROL (scg));
 
2608
        sheet = scg_sheet (scg);
2496
2609
        g_object_unref (G_OBJECT (scg));
2497
2610
 
2498
2611
        /* If we are setting something */
2517
2630
                        else {
2518
2631
                                g_return_if_fail (perr.err != NULL);
2519
2632
 
2520
 
                                wb_control_validation_msg (WORKBOOK_CONTROL (scg_get_wbcg (scg)),
 
2633
                                wb_control_validation_msg (WORKBOOK_CONTROL (scg_wbcg (scg)),
2521
2634
                                        VALIDATION_STYLE_PARSE_ERROR, NULL, perr.err->message);
2522
2635
                                parse_error_free (&perr);
2523
2636
                                return;
2620
2733
 
2621
2734
/***************************************************************************/
2622
2735
 
2623
 
guint wbcg_signals [WBCG_LAST_SIGNAL];
2624
2736
static void
2625
2737
wbcg_gnm_cmd_context_init (GOCmdContextClass *iface)
2626
2738
{
2633
2745
}
2634
2746
 
2635
2747
static void
2636
 
workbook_control_gui_class_init (GObjectClass *object_class)
 
2748
workbook_control_gui_class_init (GObjectClass *gobject_class)
2637
2749
{
2638
2750
        WorkbookControlClass *wbc_class =
2639
 
                WORKBOOK_CONTROL_CLASS (object_class);
 
2751
                WORKBOOK_CONTROL_CLASS (gobject_class);
2640
2752
        WorkbookControlGUIClass *wbcg_class =
2641
 
                WORKBOOK_CONTROL_GUI_CLASS (object_class);
 
2753
                WORKBOOK_CONTROL_GUI_CLASS (gobject_class);
2642
2754
 
2643
2755
        g_return_if_fail (wbc_class != NULL);
2644
2756
 
2645
 
        parent_class = g_type_class_peek_parent (object_class);
2646
 
        object_class->finalize = wbcg_finalize;
 
2757
        parent_class = g_type_class_peek_parent (gobject_class);
 
2758
        gobject_class->finalize = wbcg_finalize;
 
2759
        gobject_class->get_property = wbcg_get_property;
 
2760
        gobject_class->set_property = wbcg_set_property;
 
2761
 
 
2762
        g_object_class_install_property
 
2763
                (gobject_class,
 
2764
                 PROP_AUTOSAVE_PROMPT,
 
2765
                 g_param_spec_boolean ("autosave-prompt",
 
2766
                                       _("Autosave prompt"),
 
2767
                                       _("Ask about autosave?"),
 
2768
                                       FALSE,
 
2769
                                       GSF_PARAM_STATIC |
 
2770
                                       G_PARAM_READWRITE));
 
2771
        g_object_class_install_property
 
2772
                (gobject_class,
 
2773
                 PROP_AUTOSAVE_TIME,
 
2774
                 g_param_spec_int ("autosave-time",
 
2775
                                   _("Autosave time in seconds"),
 
2776
                                   _("Seconds before autosave"),
 
2777
                                   0, G_MAXINT, 0,
 
2778
                                   GSF_PARAM_STATIC |
 
2779
                                   G_PARAM_READWRITE));
2647
2780
 
2648
2781
        wbc_class->edit_line_set        = wbcg_edit_line_set;
2649
2782
        wbc_class->selection_descr_set  = wbcg_edit_selection_descr_set;
2650
 
        wbc_class->auto_expr_value      = wbcg_auto_expr_value;
2651
2783
        wbc_class->update_action_sensitivity = wbcg_update_action_sensitivity;
2652
2784
 
2653
2785
        wbc_class->sheet.add        = wbcg_sheet_add;
2699
2831
        wbcg->toggle_for_fullscreen = g_hash_table_new_full (
2700
2832
                g_str_hash, g_str_equal, (GDestroyNotify)g_free, NULL);
2701
2833
 
2702
 
        /* Autosave */
 
2834
        wbcg->autosave_prompt = FALSE;
 
2835
        wbcg->autosave_time = 0;
2703
2836
        wbcg->autosave_timer = 0;
2704
 
        wbcg->autosave_minutes = 0;
2705
 
        wbcg->autosave_prompt = FALSE;
2706
2837
 
2707
 
#warning why is this here ?
 
2838
#warning "why is this here ?"
2708
2839
        wbcg->current_saver = NULL;
2709
2840
}
2710
2841