From: Ben Pfaff Date: Sat, 26 Oct 2013 05:05:05 +0000 (-0700) Subject: Merge master into gtk3. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fbuilds%2F20131116032752%2Fpspp;hp=-c;p=pspp Merge master into gtk3. --- e2da62d735c597afeef2e0e9b36e5a4a83d7da94 diff --combined INSTALL index 03739d5816,acc4bfa0ad..3d6d20e9dc --- a/INSTALL +++ b/INSTALL @@@ -61,12 -61,14 +61,14 @@@ The following packages are required to GNU libc includes an integrated libintl, so there is no need to separately install libintl on a GNU/Linux system. + * zlib (http://www.zlib.net/). + The following packages are required to enable PSPP's graphing features. If you cannot arrange to install them, you must run `configure' with --without-cairo (in which case you will get no graphing capability). - * Cairo (http://cairographics.org/), version 1.5 or later. + * Cairo (http://cairographics.org/), version 1.12 or later. * Pango (http://www.pango.org/), version 1.22 or later. @@@ -78,18 -80,17 +80,16 @@@ use the GUI, you must run `configure' w 0.18 and 0.19 have a bug that will prevent library detection, but other versions should be fine. - * GTK+ (http://www.gtk.org/), version 2.24.0 or later. However - it must be Gtk+ 2.something - The Gtk+-3.x series will NOT work! + * GTK+ (http://www.gtk.org/), version 3.4.0 or later. * GtkSourceView (http://projects.gnome.org/gtksourceview/) - version 2.2 or later. + version 3.4.0 or later. The following packages are optional: Installing the following packages will allow your PSPP program to read Gnumeric files. - * zlib (http://www.zlib.net/). - * libxml2 (http://xmlsoft.org/). Installing the following packages will allow your PSPP program to write diff --combined configure.ac index 49c31e290d,853f22bcfa..9f4ecbda5c --- a/configure.ac +++ b/configure.ac @@@ -2,7 -2,7 +2,7 @@@ dnl Process this file with autoconf to dnl Initialize. AC_PREREQ(2.63) - AC_INIT([GNU PSPP], [0.7.10], [bug-gnu-pspp@gnu.org], [pspp]) + AC_INIT([GNU PSPP], [0.8.1], [bug-gnu-pspp@gnu.org], [pspp]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_TESTDIR([tests]) @@@ -71,11 -71,11 +71,11 @@@ if test "$with_cairo" != no && test "$w PKG_CHECK_MODULES([GTHREAD], [gthread-2.0], [], [PSPP_REQUIRED_PREREQ([gthread 2.0 (or use --without-gui)])]) - PKG_CHECK_MODULES([GTK], [gtk+-2.0 >= 2.24], [], - [PSPP_REQUIRED_PREREQ([gtk+ 2.0 version 2.24 or later (or use --without-gui)])]) + PKG_CHECK_MODULES([GTK], [gtk+-3.0 >= 3.4.2], [], + [PSPP_REQUIRED_PREREQ([gtk+ 3.0 version 3.4.2 or later (or use --without-gui)])]) - PKG_CHECK_MODULES([GTKSOURCEVIEW], [gtksourceview-2.0 >= 2.2], [], - [PSPP_REQUIRED_PREREQ([gtksourceview 2.0 version 2.2 or later (or use --without-gui)])]) + PKG_CHECK_MODULES([GTKSOURCEVIEW], [gtksourceview-3.0 >= 3.4.2], [], + [PSPP_REQUIRED_PREREQ([gtksourceview 3.0 version 3.4.2 or later (or use --without-gui)])]) AC_ARG_VAR([GLIB_GENMARSHAL]) AC_CHECK_PROGS([GLIB_GENMARSHAL], [glib-genmarshal]) @@@ -176,16 -176,8 +176,8 @@@ PKG_CHECK_MODULES PSPP_OPTIONAL_PREREQ([libxml2])]) dnl Check for zlib. - AC_SEARCH_LIBS( - [gzopen], [z], - [HAVE_ZLIB=yes], - [HAVE_ZLIB=no - PSPP_OPTIONAL_PREREQ([zlib])]) - AC_CHECK_HEADERS( - [zlib.h], - [], - [HAVE_ZLIB=no - PSPP_OPTIONAL_PREREQ([zlib])]) + AC_SEARCH_LIBS([gzopen], [z], [], [PSPP_REQUIRED_PREREQ([zlib])]) + AC_CHECK_HEADERS([zlib.h], [], [PSPP_REQUIRED_PREREQ([zlib])]) dnl Avoid interference between zlib's crc32() function and gnulib's dnl crc32() function, which have different signatures. PSPP calls @@@ -200,20 -192,20 +192,20 @@@ AC_DEFINE [Avoid making zlib call gnulib's crc32() instead of its own.]) dnl Gnumeric and OpenDocument (read) support requires libxml2 and zlib. - if test $HAVE_LIBXML2 = yes && test $HAVE_ZLIB = yes; then - GNM_SUPPORT=yes + if test $HAVE_LIBXML2 = yes; then + GNM_READ_SUPPORT=yes ODF_READ_SUPPORT=yes AC_DEFINE( - [GNM_SUPPORT], [1], + [GNM_READ_SUPPORT], [1], [Define to 1 if building in support for reading Gnumeric files.]) AC_DEFINE( [ODF_READ_SUPPORT], [1], [Define to 1 if building in support for reading OpenDocument files.]) else - GNM_SUPPORT=no + GNM_READ_SUPPORT=no ODF_READ_SUPPORT=no fi - AC_SUBST([GNM_SUPPORT]) + AC_SUBST([GNM_READ_SUPPORT]) AC_SUBST([ODF_READ_SUPPORT]) dnl ODF support requires libxml2 (zlib is optional). diff --combined src/output/cairo.c index abef72289c,6db86317d8..2debb27f47 --- a/src/output/cairo.c +++ b/src/output/cairo.c @@@ -53,7 -53,6 +53,6 @@@ #include #include - #include "gl/error.h" #include "gl/intprops.h" #include "gl/minmax.h" #include "gl/xalloc.h" @@@ -131,8 -130,8 +130,8 @@@ struct xr_drive int line_space; /* Space between lines. */ int line_width; /* Width of lines. */ - double bg_red, bg_green, bg_blue; /* Background color */ - double fg_red, fg_green, fg_blue; /* Foreground color */ + struct xr_color bg; /* Background color */ + struct xr_color fg; /* Foreground color */ /* Internal state. */ struct render_params *params; @@@ -185,10 -184,10 +184,10 @@@ opt (struct output_driver *d, struct st Future implementations might allow things like "yellow" and "sky-blue-ultra-brown" */ - static void + void parse_color (struct output_driver *d, struct string_map *options, - const char *key, const char *default_value, - double *dred, double *dgreen, double *dblue) + const char *key, const char *default_value, + struct xr_color *color) { int red, green, blue; char *string = parse_string (opt (d, options, key, default_value)); @@@ -206,9 -205,9 +205,9 @@@ free (string); /* Convert 16 bit ints to float */ - *dred = red / (double) 0xFFFF; - *dgreen = green / (double) 0xFFFF; - *dblue = blue / (double) 0xFFFF; + color->red = red / (double) 0xFFFF; + color->green = green / (double) 0xFFFF; + color->blue = blue / (double) 0xFFFF; } static PangoFontDescription * @@@ -224,7 -223,7 +223,7 @@@ parse_font (struct output_driver *d, st desc = pango_font_description_from_string (string); if (desc == NULL) { - error (0, 0, _("`%s': bad font specification"), string); + msg (MW, _("`%s': bad font specification"), string); /* Fall back to DEFAULT_VALUE, which had better be a valid font description. */ @@@ -272,8 -271,8 +271,8 @@@ apply_options (struct xr_driver *xr, st xr->line_width = XR_POINT / 2; xr->page_number = 0; - parse_color (d, o, "background-color", "#FFFFFFFFFFFF", &xr->bg_red, &xr->bg_green, &xr->bg_blue); - parse_color (d, o, "foreground-color", "#000000000000", &xr->fg_red, &xr->fg_green, &xr->fg_blue); + parse_color (d, o, "background-color", "#FFFFFFFFFFFF", &xr->bg); + parse_color (d, o, "foreground-color", "#000000000000", &xr->fg); parse_paper_size (opt (d, o, "paper-size", ""), &paper_width, &paper_length); xr->left_margin = parse_dimension (opt (d, o, "left-margin", ".5in")); @@@ -348,7 -347,7 +347,7 @@@ xr_set_cairo (struct xr_driver *xr, cai } } - cairo_set_source_rgb (xr->cairo, xr->fg_red, xr->fg_green, xr->fg_blue); + cairo_set_source_rgb (xr->cairo, xr->fg.red, xr->fg.green, xr->fg.blue); return true; } @@@ -379,7 -378,7 +378,7 @@@ xr_create (const char *file_name, enum status = cairo_surface_status (surface); if (status != CAIRO_STATUS_SUCCESS) { - error (0, 0, _("error opening output file `%s': %s"), + msg (ME, _("error opening output file `%s': %s"), file_name, cairo_status_to_string (status)); cairo_surface_destroy (surface); goto error; @@@ -396,7 -395,7 +395,7 @@@ if (xr->width / xr->char_width < MIN_WIDTH) { - error (0, 0, _("The defined page is not wide enough to hold at least %d " + msg (ME, _("The defined page is not wide enough to hold at least %d " "characters in the default font. In fact, there's only " "room for %d characters."), MIN_WIDTH, @@@ -406,7 -405,7 +405,7 @@@ if (xr->length / xr->char_height < MIN_LENGTH) { - error (0, 0, _("The defined page is not long enough to hold at least %d " + msg (ME, _("The defined page is not long enough to hold at least %d " "lines in the default font. In fact, there's only " "room for %d lines."), MIN_LENGTH, @@@ -457,7 -456,7 +456,7 @@@ xr_destroy (struct output_driver *drive cairo_surface_finish (cairo_get_target (xr->cairo)); status = cairo_status (xr->cairo); if (status != CAIRO_STATUS_SUCCESS) - error (0, 0, _("error drawing output for %s driver: %s"), + msg (ME, _("error drawing output for %s driver: %s"), output_driver_get_name (driver), cairo_status_to_string (status)); cairo_destroy (xr->cairo); @@@ -552,7 -551,7 +551,7 @@@ xr_driver_next_page (struct xr_driver * if (cairo != NULL) { cairo_save (cairo); - cairo_set_source_rgb (cairo, xr->bg_red, xr->bg_green, xr->bg_blue); + cairo_set_source_rgb (cairo, xr->bg.red, xr->bg.green, xr->bg.blue); cairo_rectangle (cairo, 0, 0, xr->width, xr->length); cairo_fill (cairo); cairo_restore (cairo); @@@ -1028,9 -1027,11 +1027,9 @@@ xr_rendering_measure (struct xr_renderi static void xr_draw_chart (const struct chart_item *, cairo_t *, double x, double y, double width, double height); -/* Draws onto CR at least the region of R that is enclosed in (X,Y)-(X+W,Y+H), - and possibly some additional parts. */ +/* Draws onto CR */ void -xr_rendering_draw (struct xr_rendering *r, cairo_t *cr, - int x, int y, int w, int h) +xr_rendering_draw_all (struct xr_rendering *r, cairo_t *cr) { if (is_table_item (r->item)) { @@@ -1046,7 -1047,9 +1045,7 @@@ } xr->y = r->title_height; - render_page_draw_region (r->page, - x * XR_POINT, (y * XR_POINT) - r->title_height, - w * XR_POINT, h * XR_POINT); + render_page_draw (r->page); } else xr_draw_chart (to_chart_item (r->item), cr, @@@ -1086,7 -1089,10 +1085,10 @@@ xr_draw_chart (const struct chart_item char * xr_draw_png_chart (const struct chart_item *item, - const char *file_name_template, int number) + const char *file_name_template, int number, + const struct xr_color *fg, + const struct xr_color *bg + ) { const int width = 640; const int length = 480; @@@ -1107,13 -1113,16 +1109,16 @@@ surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, length); cr = cairo_create (surface); - cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); + cairo_set_source_rgb (cr, bg->red, bg->green, bg->blue); + cairo_paint (cr); + + cairo_set_source_rgb (cr, fg->red, fg->green, fg->blue); xr_draw_chart (item, cr, 0.0, 0.0, width, length); status = cairo_surface_write_to_png (surface, file_name); if (status != CAIRO_STATUS_SUCCESS) - error (0, 0, _("error writing output file `%s': %s"), + msg (ME, _("error writing output file `%s': %s"), file_name, cairo_status_to_string (status)); cairo_destroy (cr); diff --combined src/output/cairo.h index 9a0e17a1d5,7ed828f515..3c13768177 --- a/src/output/cairo.h +++ b/src/output/cairo.h @@@ -41,7 -41,8 +41,7 @@@ struct xr_rendering *xr_rendering_creat void xr_rendering_apply_options (struct xr_rendering *, struct string_map *o); void xr_rendering_measure (struct xr_rendering *, int *w, int *h); -void xr_rendering_draw (struct xr_rendering *, cairo_t *, - int x, int y, int w, int h); +void xr_rendering_draw_all (struct xr_rendering *r, cairo_t *cr); /* Functions for rendering a series of output items to a series of Cairo contexts, with pagination, possibly including headers. @@@ -81,9 -82,27 +81,27 @@@ void xr_driver_output_item (struct xr_d bool xr_driver_need_new_page (const struct xr_driver *); bool xr_driver_is_page_blank (const struct xr_driver *); + struct xr_color + { + double red; + double green; + double blue; + }; + + struct output_driver; + struct string_map; + + void parse_color (struct output_driver *d, struct string_map *options, + const char *key, const char *default_value, + struct xr_color *color); + + /* Render charts with Cairo. */ char *xr_draw_png_chart (const struct chart_item *, - const char *file_name_template, int number); + const char *file_name_template, int number, + const struct xr_color *fg, + const struct xr_color *bg); + #endif /* HAVE_CAIRO */ diff --combined src/output/render.c index d61a39aae3,a91e1f7b79..c178839a0b --- a/src/output/render.c +++ b/src/output/render.c @@@ -1,5 -1,5 +1,5 @@@ /* PSPP - a program for statistical analysis. - Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 2009, 2010, 2011, 2013 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@@ -384,7 -384,7 +384,7 @@@ distribute_spanned_width (int width w += width * unspanned * d0; } - rows[x].width = w / d; + rows[x].width = MAX (rows[x].width, w / d); w -= rows[x].width * d; } } @@@ -958,6 -958,69 +958,6 @@@ render_page_draw (const struct render_p render_page_draw_cells (page, bb); } -/* Returns the greatest value i, 0 <= i < n, such that cp[i] <= x0. */ -static int -get_clip_min_extent (int x0, const int cp[], int n) -{ - int low, high, best; - - low = 0; - high = n; - best = 0; - while (low < high) - { - int middle = low + (high - low) / 2; - - if (cp[middle] <= x0) - { - best = middle; - low = middle + 1; - } - else - high = middle; - } - - return best; -} - -/* Returns the least value i, 0 <= i < n, such that cp[i + 1] >= x1. */ -static int -get_clip_max_extent (int x1, const int cp[], int n) -{ - int low, high, best; - - low = 0; - high = n; - best = n; - while (low < high) - { - int middle = low + (high - low) / 2; - - if (cp[middle] >= x1) - best = high = middle; - else - low = middle + 1; - } - - return best; -} - -/* Renders the cells of PAGE that intersect (X,Y)-(X+W,Y+H), by calling the - 'draw_line' and 'draw_cell' functions from the render_params provided to - render_page_create(). */ -void -render_page_draw_region (const struct render_page *page, - int x, int y, int w, int h) -{ - int bb[TABLE_N_AXES][2]; - - bb[H][0] = get_clip_min_extent (x, page->cp[H], page->n[H] * 2 + 1); - bb[H][1] = get_clip_max_extent (x + w, page->cp[H], page->n[H] * 2 + 1); - bb[V][0] = get_clip_min_extent (y, page->cp[V], page->n[V] * 2 + 1); - bb[V][1] = get_clip_max_extent (y + h, page->cp[V], page->n[V] * 2 + 1); - - render_page_draw_cells (page, bb); -} /* Breaking up tables to fit on a page. */ diff --combined src/ui/gui/automake.mk index 1b6492ad92,6b71475e34..99b729f61c --- a/src/ui/gui/automake.mk +++ b/src/ui/gui/automake.mk @@@ -57,8 -57,8 +57,8 @@@ if HAVE_GU bin_PROGRAMS += src/ui/gui/psppire noinst_PROGRAMS += src/ui/gui/spreadsheet-test -src_ui_gui_psppire_CFLAGS = $(GTK_CFLAGS) $(GTKSOURCEVIEW_CFLAGS) -Wall -DGDK_MULTIHEAD_SAFE=1 -src_ui_gui_spreadsheet_test_CFLAGS = $(GTK_CFLAGS) -Wall -DGDK_MULTIHEAD_SAFE=1 +src_ui_gui_psppire_CFLAGS = $(GTK_CFLAGS) $(GTKSOURCEVIEW_CFLAGS) -Wall -DGDK_MULTIHEAD_SAFE=1 +src_ui_gui_spreadsheet_test_CFLAGS = $(GTK_CFLAGS) -Wall -DGDK_MULTIHEAD_SAFE=1 src_ui_gui_psppire_LDFLAGS = \ @@@ -98,54 -98,14 +98,14 @@@ src_ui_gui_spreadsheet_test_SOURCES = s src_ui_gui_psppiredir = $(pkgdatadir) - themedir = $(DESTDIR)$(datadir)/icons/hicolor - context = pspp - - install-lang: $(INSTALL_DATA) $(top_srcdir)/src/ui/gui/pspp.lang $(DESTDIR)$(pkgdatadir) - install-icons: - for size in 16x16 ; do \ - $(MKDIR_P) $(themedir)/$$size/$(context) ; \ - $(INSTALL_DATA) $(top_srcdir)/src/ui/gui/icons/$$size/* $(themedir)/$$size/$(context) ; \ - $(MKDIR_P) $(themedir)/$$size/apps ; \ - $(INSTALL_DATA) $(top_srcdir)/src/ui/gui/app-icons/$$size/pspp.png $(themedir)/$$size/apps ; \ - done - if test -z "$(DESTDIR)" ; then \ - gtk-update-icon-cache --ignore-theme-index $(themedir); \ - fi - - INSTALL_DATA_HOOKS += install-icons install-lang - - uninstall-icons: - for size in 16x16 ; do \ - rm -r -f $(themedir)/$$size/$(context); \ - rm -f $(themedir)/$$size/apps/pspp.png; \ - done - gtk-update-icon-cache --ignore-theme-index $(themedir) - - UNINSTALL_DATA_HOOKS += uninstall-icons + INSTALL_DATA_HOOKS += install-lang dist_src_ui_gui_psppire_DATA = \ $(UI_FILES) \ - $(top_srcdir)/src/ui/gui/app-icons/16x16/pspp.png \ $(top_srcdir)/src/ui/gui/pspp.lang \ - $(top_srcdir)/src/ui/gui/pspplogo.png \ - $(top_srcdir)/src/ui/gui/icons/value-labels.png \ - $(top_srcdir)/src/ui/gui/icons/goto-variable.png\ - $(top_srcdir)/src/ui/gui/icons/insert-case.png \ - $(top_srcdir)/src/ui/gui/icons/insert-variable.png \ - $(top_srcdir)/src/ui/gui/icons/recent-dialogs.png \ - $(top_srcdir)/src/ui/gui/icons/split-file.png \ - $(top_srcdir)/src/ui/gui/icons/select-cases.png \ - $(top_srcdir)/src/ui/gui/icons/weight-cases.png \ - $(top_srcdir)/src/ui/gui/icons/16x16/nominal.png \ - $(top_srcdir)/src/ui/gui/icons/16x16/ordinal.png \ - $(top_srcdir)/src/ui/gui/icons/16x16/scale.png \ - $(top_srcdir)/src/ui/gui/icons/16x16/string.png \ - $(top_srcdir)/src/ui/gui/icons/16x16/date-scale.png \ - $(top_srcdir)/src/ui/gui/icons/splash.png \ $(top_srcdir)/src/ui/gui/psppire.gtkrc src_ui_gui_psppire_SOURCES = \ @@@ -177,16 -137,8 +137,8 @@@ src/ui/gui/aggregate-dialog.h \ src/ui/gui/builder-wrapper.c \ src/ui/gui/builder-wrapper.h \ - src/ui/gui/checkbox-treeview.c \ - src/ui/gui/checkbox-treeview.h \ src/ui/gui/comments-dialog.c \ src/ui/gui/comments-dialog.h \ - src/ui/gui/compute-dialog.c \ - src/ui/gui/compute-dialog.h \ - src/ui/gui/chi-square-dialog.c \ - src/ui/gui/chi-square-dialog.h \ - src/ui/gui/count-dialog.c \ - src/ui/gui/count-dialog.h \ src/ui/gui/dialog-common.c \ src/ui/gui/dialog-common.h \ src/ui/gui/dict-display.h \ @@@ -203,21 -155,15 +155,15 @@@ src/ui/gui/help-menu.c \ src/ui/gui/help-menu.h \ src/ui/gui/helper.h \ - src/ui/gui/k-related-dialog.c \ - src/ui/gui/k-related-dialog.h \ - src/ui/gui/ks-one-sample-dialog.c \ - src/ui/gui/ks-one-sample-dialog.h \ src/ui/gui/main.c \ src/ui/gui/missing-val-dialog.c \ src/ui/gui/missing-val-dialog.h \ - src/ui/gui/oneway-anova-dialog.c \ - src/ui/gui/oneway-anova-dialog.h \ - src/ui/gui/paired-dialog.c \ - src/ui/gui/paired-dialog.h \ src/ui/gui/psppire.c \ src/ui/gui/psppire.h \ src/ui/gui/psppire-acr.h \ src/ui/gui/psppire-buttonbox.h \ + src/ui/gui/psppire-checkbox-treeview.c \ + src/ui/gui/psppire-checkbox-treeview.h \ src/ui/gui/psppire-conf.c \ src/ui/gui/psppire-conf.h \ src/ui/gui/psppire-data-editor.c \ @@@ -231,8 -177,16 +177,16 @@@ src/ui/gui/psppire-dialog.h \ src/ui/gui/psppire-dialog-action.c \ src/ui/gui/psppire-dialog-action.h \ + src/ui/gui/psppire-dialog-action-1sks.c \ + src/ui/gui/psppire-dialog-action-1sks.h \ src/ui/gui/psppire-dialog-action-binomial.c \ src/ui/gui/psppire-dialog-action-binomial.h \ + src/ui/gui/psppire-dialog-action-chisquare.c \ + src/ui/gui/psppire-dialog-action-chisquare.h \ + src/ui/gui/psppire-dialog-action-compute.c \ + src/ui/gui/psppire-dialog-action-compute.h \ + src/ui/gui/psppire-dialog-action-count.c \ + src/ui/gui/psppire-dialog-action-count.h \ src/ui/gui/psppire-dialog-action-correlation.c \ src/ui/gui/psppire-dialog-action-correlation.h \ src/ui/gui/psppire-dialog-action-crosstabs.c \ @@@ -243,6 -197,8 +197,8 @@@ src/ui/gui/psppire-dialog-action-examine.h \ src/ui/gui/psppire-dialog-action-factor.c \ src/ui/gui/psppire-dialog-action-factor.h \ + src/ui/gui/psppire-dialog-action-flip.c \ + src/ui/gui/psppire-dialog-action-flip.h \ src/ui/gui/psppire-dialog-action-frequencies.c \ src/ui/gui/psppire-dialog-action-frequencies.h \ src/ui/gui/psppire-dialog-action-indep-samps.c \ @@@ -251,8 -207,14 +207,14 @@@ src/ui/gui/psppire-dialog-action-kmeans.h \ src/ui/gui/psppire-dialog-action-logistic.c \ src/ui/gui/psppire-dialog-action-logistic.h \ + src/ui/gui/psppire-dialog-action-k-related.c \ + src/ui/gui/psppire-dialog-action-k-related.h \ src/ui/gui/psppire-dialog-action-means.c \ src/ui/gui/psppire-dialog-action-means.h \ + src/ui/gui/psppire-dialog-action-oneway.c \ + src/ui/gui/psppire-dialog-action-oneway.h \ + src/ui/gui/psppire-dialog-action-paired.c \ + src/ui/gui/psppire-dialog-action-paired.h \ src/ui/gui/psppire-dialog-action-rank.c \ src/ui/gui/psppire-dialog-action-rank.h \ src/ui/gui/psppire-dialog-action-regression.c \ @@@ -261,8 -223,16 +223,16 @@@ src/ui/gui/psppire-dialog-action-reliability.h \ src/ui/gui/psppire-dialog-action-roc.c \ src/ui/gui/psppire-dialog-action-roc.h \ + src/ui/gui/psppire-dialog-action-runs.c \ + src/ui/gui/psppire-dialog-action-runs.h \ src/ui/gui/psppire-dialog-action-sort.c \ src/ui/gui/psppire-dialog-action-sort.h \ + src/ui/gui/psppire-dialog-action-tt1s.c \ + src/ui/gui/psppire-dialog-action-tt1s.h \ + src/ui/gui/psppire-dialog-action-two-sample.c \ + src/ui/gui/psppire-dialog-action-two-sample.h \ + src/ui/gui/psppire-dialog-action-univariate.c \ + src/ui/gui/psppire-dialog-action-univariate.h \ src/ui/gui/psppire-dialog-action-var-info.c \ src/ui/gui/psppire-dialog-action-var-info.h \ src/ui/gui/psppire-dict.c \ @@@ -309,8 -279,6 +279,6 @@@ src/ui/gui/psppire-window-register.h \ src/ui/gui/recode-dialog.c \ src/ui/gui/recode-dialog.h \ - src/ui/gui/runs-dialog.c \ - src/ui/gui/runs-dialog.h \ src/ui/gui/select-cases-dialog.c \ src/ui/gui/select-cases-dialog.h \ src/ui/gui/split-file-dialog.c \ @@@ -329,18 -297,8 +297,8 @@@ src/ui/gui/page-sheet-spec.h \ src/ui/gui/text-data-import-dialog.c \ src/ui/gui/text-data-import-dialog.h \ - src/ui/gui/transpose-dialog.c \ - src/ui/gui/transpose-dialog.h \ - src/ui/gui/t-test-one-sample.c \ - src/ui/gui/t-test-one-sample.h \ src/ui/gui/t-test-options.c \ src/ui/gui/t-test-options.h \ - src/ui/gui/t-test-paired-samples.c \ - src/ui/gui/t-test-paired-samples.h \ - src/ui/gui/npar-two-sample-related.c \ - src/ui/gui/npar-two-sample-related.h \ - src/ui/gui/univariate-dialog.c \ - src/ui/gui/univariate-dialog.h \ src/ui/gui/val-labs-dialog.c \ src/ui/gui/val-labs-dialog.h \ src/ui/gui/var-display.c \ @@@ -413,3 -371,8 +371,8 @@@ src/ui/gui/include/gtk/gtk.h: src/ui/gu CLEANFILES += src/ui/gui/include/gtk/gtk.h EXTRA_DIST += src/ui/gui/include/gtk/gtk.in.h + include $(top_srcdir)/src/ui/gui/icons/automake.mk + + UNINSTALL_DATA_HOOKS += update-icon-cache + INSTALL_DATA_HOOKS += update-icon-cache + diff --combined src/ui/gui/main.c index ddc2a5b5fb,6bd6d1b904..6bc9e9686c --- a/src/ui/gui/main.c +++ b/src/ui/gui/main.c @@@ -1,5 -1,5 +1,5 @@@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2004, 2005, 2006, 2010, 2011, 2012 Free Software Foundation + Copyright (C) 2004, 2005, 2006, 2010, 2011, 2012, 2013 Free Software Foundation This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@@ -113,8 -113,8 +113,8 @@@ Informative output:\n -h, --help display this help and exit\n\ -V, --version output version information and exit\n\ \n\ - A non-option argument is interpreted as a .sav file, a .por file or a syntax\n\ - file to load.\n"), + A non-option argument is interpreted as a data file in .sav or .zsav or .por\n\ + format or a syntax file to load.\n"), program_name, gtk_help, inc_path); free (inc_path); @@@ -199,14 -199,12 +199,14 @@@ print_startup_time (gpointer data return FALSE; } +/* static gboolean quit_one_loop (gpointer data) { gtk_main_quit (); return FALSE; } +*/ struct initialisation_parameters { @@@ -331,14 -329,13 +331,14 @@@ main (int argc, char *argv[] init_p.splash_window = create_splash_window (); init_p.data_file = optind < argc ? argv[optind] : NULL; - if ( show_splash ) - gtk_widget_show (init_p.splash_window); + // if ( show_splash ) + // gtk_widget_show (init_p.splash_window); - g_idle_add (quit_one_loop, 0); + // g_idle_add (quit_one_loop, 0); - gtk_quit_add (0, run_inner_loop, &init_p); - gtk_main (); + // gtk_quit_add (0, run_inner_loop, &init_p); + run_inner_loop (&init_p); + // gtk_main (); return 0; } diff --combined src/ui/gui/page-assistant.c index ab7ccfd725,e287516f2a..0920f6503e --- a/src/ui/gui/page-assistant.c +++ b/src/ui/gui/page-assistant.c @@@ -35,7 -35,6 +35,6 @@@ #include "libpspp/i18n.h" #include "libpspp/line-reader.h" #include "libpspp/message.h" - #include "ui/gui/checkbox-treeview.h" #include "ui/gui/dialog-common.h" #include "ui/gui/executor.h" #include "ui/gui/helper.h" @@@ -46,7 -45,6 +45,6 @@@ #include "ui/gui/psppire-empty-list-store.h" #include "ui/gui/psppire-var-sheet.h" - #include "gl/error.h" #include "gl/intprops.h" #include "gl/xalloc.h" @@@ -189,13 -187,11 +187,13 @@@ on_prepare (GtkAssistant *assistant, Gt } +#if GTK3_TRANSITION if (gtk_assistant_get_page_type (assistant, page) == GTK_ASSISTANT_PAGE_CONFIRM) gtk_widget_grab_focus (assistant->apply); else gtk_widget_grab_focus (assistant->forward); +#endif } /* Called when the Cancel button in the assistant is clicked. */ diff --combined src/ui/gui/page-separators.c index 4b9f184be7,b2e1827c16..c81785cd30 --- a/src/ui/gui/page-separators.c +++ b/src/ui/gui/page-separators.c @@@ -37,7 -37,6 +37,6 @@@ #include "libpspp/i18n.h" #include "libpspp/line-reader.h" #include "libpspp/message.h" - #include "ui/gui/checkbox-treeview.h" #include "ui/gui/dialog-common.h" #include "ui/gui/executor.h" #include "ui/gui/helper.h" @@@ -50,7 -49,6 +49,6 @@@ #include "ui/gui/psppire-scanf.h" #include "ui/syntax-gen.h" - #include "gl/error.h" #include "gl/intprops.h" #include "gl/xalloc.h" @@@ -121,7 -119,7 +119,7 @@@ static const struct separator separator #define SEPARATOR_CNT (sizeof separators / sizeof *separators) static void -set_quote_list (GtkComboBoxEntry *cb) +set_quote_list (GtkComboBox *cb) { GtkListStore *list = gtk_list_store_new (1, G_TYPE_STRING); GtkTreeIter iter; @@@ -143,7 -141,7 +141,7 @@@ gtk_combo_box_set_model (GTK_COMBO_BOX (cb), GTK_TREE_MODEL (list)); g_object_unref (list); - gtk_combo_box_entry_set_text_column (cb, 0); + gtk_combo_box_set_entry_text_column (cb, 0); } /* Initializes IA's separators substructure. */ @@@ -167,7 -165,7 +165,7 @@@ separators_page_create (struct import_a p->quote_cb = get_widget_assert (builder, "quote-cb"); p->escape_cb = get_widget_assert (builder, "escape"); - set_quote_list (GTK_COMBO_BOX_ENTRY (p->quote_combo)); + set_quote_list (GTK_COMBO_BOX (p->quote_combo)); p->fields_tree_view = PSPP_SHEET_VIEW (get_widget_assert (builder, "fields")); g_signal_connect (p->quote_combo, "changed", G_CALLBACK (on_quote_combo_change), ia); @@@ -528,8 -526,10 +526,8 @@@ get_separators (struct import_assistan if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (s->quote_cb))) { - gchar *text = gtk_combo_box_get_active_text ( - GTK_COMBO_BOX (s->quote_combo)); + const gchar *text = gtk_entry_get_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (s->quote_combo)))); ds_assign_cstr (&s->quotes, text); - g_free (text); } else ds_clear (&s->quotes); diff --combined src/ui/gui/pspp-sheet-view.c index 5bdeee4c56,cd4999301f..ccdbd10e99 --- a/src/ui/gui/pspp-sheet-view.c +++ b/src/ui/gui/pspp-sheet-view.c @@@ -40,7 -40,6 +40,7 @@@ #include #include #include +#include #include #include "ui/gui/psppire-marshal.h" @@@ -135,8 -134,6 +135,8 @@@ enum PROP_MODEL, PROP_HADJUSTMENT, PROP_VADJUSTMENT, + PROP_HSCROLL_POLICY, + PROP_VSCROLL_POLICY, PROP_HEADERS_VISIBLE, PROP_HEADERS_CLICKABLE, PROP_REORDERABLE, @@@ -173,8 -170,8 +173,8 @@@ static void pspp_sheet_view_size_re GtkRequisition *requisition); static void pspp_sheet_view_size_allocate (GtkWidget *widget, GtkAllocation *allocation); -static gboolean pspp_sheet_view_expose (GtkWidget *widget, - GdkEventExpose *event); +static gboolean pspp_sheet_view_draw (GtkWidget *widget, + cairo_t *cr); static gboolean pspp_sheet_view_key_press (GtkWidget *widget, GdkEventKey *event); static gboolean pspp_sheet_view_key_release (GtkWidget *widget, @@@ -297,12 -294,6 +297,12 @@@ static void pspp_sheet_view_top_row static void invalidate_empty_focus (PsppSheetView *tree_view); /* Internal functions */ +static GtkAdjustment *pspp_sheet_view_do_get_hadjustment (PsppSheetView *); +static GtkAdjustment *pspp_sheet_view_do_get_vadjustment (PsppSheetView *); +static void pspp_sheet_view_do_set_hadjustment (PsppSheetView *tree_view, + GtkAdjustment *adjustment); +static void pspp_sheet_view_do_set_vadjustment (PsppSheetView *tree_view, + GtkAdjustment *adjustment); static void pspp_sheet_view_add_move_binding (GtkBindingSet *binding_set, guint keyval, guint modmask, @@@ -364,10 -355,8 +364,10 @@@ static void pspp_sheet_view_search_ static void pspp_sheet_view_search_disable_popdown (GtkEntry *entry, GtkMenu *menu, gpointer data); +#if GTK3_TRANSITION static void pspp_sheet_view_search_preedit_changed (GtkIMContext *im_context, PsppSheetView *tree_view); +#endif static void pspp_sheet_view_search_activate (GtkEntry *entry, PsppSheetView *tree_view); static gboolean pspp_sheet_view_real_search_enable_popdown(gpointer data); @@@ -459,32 -448,7 +459,32 @@@ static GtkBindingSet *edit_bindings G_DEFINE_TYPE_WITH_CODE (PsppSheetView, pspp_sheet_view, GTK_TYPE_CONTAINER, G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE, - pspp_sheet_view_buildable_init)) + pspp_sheet_view_buildable_init) + G_IMPLEMENT_INTERFACE (GTK_TYPE_SCROLLABLE, NULL)) + +static void +pspp_sheet_view_get_preferred_width (GtkWidget *widget, + gint *minimal_width, + gint *natural_width) +{ + GtkRequisition requisition; + + pspp_sheet_view_size_request (widget, &requisition); + + *minimal_width = *natural_width = requisition.width; +} + +static void +pspp_sheet_view_get_preferred_height (GtkWidget *widget, + gint *minimal_height, + gint *natural_height) +{ + GtkRequisition requisition; + + pspp_sheet_view_size_request (widget, &requisition); + + *minimal_height = *natural_height = requisition.height; +} static void pspp_sheet_view_class_init (PsppSheetViewClass *class) @@@ -514,15 -478,14 +514,15 @@@ widget_class->map = pspp_sheet_view_map; widget_class->realize = pspp_sheet_view_realize; widget_class->unrealize = pspp_sheet_view_unrealize; - widget_class->size_request = pspp_sheet_view_size_request; + widget_class->get_preferred_width = pspp_sheet_view_get_preferred_width; + widget_class->get_preferred_height = pspp_sheet_view_get_preferred_height; widget_class->size_allocate = pspp_sheet_view_size_allocate; widget_class->button_press_event = pspp_sheet_view_button_press; widget_class->button_release_event = pspp_sheet_view_button_release; widget_class->grab_broken_event = pspp_sheet_view_grab_broken; /*widget_class->configure_event = pspp_sheet_view_configure;*/ widget_class->motion_notify_event = pspp_sheet_view_motion; - widget_class->expose_event = pspp_sheet_view_expose; + widget_class->draw = pspp_sheet_view_draw; widget_class->key_press_event = pspp_sheet_view_key_press; widget_class->key_release_event = pspp_sheet_view_key_release; widget_class->enter_notify_event = pspp_sheet_view_enter_notify; @@@ -565,10 -528,21 +565,10 @@@ GTK_TYPE_TREE_MODEL, GTK_PARAM_READWRITE)); - g_object_class_install_property (o_class, - PROP_HADJUSTMENT, - g_param_spec_object ("hadjustment", - P_("Horizontal Adjustment"), - P_("Horizontal Adjustment for the widget"), - GTK_TYPE_ADJUSTMENT, - GTK_PARAM_READWRITE)); - - g_object_class_install_property (o_class, - PROP_VADJUSTMENT, - g_param_spec_object ("vadjustment", - P_("Vertical Adjustment"), - P_("Vertical Adjustment for the widget"), - GTK_TYPE_ADJUSTMENT, - GTK_PARAM_READWRITE)); + g_object_class_override_property (o_class, PROP_HADJUSTMENT, "hadjustment"); + g_object_class_override_property (o_class, PROP_VADJUSTMENT, "vadjustment"); + g_object_class_override_property (o_class, PROP_HSCROLL_POLICY, "hscroll-policy"); + g_object_class_override_property (o_class, PROP_VSCROLL_POLICY, "vscroll-policy"); g_object_class_install_property (o_class, PROP_HEADERS_VISIBLE, @@@ -777,7 -751,6 +777,7 @@@ GTK_PARAM_READABLE)); /* Signals */ +#if GTK3_TRANSITION /** * PsppSheetView::set-scroll-adjustments * @horizontal: the horizontal #GtkAdjustment @@@ -797,7 -770,6 +797,7 @@@ G_TYPE_NONE, 2, GTK_TYPE_ADJUSTMENT, GTK_TYPE_ADJUSTMENT); +#endif /** * PsppSheetView::row-activated: @@@ -1119,9 -1091,6 +1119,9 @@@ pspp_sheet_view_init (PsppSheetView *tr tree_view->priv->button_style = NULL; tree_view->dispose_has_run = FALSE; + + pspp_sheet_view_do_set_vadjustment (tree_view, NULL); + pspp_sheet_view_do_set_hadjustment (tree_view, NULL); } @@@ -1145,20 -1114,12 +1145,20 @@@ pspp_sheet_view_set_property (GObjec pspp_sheet_view_set_model (tree_view, g_value_get_object (value)); break; case PROP_HADJUSTMENT: - pspp_sheet_view_set_hadjustment (tree_view, g_value_get_object (value)); + pspp_sheet_view_do_set_hadjustment (tree_view, g_value_get_object (value)); break; case PROP_VADJUSTMENT: - pspp_sheet_view_set_vadjustment (tree_view, g_value_get_object (value)); + pspp_sheet_view_do_set_vadjustment (tree_view, g_value_get_object (value)); break; - case PROP_HEADERS_VISIBLE: + case PROP_HSCROLL_POLICY: + tree_view->priv->hscroll_policy = g_value_get_enum (value); + gtk_widget_queue_resize (GTK_WIDGET (tree_view)); + break; + case PROP_VSCROLL_POLICY: + tree_view->priv->vscroll_policy = g_value_get_enum (value); + gtk_widget_queue_resize (GTK_WIDGET (tree_view)); + break; + case PROP_HEADERS_VISIBLE: pspp_sheet_view_set_headers_visible (tree_view, g_value_get_boolean (value)); break; case PROP_HEADERS_CLICKABLE: @@@ -1241,12 -1202,6 +1241,12 @@@ pspp_sheet_view_get_property (GObjec case PROP_VADJUSTMENT: g_value_set_object (value, tree_view->priv->vadjustment); break; + case PROP_HSCROLL_POLICY: + g_value_set_enum (value, tree_view->priv->hscroll_policy); + break; + case PROP_VSCROLL_POLICY: + g_value_set_enum (value, tree_view->priv->vscroll_policy); + break; case PROP_HEADERS_VISIBLE: g_value_set_boolean (value, pspp_sheet_view_get_headers_visible (tree_view)); break; @@@ -1493,46 -1448,42 +1493,46 @@@ pspp_sheet_view_map (GtkWidget *widget pspp_sheet_view_map_buttons (tree_view); - gdk_window_show (widget->window); + gdk_window_show (gtk_widget_get_window (widget)); } static void pspp_sheet_view_realize (GtkWidget *widget) { - gint i; PsppSheetView *tree_view = PSPP_SHEET_VIEW (widget); GList *tmp_list; GdkWindowAttr attributes; gint attributes_mask; + GtkAllocation allocation; + GtkAllocation old_allocation; gtk_widget_set_realized (widget, TRUE); + gtk_widget_get_allocation (widget, &allocation); + gtk_widget_get_allocation (widget, &old_allocation); + /* Make the main, clipping window */ attributes.window_type = GDK_WINDOW_CHILD; - attributes.x = widget->allocation.x; - attributes.y = widget->allocation.y; - attributes.width = widget->allocation.width; - attributes.height = widget->allocation.height; + attributes.x = allocation.x; + attributes.y = allocation.y; + attributes.width = allocation.width; + attributes.height = allocation.height; attributes.wclass = GDK_INPUT_OUTPUT; attributes.visual = gtk_widget_get_visual (widget); - attributes.colormap = gtk_widget_get_colormap (widget); attributes.event_mask = GDK_VISIBILITY_NOTIFY_MASK; - attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; + attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL; - widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), - &attributes, attributes_mask); - gdk_window_set_user_data (widget->window, widget); + gtk_widget_set_window (widget, + gdk_window_new (gtk_widget_get_parent_window (widget), + &attributes, attributes_mask)); + gdk_window_set_user_data (gtk_widget_get_window (widget), widget); /* Make the window for the tree */ attributes.x = 0; attributes.y = TREE_VIEW_HEADER_HEIGHT (tree_view); - attributes.width = MAX (tree_view->priv->width, widget->allocation.width); - attributes.height = widget->allocation.height; + attributes.width = MAX (tree_view->priv->width, old_allocation.width); + attributes.height = old_allocation.height; attributes.event_mask = (GDK_EXPOSURE_MASK | GDK_SCROLL_MASK | GDK_POINTER_MOTION_MASK | @@@ -1542,14 -1493,14 +1542,14 @@@ GDK_BUTTON_RELEASE_MASK | gtk_widget_get_events (widget)); - tree_view->priv->bin_window = gdk_window_new (widget->window, + tree_view->priv->bin_window = gdk_window_new (gtk_widget_get_window (widget), &attributes, attributes_mask); gdk_window_set_user_data (tree_view->priv->bin_window, widget); /* Make the column header window */ attributes.x = 0; attributes.y = 0; - attributes.width = MAX (tree_view->priv->width, widget->allocation.width); + attributes.width = MAX (tree_view->priv->width, old_allocation.width); attributes.height = tree_view->priv->header_height; attributes.event_mask = (GDK_EXPOSURE_MASK | GDK_SCROLL_MASK | @@@ -1559,15 -1510,15 +1559,15 @@@ GDK_KEY_RELEASE_MASK | gtk_widget_get_events (widget)); - tree_view->priv->header_window = gdk_window_new (widget->window, + tree_view->priv->header_window = gdk_window_new (gtk_widget_get_window (widget), &attributes, attributes_mask); gdk_window_set_user_data (tree_view->priv->header_window, widget); /* Add them all up. */ - widget->style = gtk_style_attach (widget->style, widget->window); - gdk_window_set_back_pixmap (widget->window, NULL, FALSE); - gdk_window_set_background (tree_view->priv->bin_window, &widget->style->base[widget->state]); - gtk_style_set_background (widget->style, tree_view->priv->header_window, GTK_STATE_NORMAL); + gtk_widget_set_style (widget, + gtk_style_attach (gtk_widget_get_style (widget), gtk_widget_get_window (widget))); + gdk_window_set_background (tree_view->priv->bin_window, >k_widget_get_style (widget)->base[gtk_widget_get_state (widget)]); + gtk_style_set_background (gtk_widget_get_style (widget), tree_view->priv->header_window, GTK_STATE_NORMAL); tmp_list = tree_view->priv->children; while (tmp_list) @@@ -1585,11 -1536,18 +1585,11 @@@ pspp_sheet_view_set_grid_lines (tree_view, tree_view->priv->grid_lines); install_presize_handler (tree_view); - - for (i = 0; i < 5; ++i) - { - tree_view->priv->grid_line_gc[i] = gdk_gc_new (widget->window); - gdk_gc_copy (tree_view->priv->grid_line_gc[i], widget->style->text_aa_gc[i]); - } } static void pspp_sheet_view_unrealize (GtkWidget *widget) { - gint x; PsppSheetView *tree_view = PSPP_SHEET_VIEW (widget); PsppSheetViewPrivate *priv = tree_view->priv; GList *list; @@@ -1657,6 -1615,9 +1657,6 @@@ priv->drag_highlight_window = NULL; } - for (x = 0 ; x < 5 ; ++x) - g_object_unref (priv->grid_line_gc[x]); - if (tree_view->priv->columns != NULL) { list = tree_view->priv->columns; @@@ -1793,15 -1754,13 +1793,15 @@@ invalidate_column (PsppSheetView if (tmpcolumn == column) { GdkRectangle invalid_rect; - + GtkAllocation allocation; + + gtk_widget_get_allocation (widget, &allocation); invalid_rect.x = column_offset; invalid_rect.y = 0; invalid_rect.width = column->width; - invalid_rect.height = widget->allocation.height; + invalid_rect.height = allocation.height; - gdk_window_invalidate_rect (widget->window, &invalid_rect, TRUE); + gdk_window_invalidate_rect (gtk_widget_get_window (widget), &invalid_rect, TRUE); break; } @@@ -1869,7 -1828,6 +1869,7 @@@ pspp_sheet_view_size_allocate_columns ( PsppSheetView *tree_view; GList *list, *first_column, *last_column; PsppSheetViewColumn *column; + GtkAllocation col_allocation; GtkAllocation allocation; gint width = 0; gint extra, extra_per_column; @@@ -1884,7 -1842,6 +1884,7 @@@ last_column && !(PSPP_SHEET_VIEW_COLUMN (last_column->data)->visible); last_column = last_column->prev) ; + if (last_column == NULL) return; @@@ -1893,8 -1850,8 +1893,8 @@@ first_column = first_column->next) ; - allocation.y = 0; - allocation.height = tree_view->priv->header_height; + col_allocation.y = 0; + col_allocation.height = tree_view->priv->header_height; rtl = (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL); @@@ -1912,8 -1869,7 +1912,8 @@@ number_of_expand_columns++; } - extra = MAX (widget->allocation.width - full_requested_width, 0); + gtk_widget_get_allocation (widget, &allocation); + extra = MAX (allocation.width - full_requested_width, 0); if (number_of_expand_columns > 0) extra_per_column = extra/number_of_expand_columns; else @@@ -1937,8 -1893,9 +1937,8 @@@ if (column == tree_view->priv->drag_column) { GtkAllocation drag_allocation; - gdk_drawable_get_size (tree_view->priv->drag_window, - &(drag_allocation.width), - &(drag_allocation.height)); + drag_allocation.width = gdk_window_get_width (tree_view->priv->drag_window); + drag_allocation.height = gdk_window_get_height (tree_view->priv->drag_window); drag_allocation.x = 0; drag_allocation.y = 0; pspp_sheet_view_column_size_allocate (tree_view->priv->drag_column, @@@ -1949,7 -1906,7 +1949,7 @@@ real_requested_width = pspp_sheet_view_get_real_requested_width_from_column (tree_view, column); - allocation.x = width; + col_allocation.x = width; column->width = real_requested_width; if (column->expand) @@@ -1971,25 -1928,25 +1971,25 @@@ if (column->width != old_width) g_object_notify (G_OBJECT (column), "width"); - allocation.width = column->width; + col_allocation.width = column->width; width += column->width; if (column->width > old_width) column_changed = TRUE; - pspp_sheet_view_column_size_allocate (column, &allocation); + pspp_sheet_view_column_size_allocate (column, &col_allocation); - if (span_intersects (allocation.x, allocation.width, - tree_view->priv->hadjustment->value, - widget->allocation.width) + if (span_intersects (col_allocation.x, col_allocation.width, + gtk_adjustment_get_value (tree_view->priv->hadjustment), + allocation.width) && gtk_widget_get_realized (widget)) pspp_sheet_view_column_set_need_button (column, TRUE); if (column->window) gdk_window_move_resize (column->window, - allocation.x + (rtl ? 0 : allocation.width) - TREE_VIEW_DRAG_WIDTH/2, - allocation.y, - TREE_VIEW_DRAG_WIDTH, allocation.height); + col_allocation.x + (rtl ? 0 : col_allocation.width) - TREE_VIEW_DRAG_WIDTH/2, + col_allocation.y, + TREE_VIEW_DRAG_WIDTH, col_allocation.height); } /* We change the width here. The user might have been resizing columns, @@@ -2003,6 -1960,7 +2003,6 @@@ gtk_widget_queue_draw (GTK_WIDGET (tree_view)); } - static void pspp_sheet_view_size_allocate (GtkWidget *widget, GtkAllocation *allocation) @@@ -2010,14 -1968,12 +2010,14 @@@ PsppSheetView *tree_view = PSPP_SHEET_VIEW (widget); GList *tmp_list; gboolean width_changed = FALSE; - gint old_width = widget->allocation.width; + GtkAllocation old_allocation; + gtk_widget_get_allocation (widget, &old_allocation); - if (allocation->width != widget->allocation.width) + if (allocation->width != old_allocation.width) width_changed = TRUE; - widget->allocation = *allocation; + + gtk_widget_set_allocation (widget, allocation); tmp_list = tree_view->priv->children; @@@ -2041,11 -1997,11 +2041,11 @@@ */ pspp_sheet_view_size_allocate_columns (widget, &width_changed); - tree_view->priv->hadjustment->page_size = allocation->width; - tree_view->priv->hadjustment->page_increment = allocation->width * 0.9; - tree_view->priv->hadjustment->step_increment = allocation->width * 0.1; - tree_view->priv->hadjustment->lower = 0; - tree_view->priv->hadjustment->upper = MAX (tree_view->priv->hadjustment->page_size, tree_view->priv->width); + gtk_adjustment_set_page_size (tree_view->priv->hadjustment, allocation->width); + gtk_adjustment_set_page_increment (tree_view->priv->hadjustment, allocation->width * 0.9); + gtk_adjustment_set_step_increment (tree_view->priv->hadjustment, allocation->width * 0.1); + gtk_adjustment_set_lower (tree_view->priv->hadjustment, 0); + gtk_adjustment_set_upper (tree_view->priv->hadjustment, MAX (gtk_adjustment_get_page_size (tree_view->priv->hadjustment), tree_view->priv->width)); if (gtk_widget_get_direction(widget) == GTK_TEXT_DIR_RTL) { @@@ -2053,42 -2009,42 +2053,42 @@@ { if (tree_view->priv->init_hadjust_value) { - tree_view->priv->hadjustment->value = MAX (tree_view->priv->width - allocation->width, 0); + gtk_adjustment_set_value (tree_view->priv->hadjustment, MAX (tree_view->priv->width - allocation->width, 0)); tree_view->priv->init_hadjust_value = FALSE; } - else if (allocation->width != old_width) + else if (allocation->width != old_allocation.width) { - tree_view->priv->hadjustment->value = CLAMP (tree_view->priv->hadjustment->value - allocation->width + old_width, 0, tree_view->priv->width - allocation->width); + gtk_adjustment_set_value (tree_view->priv->hadjustment, CLAMP (gtk_adjustment_get_value (tree_view->priv->hadjustment) - allocation->width + old_allocation.width, 0, tree_view->priv->width - allocation->width)); } else - tree_view->priv->hadjustment->value = CLAMP (tree_view->priv->width - (tree_view->priv->prev_width - tree_view->priv->hadjustment->value), 0, tree_view->priv->width - allocation->width); + gtk_adjustment_set_value (tree_view->priv->hadjustment, CLAMP (tree_view->priv->width - (tree_view->priv->prev_width - gtk_adjustment_get_value (tree_view->priv->hadjustment)), 0, tree_view->priv->width - allocation->width)); } else { - tree_view->priv->hadjustment->value = 0; + gtk_adjustment_set_value (tree_view->priv->hadjustment, 0); tree_view->priv->init_hadjust_value = TRUE; } } else - if (tree_view->priv->hadjustment->value + allocation->width > tree_view->priv->width) - tree_view->priv->hadjustment->value = MAX (tree_view->priv->width - allocation->width, 0); + if (gtk_adjustment_get_value (tree_view->priv->hadjustment) + allocation->width > tree_view->priv->width) + gtk_adjustment_set_value (tree_view->priv->hadjustment, MAX (tree_view->priv->width - allocation->width, 0)); gtk_adjustment_changed (tree_view->priv->hadjustment); - tree_view->priv->vadjustment->page_size = allocation->height - TREE_VIEW_HEADER_HEIGHT (tree_view); - tree_view->priv->vadjustment->step_increment = tree_view->priv->vadjustment->page_size * 0.1; - tree_view->priv->vadjustment->page_increment = tree_view->priv->vadjustment->page_size * 0.9; - tree_view->priv->vadjustment->lower = 0; - tree_view->priv->vadjustment->upper = MAX (tree_view->priv->vadjustment->page_size, tree_view->priv->height); + gtk_adjustment_set_page_size (tree_view->priv->vadjustment, allocation->height - TREE_VIEW_HEADER_HEIGHT (tree_view)); + gtk_adjustment_set_step_increment (tree_view->priv->vadjustment, gtk_adjustment_get_page_size (tree_view->priv->vadjustment) * 0.1); + gtk_adjustment_set_page_increment (tree_view->priv->vadjustment, gtk_adjustment_get_page_size (tree_view->priv->vadjustment) * 0.9); + gtk_adjustment_set_lower (tree_view->priv->vadjustment, 0); + gtk_adjustment_set_upper (tree_view->priv->vadjustment, MAX (gtk_adjustment_get_page_size (tree_view->priv->vadjustment), tree_view->priv->height)); gtk_adjustment_changed (tree_view->priv->vadjustment); /* now the adjustments and window sizes are in sync, we can sync toprow/dy again */ - if (tree_view->priv->height <= tree_view->priv->vadjustment->page_size) + if (tree_view->priv->height <= gtk_adjustment_get_page_size (tree_view->priv->vadjustment)) gtk_adjustment_set_value (GTK_ADJUSTMENT (tree_view->priv->vadjustment), 0); - else if (tree_view->priv->vadjustment->value + tree_view->priv->vadjustment->page_size > tree_view->priv->height) + else if (gtk_adjustment_get_value (tree_view->priv->vadjustment) + gtk_adjustment_get_page_size (tree_view->priv->vadjustment) > tree_view->priv->height) gtk_adjustment_set_value (GTK_ADJUSTMENT (tree_view->priv->vadjustment), - tree_view->priv->height - tree_view->priv->vadjustment->page_size); + tree_view->priv->height - gtk_adjustment_get_page_size (tree_view->priv->vadjustment)); else if (gtk_tree_row_reference_valid (tree_view->priv->top_row)) pspp_sheet_view_top_row_to_dy (tree_view); else @@@ -2096,16 -2052,16 +2096,16 @@@ if (gtk_widget_get_realized (widget)) { - gdk_window_move_resize (widget->window, + gdk_window_move_resize (gtk_widget_get_window (widget), allocation->x, allocation->y, allocation->width, allocation->height); gdk_window_move_resize (tree_view->priv->header_window, - - (gint) tree_view->priv->hadjustment->value, + - (gint) gtk_adjustment_get_value (tree_view->priv->hadjustment), 0, MAX (tree_view->priv->width, allocation->width), tree_view->priv->header_height); gdk_window_move_resize (tree_view->priv->bin_window, - - (gint) tree_view->priv->hadjustment->value, + - (gint) gtk_adjustment_get_value (tree_view->priv->hadjustment), TREE_VIEW_HEADER_HEIGHT (tree_view), MAX (tree_view->priv->width, allocation->width), allocation->height - TREE_VIEW_HEADER_HEIGHT (tree_view)); @@@ -2420,7 -2376,7 +2420,7 @@@ pspp_sheet_view_button_press (GtkWidge return TRUE; /* select */ - pre_val = tree_view->priv->vadjustment->value; + pre_val = gtk_adjustment_get_value (tree_view->priv->vadjustment); path = _pspp_sheet_view_find_path (tree_view, node); @@@ -2467,7 -2423,7 +2467,7 @@@ * correct here */ - aft_val = tree_view->priv->vadjustment->value; + aft_val = gtk_adjustment_get_value (tree_view->priv->vadjustment); dval = pre_val - aft_val; cell_area.y += dval; @@@ -2687,7 -2643,7 +2687,7 @@@ pspp_sheet_view_button_release_column_r PSPP_SHEET_VIEW_UNSET_FLAG (tree_view, PSPP_SHEET_VIEW_IN_COLUMN_RESIZE); gtk_grab_remove (widget); - gdk_display_pointer_ungrab (gdk_drawable_get_display (event->window), + gdk_display_pointer_ungrab (gdk_window_get_display (event->window), event->time); return TRUE; } @@@ -2843,7 -2799,6 +2843,7 @@@ do_prelight (PsppSheetView *tree_view } } + static void prelight_or_select (PsppSheetView *tree_view, int node, @@@ -2948,7 -2903,6 +2948,7 @@@ update_prelight (PsppSheetView *tree_vi static void pspp_sheet_view_motion_draw_column_motion_arrow (PsppSheetView *tree_view) { +#if GTK3_TRANSITION PsppSheetViewColumnReorder *reorder = tree_view->priv->cur_reorder; GtkWidget *widget = GTK_WIDGET (tree_view); GdkBitmap *mask = NULL; @@@ -3111,7 -3065,7 +3111,7 @@@ /* Get x, y, width, height of arrow */ width = width/2; /* remember, the arrow only takes half the available width */ - gdk_window_get_origin (widget->window, &x, &y); + gdk_window_get_origin (gtk_widget_get_window (widget), &x, &y); if (arrow_type == DRAG_COLUMN_WINDOW_STATE_ARROW_RIGHT) x += widget->allocation.width - width; @@@ -3187,7 -3141,6 +3187,7 @@@ gdk_window_show (tree_view->priv->drag_highlight_window); gdk_window_raise (tree_view->priv->drag_highlight_window); +#endif } static gboolean @@@ -3201,13 -3154,13 +3201,13 @@@ pspp_sheet_view_motion_resize_column (G column = pspp_sheet_view_get_column (tree_view, tree_view->priv->drag_pos); - if (event->is_hint || event->window != widget->window) + if (event->is_hint || event->window != gtk_widget_get_window (widget)) gtk_widget_get_pointer (widget, &x, NULL); else x = event->x; if (tree_view->priv->hadjustment) - x += tree_view->priv->hadjustment->value; + x += gtk_adjustment_get_value (tree_view->priv->hadjustment); new_width = pspp_sheet_view_new_column_width (tree_view, tree_view->priv->drag_pos, &x); @@@ -3272,8 -3225,8 +3272,8 @@@ pspp_sheet_view_vertical_autoscroll (Ps return; } - value = CLAMP (tree_view->priv->vadjustment->value + offset, 0.0, - tree_view->priv->vadjustment->upper - tree_view->priv->vadjustment->page_size); + value = CLAMP (gtk_adjustment_get_value (tree_view->priv->vadjustment) + offset, 0.0, + gtk_adjustment_get_upper (tree_view->priv->vadjustment) - gtk_adjustment_get_page_size (tree_view->priv->vadjustment)); gtk_adjustment_set_value (tree_view->priv->vadjustment, value); } @@@ -3299,8 -3252,8 +3299,8 @@@ pspp_sheet_view_horizontal_autoscroll ( } offset = offset/3; - value = CLAMP (tree_view->priv->hadjustment->value + offset, - 0.0, tree_view->priv->hadjustment->upper - tree_view->priv->hadjustment->page_size); + value = CLAMP (gtk_adjustment_get_value (tree_view->priv->hadjustment) + offset, + 0.0, gtk_adjustment_get_upper (tree_view->priv->hadjustment) - gtk_adjustment_get_page_size (tree_view->priv->hadjustment)); gtk_adjustment_set_value (tree_view->priv->hadjustment, value); return TRUE; @@@ -3314,7 -3267,6 +3314,7 @@@ pspp_sheet_view_motion_drag_column (Gtk PsppSheetView *tree_view = (PsppSheetView *) widget; PsppSheetViewColumn *column = tree_view->priv->drag_column; gint x, y; + GtkAllocation allocation; /* Sanity Check */ if ((column == NULL) || @@@ -3323,9 -3275,8 +3323,9 @@@ /* Handle moving the header */ gdk_window_get_position (tree_view->priv->drag_window, &x, &y); + gtk_widget_get_allocation (GTK_WIDGET (tree_view), &allocation); x = CLAMP (x + (gint)event->x - column->drag_x, 0, - MAX (tree_view->priv->width, GTK_WIDGET (tree_view)->allocation.width) - column->allocation.width); + MAX (tree_view->priv->width, allocation.width) - column->allocation.width); gdk_window_move (tree_view->priv->drag_window, x, y); /* autoscroll, if needed */ @@@ -3565,16 -3516,14 +3565,16 @@@ pspp_sheet_view_update_rubber_band_sele tree_view->priv->rubber_band_end_node = end_node; } +#define GDK_RECTANGLE_PTR(X) ((GdkRectangle *)(X)) + static void pspp_sheet_view_update_rubber_band (PsppSheetView *tree_view) { gint x, y; - GdkRectangle old_area; - GdkRectangle new_area; - GdkRectangle common; - GdkRegion *invalid_region; + cairo_rectangle_int_t old_area; + cairo_rectangle_int_t new_area; + cairo_rectangle_int_t common; + cairo_region_t *invalid_region; PsppSheetViewColumn *column; old_area.x = MIN (tree_view->priv->press_start_x, tree_view->priv->rubber_band_x); @@@ -3592,14 -3541,13 +3592,14 @@@ new_area.width = ABS (x - tree_view->priv->press_start_x) + 1; new_area.height = ABS (y - tree_view->priv->press_start_y) + 1; - invalid_region = gdk_region_rectangle (&old_area); - gdk_region_union_with_rect (invalid_region, &new_area); + invalid_region = cairo_region_create_rectangle (&old_area); + cairo_region_union_rectangle (invalid_region, &new_area); - gdk_rectangle_intersect (&old_area, &new_area, &common); + gdk_rectangle_intersect (GDK_RECTANGLE_PTR (&old_area), + GDK_RECTANGLE_PTR (&new_area), GDK_RECTANGLE_PTR (&common)); if (common.width > 2 && common.height > 2) { - GdkRegion *common_region; + cairo_region_t *common_region; /* make sure the border is invalidated */ common.x += 1; @@@ -3607,26 -3555,15 +3607,26 @@@ common.width -= 2; common.height -= 2; - common_region = gdk_region_rectangle (&common); + common_region = cairo_region_create_rectangle (&common); - gdk_region_subtract (invalid_region, common_region); - gdk_region_destroy (common_region); + cairo_region_subtract (invalid_region, common_region); + cairo_region_destroy (common_region); } - gdk_window_invalidate_region (tree_view->priv->bin_window, invalid_region, TRUE); +#if GTK_MAJOR_VERSION == 3 + gdk_window_invalidate_region (tree_view->priv->bin_window, invalid_region, TRUE); +#else + { + cairo_rectangle_int_t extents; + GdkRegion *ereg; + cairo_region_get_extents (invalid_region, &extents); + ereg = gdk_region_rectangle (GDK_RECTANGLE_PTR (&extents)); + gdk_window_invalidate_region (tree_view->priv->bin_window, ereg, TRUE); + gdk_region_destroy (ereg); + } +#endif - gdk_region_destroy (invalid_region); + cairo_region_destroy (invalid_region); tree_view->priv->rubber_band_x = x; tree_view->priv->rubber_band_y = y; @@@ -3642,7 -3579,6 +3642,7 @@@ pspp_sheet_view_update_rubber_band_selection (tree_view); } +#if GTK3_TRANSITION static void pspp_sheet_view_paint_rubber_band (PsppSheetView *tree_view, GdkRectangle *area) @@@ -3650,7 -3586,6 +3650,7 @@@ cairo_t *cr; GdkRectangle rect; GdkRectangle rubber_rect; + GtkStyle *style; return; rubber_rect.x = MIN (tree_view->priv->press_start_x, tree_view->priv->rubber_band_x); @@@ -3664,11 -3599,10 +3664,11 @@@ cr = gdk_cairo_create (tree_view->priv->bin_window); cairo_set_line_width (cr, 1.0); + style = gtk_widget_get_style (GTK_WIDGET (tree_view)); cairo_set_source_rgba (cr, - GTK_WIDGET (tree_view)->style->fg[GTK_STATE_NORMAL].red / 65535., - GTK_WIDGET (tree_view)->style->fg[GTK_STATE_NORMAL].green / 65535., - GTK_WIDGET (tree_view)->style->fg[GTK_STATE_NORMAL].blue / 65535., + style->fg[GTK_STATE_NORMAL].red / 65535., + style->fg[GTK_STATE_NORMAL].green / 65535., + style->fg[GTK_STATE_NORMAL].blue / 65535., .25); gdk_cairo_rectangle (cr, &rect); @@@ -3676,9 -3610,9 +3676,9 @@@ cairo_paint (cr); cairo_set_source_rgb (cr, - GTK_WIDGET (tree_view)->style->fg[GTK_STATE_NORMAL].red / 65535., - GTK_WIDGET (tree_view)->style->fg[GTK_STATE_NORMAL].green / 65535., - GTK_WIDGET (tree_view)->style->fg[GTK_STATE_NORMAL].blue / 65535.); + style->fg[GTK_STATE_NORMAL].red / 65535., + style->fg[GTK_STATE_NORMAL].green / 65535., + style->fg[GTK_STATE_NORMAL].blue / 65535.); cairo_rectangle (cr, rubber_rect.x + 0.5, rubber_rect.y + 0.5, @@@ -3687,8 -3621,6 +3687,8 @@@ cairo_destroy (cr); } +#endif + static gboolean pspp_sheet_view_motion_bin_window (GtkWidget *widget, @@@ -3781,8 -3713,7 +3781,8 @@@ invalidate_empty_focus (PsppSheetView * area.x = 0; area.y = 0; - gdk_drawable_get_size (tree_view->priv->bin_window, &area.width, &area.height); + area.width = gdk_window_get_width (tree_view->priv->bin_window); + area.height = gdk_window_get_height (tree_view->priv->bin_window); gdk_window_invalidate_rect (tree_view->priv->bin_window, &area, FALSE); } @@@ -3790,66 -3721,70 +3790,69 @@@ * is empty. */ static void -draw_empty_focus (PsppSheetView *tree_view, GdkRectangle *clip_area) +draw_empty_focus (PsppSheetView *tree_view) { GtkWidget *widget = GTK_WIDGET (tree_view); gint w, h; + cairo_t *cr = gdk_cairo_create (tree_view->priv->bin_window); if (!gtk_widget_has_focus (widget)) return; - gdk_drawable_get_size (tree_view->priv->bin_window, &w, &h); + w = gdk_window_get_width (tree_view->priv->bin_window); + h = gdk_window_get_height (tree_view->priv->bin_window); w -= 2; h -= 2; if (w > 0 && h > 0) gtk_paint_focus (gtk_widget_get_style (widget), - tree_view->priv->bin_window, + cr, gtk_widget_get_state (widget), - clip_area, widget, NULL, 1, 1, w, h); + cairo_destroy (cr); } static void -pspp_sheet_view_draw_grid_lines (PsppSheetView *tree_view, - GdkEventExpose *event, - gint n_visible_columns, - gint min_y, - gint max_y) +pspp_sheet_view_draw_vertical_grid_lines (PsppSheetView *tree_view, + cairo_t *cr, + gint n_visible_columns, + gint min_y, + gint max_y) { GList *list = tree_view->priv->columns; gint i = 0; gint current_x = 0; - gint height; if (tree_view->priv->grid_lines != PSPP_SHEET_VIEW_GRID_LINES_VERTICAL && tree_view->priv->grid_lines != PSPP_SHEET_VIEW_GRID_LINES_BOTH) return; - gdk_drawable_get_size (event->window, NULL, &height); - /* Only draw the lines for visible rows and columns */ for (list = tree_view->priv->columns; list; list = list->next, i++) { PsppSheetViewColumn *column = list->data; - - /* We don't want a line for the last column */ - if (i == n_visible_columns - 1) - break; + gint x; if (! column->visible) continue; current_x += column->width; + /* Generally the grid lines should fit within the column, but for the + last visible column we put it just past the end of the column. + (Otherwise horizontal grid lines sometimes stick out by one pixel.) */ + x = current_x; + if (i != n_visible_columns - 1) + x--; + - if (x >= event->area.x && x < event->area.x + event->area.width) - gdk_draw_line (event->window, - tree_view->priv->grid_line_gc[GTK_WIDGET(tree_view)->state], - x, min_y, - x, max_y - min_y); + cairo_set_line_width (cr, 1.0); + cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE); - cairo_move_to (cr, current_x - 0.5, min_y); - cairo_line_to (cr, current_x - 0.5 , max_y - min_y); - ++ cairo_move_to (cr, x + 0.5, min_y); ++ cairo_line_to (cr, x + 0.5, max_y - min_y); + cairo_stroke (cr); } } @@@ -3861,7 -3796,7 +3864,7 @@@ */ static gboolean pspp_sheet_view_bin_expose (GtkWidget *widget, - GdkEventExpose *event) + cairo_t *cr) { PsppSheetView *tree_view = PSPP_SHEET_VIEW (widget); GtkTreePath *path; @@@ -3893,14 -3828,6 +3896,14 @@@ gboolean draw_vgrid_lines, draw_hgrid_lines; gint min_y, max_y; + GdkRectangle Zarea; + GtkAllocation allocation; + gtk_widget_get_allocation (widget, &allocation); + + Zarea.x = 0; + Zarea.y = 0; + Zarea.height = allocation.height; + rtl = (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL); gtk_widget_style_get (widget, @@@ -3913,36 -3840,31 +3916,36 @@@ if (tree_view->priv->row_count == 0) { - draw_empty_focus (tree_view, &event->area); + draw_empty_focus (tree_view); return TRUE; } +#if GTK3_TRANSITION /* clip event->area to the visible area */ - if (event->area.height < 0) + if (Zarea.height < 0.5) return TRUE; +#endif validate_visible_area (tree_view); - new_y = TREE_WINDOW_Y_TO_RBTREE_Y (tree_view, event->area.y); + new_y = TREE_WINDOW_Y_TO_RBTREE_Y (tree_view, Zarea.y); if (new_y < 0) new_y = 0; y_offset = -pspp_sheet_view_find_offset (tree_view, new_y, &node); - gdk_drawable_get_size (tree_view->priv->bin_window, - &bin_window_width, &bin_window_height); + bin_window_width = + gdk_window_get_width (tree_view->priv->bin_window); + + bin_window_height = + gdk_window_get_height (tree_view->priv->bin_window); + if (tree_view->priv->height < bin_window_height) { - gtk_paint_flat_box (widget->style, - event->window, - widget->state, + gtk_paint_flat_box (gtk_widget_get_style (widget), + cr, + gtk_widget_get_state (widget), GTK_SHADOW_NONE, - &event->area, widget, "cell_even", 0, tree_view->priv->height, @@@ -4024,7 -3946,7 +4027,7 @@@ cell_offset = 0; - background_area.y = y_offset + event->area.y; + background_area.y = y_offset + Zarea.y; background_area.height = max_height; max_y = background_area.y + max_height; @@@ -4075,14 -3997,12 +4078,14 @@@ else selected_column = TRUE; - if (cell_offset > event->area.x + event->area.width || - cell_offset + column->width < event->area.x) +#if GTK3_TRANSITION + if (cell_offset > Zarea.x + Zarea.width || + cell_offset + column->width < Zarea.x) { cell_offset += column->width; continue; } +#endif if (selected && selected_column) flags |= GTK_CELL_RENDERER_SELECTED; @@@ -4132,13 -4052,11 +4135,13 @@@ cell_area.height -= grid_line_width; } +#if GTK3_TRANSITION if (gdk_region_rect_in (event->region, &background_area) == GDK_OVERLAP_RECTANGLE_OUT) { cell_offset += column->width; continue; } +#endif pspp_sheet_view_column_cell_set_cell_data (column, tree_view->priv->model, @@@ -4187,7 -4105,7 +4190,7 @@@ g_assert (detail); - if (widget->state == GTK_STATE_INSENSITIVE) + if (gtk_widget_get_state (widget) == GTK_STATE_INSENSITIVE) state = GTK_STATE_INSENSITIVE; else if (flags & GTK_CELL_RENDERER_SELECTED) state = GTK_STATE_SELECTED; @@@ -4214,10 -4132,11 +4217,10 @@@ else g_snprintf (new_detail, 128, "%s_middle", detail); - gtk_paint_flat_box (widget->style, - event->window, + gtk_paint_flat_box (gtk_widget_get_style (widget), + cr, state, GTK_SHADOW_NONE, - &event->area, widget, new_detail, background_area.x, @@@ -4227,10 -4146,11 +4230,10 @@@ } else { - gtk_paint_flat_box (widget->style, - event->window, + gtk_paint_flat_box (gtk_widget_get_style (widget), + cr, state, GTK_SHADOW_NONE, - &event->area, widget, detail, background_area.x, @@@ -4241,46 -4161,26 +4244,46 @@@ if (draw_hgrid_lines) { - if (background_area.y > 0) - gdk_draw_line (event->window, - tree_view->priv->grid_line_gc[widget->state], - background_area.x, background_area.y, - background_area.x + background_area.width, - background_area.y); - - if (y_offset + max_height <= event->area.height) - gdk_draw_line (event->window, - tree_view->priv->grid_line_gc[widget->state], - background_area.x, background_area.y + max_height, - background_area.x + background_area.width, - background_area.y + max_height); + cairo_set_line_width (cr, 1.0); + cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE); + + if (background_area.y >= 0) + { +#if GTK3_TRANSITION + gdk_draw_line (event->window, + tree_view->priv->grid_line_gc[widget->state], + background_area.x, background_area.y, + background_area.x + background_area.width, + background_area.y); +#else + cairo_move_to (cr, background_area.x, background_area.y - 0.5); + cairo_line_to (cr, background_area.x + background_area.width, + background_area.y - 0.5); +#endif + } + - if (y_offset + max_height >= Zarea.height - 0.5) ++ if (y_offset + max_height <= Zarea.height - 0.5) + { +#if GTK3_TRANSITION + gdk_draw_line (event->window, + tree_view->priv->grid_line_gc[widget->state], + background_area.x, background_area.y + max_height, + background_area.x + background_area.width, + background_area.y + max_height); +#else + + cairo_move_to (cr, background_area.x, background_area.y + max_height - 0.5); + cairo_line_to (cr, background_area.x + background_area.width, + background_area.y + max_height - 0.5); +#endif + } + cairo_stroke (cr); } _pspp_sheet_view_column_cell_render (column, - event->window, + cr, &background_area, &cell_area, - &event->area, flags); if (node == cursor && has_special_cell && @@@ -4290,26 -4190,28 +4293,26 @@@ (column == tree_view->priv->edited_column))) { _pspp_sheet_view_column_cell_draw_focus (column, - event->window, + cr, &background_area, &cell_area, - &event->area, flags); } cell_offset += column->width; } - if (cell_offset < event->area.x) + if (cell_offset < Zarea.x) { - gtk_paint_flat_box (widget->style, - event->window, + gtk_paint_flat_box (gtk_widget_get_style (widget), + cr, GTK_STATE_NORMAL, GTK_SHADOW_NONE, - &event->area, widget, "base", cell_offset, background_area.y, - event->area.x - cell_offset, + Zarea.x - cell_offset, background_area.height); } @@@ -4339,12 -4241,14 +4342,12 @@@ if (node < 0) break; - gdk_drawable_get_size (tree_view->priv->bin_window, - &width, NULL); + width = gdk_window_get_width (tree_view->priv->bin_window); if (row_ending_details) - gtk_paint_focus (widget->style, - tree_view->priv->bin_window, + gtk_paint_focus (gtk_widget_get_style (widget), + cr, gtk_widget_get_state (widget), - &event->area, widget, (is_first ? (is_last ? "treeview-drop-indicator" : "treeview-drop-indicator-left" ) @@@ -4354,9 -4258,10 +4357,9 @@@ width, ROW_HEIGHT (tree_view) - focus_line_width + 1); else - gtk_paint_focus (widget->style, - tree_view->priv->bin_window, + gtk_paint_focus (gtk_widget_get_style (widget), + cr, gtk_widget_get_state (widget), - &event->area, widget, "treeview-drop-indicator", 0, BACKGROUND_FIRST_PIXEL (tree_view, node) @@@ -4366,7 -4271,6 +4369,7 @@@ break; } +#if GTK3_TRANSITION if (highlight_y >= 0) { gdk_draw_line (event->window, @@@ -4376,7 -4280,6 +4379,7 @@@ rtl ? 0 : bin_window_width, highlight_y); } +#endif } /* draw the big row-spanning focus rectangle, if needed */ @@@ -4394,7 -4297,8 +4397,7 @@@ (flags & GTK_CELL_RENDERER_INSENSITIVE ? GTK_STATE_INSENSITIVE : GTK_STATE_NORMAL)); - gdk_drawable_get_size (tree_view->priv->bin_window, - &width, NULL); + width = gdk_window_get_width (tree_view->priv->bin_window); if (draw_hgrid_lines) { @@@ -4408,9 -4312,10 +4411,9 @@@ } if (row_ending_details) - gtk_paint_focus (widget->style, - tree_view->priv->bin_window, + gtk_paint_focus (gtk_widget_get_style (widget), + cr, focus_rect_state, - &event->area, widget, (is_first ? (is_last ? "treeview" : "treeview-left" ) @@@ -4418,9 -4323,10 +4421,9 @@@ 0, tmp_y, width, tmp_height); else - gtk_paint_focus (widget->style, - tree_view->priv->bin_window, + gtk_paint_focus (gtk_widget_get_style (widget), + cr, focus_rect_state, - &event->area, widget, "treeview", 0, tmp_y, @@@ -4445,13 -4351,12 +4448,13 @@@ } while (!done); } - while (y_offset < event->area.height); + while (y_offset < Zarea.height); done: - pspp_sheet_view_draw_grid_lines (tree_view, event, n_visible_columns, + pspp_sheet_view_draw_vertical_grid_lines (tree_view, cr, n_visible_columns, min_y, max_y); +#if GTK3_TRANSITION if (tree_view->priv->rubber_band_status == RUBBER_BAND_ACTIVE) { GdkRectangle *rectangles; @@@ -4466,7 -4371,6 +4469,7 @@@ g_free (rectangles); } +#endif if (cursor_path) gtk_tree_path_free (cursor_path); @@@ -4477,24 -4381,18 +4480,24 @@@ return FALSE; } + static gboolean -pspp_sheet_view_expose (GtkWidget *widget, - GdkEventExpose *event) +pspp_sheet_view_draw (GtkWidget *widget, + cairo_t *cr) { PsppSheetView *tree_view = PSPP_SHEET_VIEW (widget); - - if (event->window == tree_view->priv->bin_window) + GtkAllocation allocation; + gtk_widget_get_allocation (widget, &allocation); + + if (gtk_cairo_should_draw_window (cr, tree_view->priv->bin_window)) { gboolean retval; GList *tmp_list; - retval = pspp_sheet_view_bin_expose (widget, event); + cairo_save (cr); + cairo_translate (cr, 0, gdk_window_get_height (tree_view->priv->header_window)); + retval = pspp_sheet_view_bin_expose (widget, cr); + cairo_restore (cr); /* We can't just chain up to Container::expose as it will try to send the * event to the headers, so we handle propagating it to our children @@@ -4506,27 -4404,28 +4509,27 @@@ PsppSheetViewChild *child = tmp_list->data; tmp_list = tmp_list->next; - gtk_container_propagate_expose (GTK_CONTAINER (tree_view), child->widget, event); + gtk_container_propagate_draw (GTK_CONTAINER (tree_view), child->widget, cr); } return retval; } - - else if (event->window == tree_view->priv->header_window) + else if (gtk_cairo_should_draw_window (cr, tree_view->priv->header_window)) { gint n_visible_columns; GList *list; - gtk_paint_flat_box (widget->style, - event->window, + gtk_paint_flat_box (gtk_widget_get_style (widget), + cr, GTK_STATE_NORMAL, GTK_SHADOW_NONE, - &event->area, widget, "cell_odd", - event->area.x, - event->area.y, - event->area.width, - event->area.height); + allocation.x, + allocation.y, + allocation.width, + allocation.height + ); for (list = tree_view->priv->columns; list != NULL; list = list->next) { @@@ -4536,10 -4435,10 +4539,10 @@@ continue; if (span_intersects (column->allocation.x, column->allocation.width, - event->area.x, event->area.width) + allocation.x, allocation.width) && column->button != NULL) - gtk_container_propagate_expose (GTK_CONTAINER (tree_view), - column->button, event); + gtk_container_propagate_draw (GTK_CONTAINER (tree_view), + column->button, cr); } n_visible_columns = 0; @@@ -4549,24 -4448,19 +4552,24 @@@ continue; n_visible_columns ++; } - pspp_sheet_view_draw_grid_lines (tree_view, - event, - n_visible_columns, - event->area.y, - event->area.height); + pspp_sheet_view_draw_vertical_grid_lines (tree_view, + cr, + n_visible_columns, + allocation.y, + allocation.height); + + return TRUE; } - else if (event->window == tree_view->priv->drag_window) + else if (gtk_cairo_should_draw_window (cr, tree_view->priv->drag_window)) { - gtk_container_propagate_expose (GTK_CONTAINER (tree_view), - tree_view->priv->drag_column->button, - event); + gtk_container_propagate_draw (GTK_CONTAINER (tree_view), + tree_view->priv->drag_column->button, + cr); + + return TRUE; } - return TRUE; + + return FALSE; } enum @@@ -4968,7 -4862,7 +4971,7 @@@ pspp_sheet_view_key_press (GtkWidget old_text = g_strdup (gtk_entry_get_text (GTK_ENTRY (tree_view->priv->search_entry))); new_event = gdk_event_copy ((GdkEvent *) event); g_object_unref (((GdkEventKey *) new_event)->window); - ((GdkEventKey *) new_event)->window = g_object_ref (tree_view->priv->search_window->window); + ((GdkEventKey *) new_event)->window = g_object_ref (gtk_widget_get_window (tree_view->priv->search_window)); gtk_widget_realize (tree_view->priv->search_window); popup_menu_id = g_signal_connect (tree_view->priv->search_entry, @@@ -5119,16 -5013,15 +5122,16 @@@ static voi pspp_sheet_view_node_queue_redraw (PsppSheetView *tree_view, int node) { - gint y; - - y = pspp_sheet_view_node_find_offset (tree_view, node) - - tree_view->priv->vadjustment->value + GtkAllocation allocation; + gint y = pspp_sheet_view_node_find_offset (tree_view, node) + - gtk_adjustment_get_value (tree_view->priv->vadjustment) + TREE_VIEW_HEADER_HEIGHT (tree_view); + gtk_widget_get_allocation (GTK_WIDGET (tree_view), &allocation); + gtk_widget_queue_draw_area (GTK_WIDGET (tree_view), 0, y, - GTK_WIDGET (tree_view)->allocation.width, + allocation.width, tree_view->priv->fixed_height); } @@@ -5142,9 -5035,9 +5145,9 @@@ node_is_visible (PsppSheetView *tree_vi y = pspp_sheet_view_node_find_offset (tree_view, node); height = ROW_HEIGHT (tree_view); - if (y >= tree_view->priv->vadjustment->value && - y + height <= (tree_view->priv->vadjustment->value - + tree_view->priv->vadjustment->page_size)) + if (y >= gtk_adjustment_get_value (tree_view->priv->vadjustment) && + y + height <= (gtk_adjustment_get_value (tree_view->priv->vadjustment) + + gtk_adjustment_get_page_size (tree_view->priv->vadjustment))) return TRUE; return FALSE; @@@ -5247,7 -5140,6 +5250,7 @@@ validate_visible_area (PsppSheetView *t gint total_height; gint area_above = 0; gint area_below = 0; + GtkAllocation allocation; if (tree_view->priv->row_count == 0) return; @@@ -5255,9 -5147,7 +5258,9 @@@ if (tree_view->priv->scroll_to_path == NULL) return; - total_height = GTK_WIDGET (tree_view)->allocation.height - TREE_VIEW_HEADER_HEIGHT (tree_view); + gtk_widget_get_allocation (GTK_WIDGET (tree_view), &allocation); + + total_height = allocation.height - TREE_VIEW_HEADER_HEIGHT (tree_view); if (total_height == 0) return; @@@ -5289,39 -5179,39 +5292,39 @@@ dy = pspp_sheet_view_node_find_offset (tree_view, node); - if (dy >= tree_view->priv->vadjustment->value && - dy + height <= (tree_view->priv->vadjustment->value - + tree_view->priv->vadjustment->page_size)) + if (dy >= gtk_adjustment_get_value (tree_view->priv->vadjustment) && + dy + height <= (gtk_adjustment_get_value (tree_view->priv->vadjustment) + + gtk_adjustment_get_page_size (tree_view->priv->vadjustment))) { /* row visible: keep the row at the same position */ - area_above = dy - tree_view->priv->vadjustment->value; - area_below = (tree_view->priv->vadjustment->value + - tree_view->priv->vadjustment->page_size) + area_above = dy - gtk_adjustment_get_value (tree_view->priv->vadjustment); + area_below = (gtk_adjustment_get_value (tree_view->priv->vadjustment) + + gtk_adjustment_get_page_size (tree_view->priv->vadjustment)) - dy - height; } else { /* row not visible */ if (dy >= 0 - && dy + height <= tree_view->priv->vadjustment->page_size) + && dy + height <= gtk_adjustment_get_page_size (tree_view->priv->vadjustment)) { /* row at the beginning -- fixed */ area_above = dy; - area_below = tree_view->priv->vadjustment->page_size + area_below = gtk_adjustment_get_page_size (tree_view->priv->vadjustment) - area_above - height; } - else if (dy >= (tree_view->priv->vadjustment->upper - - tree_view->priv->vadjustment->page_size)) + else if (dy >= (gtk_adjustment_get_upper (tree_view->priv->vadjustment) - + gtk_adjustment_get_page_size (tree_view->priv->vadjustment))) { /* row at the end -- fixed */ - area_above = dy - (tree_view->priv->vadjustment->upper - - tree_view->priv->vadjustment->page_size); - area_below = tree_view->priv->vadjustment->page_size - + area_above = dy - (gtk_adjustment_get_upper (tree_view->priv->vadjustment) - + gtk_adjustment_get_page_size (tree_view->priv->vadjustment)); + area_below = gtk_adjustment_get_page_size (tree_view->priv->vadjustment) - area_above - height; if (area_below < 0) { - area_above = tree_view->priv->vadjustment->page_size - height; + area_above = gtk_adjustment_get_page_size (tree_view->priv->vadjustment) - height; area_below = 0; } } @@@ -5427,8 -5317,8 +5430,8 @@@ * in an inconsistent state if we call top_row_to_dy. */ gtk_widget_size_request (GTK_WIDGET (tree_view), &requisition); - tree_view->priv->hadjustment->upper = MAX (tree_view->priv->hadjustment->upper, (gfloat)requisition.width); - tree_view->priv->vadjustment->upper = MAX (tree_view->priv->vadjustment->upper, (gfloat)requisition.height); + gtk_adjustment_set_upper (tree_view->priv->hadjustment, MAX (gtk_adjustment_get_upper (tree_view->priv->hadjustment), (gfloat)requisition.width)); + gtk_adjustment_set_upper (tree_view->priv->vadjustment, MAX (gtk_adjustment_get_upper (tree_view->priv->vadjustment), (gfloat)requisition.height)); gtk_adjustment_changed (tree_view->priv->hadjustment); gtk_adjustment_changed (tree_view->priv->vadjustment); gtk_widget_queue_resize (GTK_WIDGET (tree_view)); @@@ -5506,8 -5396,8 +5509,8 @@@ do_presize_handler (PsppSheetView *tree gtk_widget_size_request (GTK_WIDGET (tree_view), &requisition); - tree_view->priv->hadjustment->upper = MAX (tree_view->priv->hadjustment->upper, (gfloat)requisition.width); - tree_view->priv->vadjustment->upper = MAX (tree_view->priv->vadjustment->upper, (gfloat)requisition.height); + gtk_adjustment_set_upper (tree_view->priv->hadjustment, MAX (gtk_adjustment_get_upper (tree_view->priv->hadjustment), (gfloat)requisition.width)); + gtk_adjustment_set_upper (tree_view->priv->vadjustment, MAX (gtk_adjustment_get_upper (tree_view->priv->vadjustment), (gfloat)requisition.height)); gtk_adjustment_changed (tree_view->priv->hadjustment); gtk_adjustment_changed (tree_view->priv->vadjustment); gtk_widget_queue_resize (GTK_WIDGET (tree_view)); @@@ -5544,7 -5434,7 +5547,7 @@@ install_presize_handler (PsppSheetView static gboolean scroll_sync_handler (PsppSheetView *tree_view) { - if (tree_view->priv->height <= tree_view->priv->vadjustment->page_size) + if (tree_view->priv->height <= gtk_adjustment_get_page_size (tree_view->priv->vadjustment)) gtk_adjustment_set_value (GTK_ADJUSTMENT (tree_view->priv->vadjustment), 0); else if (gtk_tree_row_reference_valid (tree_view->priv->top_row)) pspp_sheet_view_top_row_to_dy (tree_view); @@@ -5666,8 -5556,8 +5669,8 @@@ pspp_sheet_view_top_row_to_dy (PsppShee new_dy = pspp_sheet_view_node_find_offset (tree_view, node); new_dy += tree_view->priv->top_row_dy; - if (new_dy + tree_view->priv->vadjustment->page_size > tree_view->priv->height) - new_dy = tree_view->priv->height - tree_view->priv->vadjustment->page_size; + if (new_dy + gtk_adjustment_get_page_size (tree_view->priv->vadjustment) > tree_view->priv->height) + new_dy = tree_view->priv->height - gtk_adjustment_get_page_size (tree_view->priv->vadjustment); new_dy = MAX (0, new_dy); @@@ -6054,7 -5944,7 +6057,7 @@@ out { GtkWidget *source_widget; - *suggested_action = context->suggested_action; + *suggested_action = gdk_drag_context_get_suggested_action (context); source_widget = gtk_drag_get_source_widget (context); if (source_widget == widget) @@@ -6062,7 -5952,7 +6065,7 @@@ /* Default to MOVE, unless the user has * pressed ctrl or shift to affect available actions */ - if ((context->actions & GDK_ACTION_MOVE) != 0) + if ((gdk_drag_context_get_actions (context) & GDK_ACTION_MOVE) != 0) *suggested_action = GDK_ACTION_MOVE; } @@@ -6202,12 -6092,10 +6205,12 @@@ pspp_sheet_view_maybe_begin_dragging_ro } + static void pspp_sheet_view_drag_begin (GtkWidget *widget, GdkDragContext *context) { +#if GTK3_TRANSITION PsppSheetView *tree_view; GtkTreePath *path = NULL; gint cell_x, cell_y; @@@ -6245,10 -6133,8 +6248,10 @@@ g_object_unref (row_pix); gtk_tree_path_free (path); +#endif } + static void pspp_sheet_view_drag_end (GtkWidget *widget, GdkDragContext *context) @@@ -6298,7 -6184,7 +6301,7 @@@ pspp_sheet_view_drag_data_get (GtkWidge goto done; /* If drag_data_get does nothing, try providing row data. */ - if (selection_data->target == gdk_atom_intern_static_string ("GTK_TREE_MODEL_ROW")) + if (gtk_selection_data_get_target (selection_data) == gdk_atom_intern_static_string ("GTK_TREE_MODEL_ROW")) { gtk_tree_set_row_drag_data (selection_data, model, @@@ -6575,7 -6461,7 +6578,7 @@@ pspp_sheet_view_drag_data_received (Gtk if (dest_row == NULL) return; - if (selection_data->length >= 0) + if (gtk_selection_data_get_length (selection_data) >= 0) { if (path_down_mode) { @@@ -6586,7 -6472,7 +6589,7 @@@ } } - if (selection_data->length >= 0) + if (gtk_selection_data_get_length (selection_data) >= 0) { if (gtk_tree_drag_dest_drag_data_received (GTK_TREE_DRAG_DEST (model), dest_row, @@@ -6596,7 -6482,7 +6599,7 @@@ gtk_drag_finish (context, accepted, - (context->action == GDK_ACTION_MOVE), + (gdk_drag_context_get_actions (context) == GDK_ACTION_MOVE), time); if (gtk_tree_path_get_depth (dest_row) == 1 @@@ -6728,7 -6614,7 +6731,7 @@@ pspp_sheet_view_focus_column (PsppSheet return; } - if (GTK_CONTAINER (tree_view)->focus_child != focus_column->button) + if (gtk_container_get_focus_child (GTK_CONTAINER (tree_view)) != focus_column->button) gtk_widget_grab_focus (focus_column->button); if (clamp_column_visible) @@@ -6752,7 -6638,7 +6755,7 @@@ pspp_sheet_view_header_focus (PsppSheet if (! PSPP_SHEET_VIEW_FLAG_SET (tree_view, PSPP_SHEET_VIEW_HEADERS_VISIBLE)) return FALSE; - focus_child = GTK_CONTAINER (tree_view)->focus_child; + focus_child = gtk_container_get_focus_child (GTK_CONTAINER (tree_view)); first_column = tree_view->priv->columns; while (first_column) @@@ -6915,7 -6801,7 +6918,7 @@@ pspp_sheet_view_focus (GtkWidge if (!gtk_widget_is_sensitive (widget) || !gtk_widget_get_can_focus (widget)) return FALSE; - focus_child = container->focus_child; + focus_child = gtk_container_get_focus_child (container); pspp_sheet_view_stop_editing (PSPP_SHEET_VIEW (widget), FALSE); /* Case 1. Headers currently have focus. */ @@@ -6977,8 -6863,19 +6980,8 @@@ pspp_sheet_view_style_set (GtkWidget *w if (gtk_widget_get_realized (widget)) { - gint i; - PsppSheetViewPrivate *priv = PSPP_SHEET_VIEW (widget)->priv; - - gdk_window_set_back_pixmap (widget->window, NULL, FALSE); - gdk_window_set_background (tree_view->priv->bin_window, &widget->style->base[widget->state]); - gtk_style_set_background (widget->style, tree_view->priv->header_window, GTK_STATE_NORMAL); - for (i = 0; i < 5 ; ++i) - { - g_object_unref (priv->grid_line_gc[i]); - priv->grid_line_gc[i] = gdk_gc_new (widget->window); - gdk_gc_copy (priv->grid_line_gc[i], widget->style->text_aa_gc[i]); - } - + gdk_window_set_background (tree_view->priv->bin_window, >k_widget_get_style (widget)->base[gtk_widget_get_state (widget)]); + gtk_style_set_background (gtk_widget_get_style (widget), tree_view->priv->header_window, GTK_STATE_NORMAL); pspp_sheet_view_set_grid_lines (tree_view, tree_view->priv->grid_lines); } @@@ -7464,9 -7361,9 +7467,9 @@@ pspp_sheet_view_clamp_node_visible (Psp /* just return if the node is visible, avoiding a costly expose */ node_dy = pspp_sheet_view_node_find_offset (tree_view, node); height = ROW_HEIGHT (tree_view); - if (node_dy >= tree_view->priv->vadjustment->value - && node_dy + height <= (tree_view->priv->vadjustment->value - + tree_view->priv->vadjustment->page_size)) + if (node_dy >= gtk_adjustment_get_value (tree_view->priv->vadjustment) + && node_dy + height <= (gtk_adjustment_get_value (tree_view->priv->vadjustment) + + gtk_adjustment_get_page_size (tree_view->priv->vadjustment))) return; path = _pspp_sheet_view_find_path (tree_view, node); @@@ -7493,7 -7390,7 +7496,7 @@@ pspp_sheet_view_clamp_column_visible (P x = column->allocation.x; width = column->allocation.width; - if (width > tree_view->priv->hadjustment->page_size) + if (width > gtk_adjustment_get_page_size (tree_view->priv->hadjustment)) { /* The column is larger than the horizontal page size. If the * column has cells which can be focussed individually, then we make @@@ -7528,28 -7425,28 +7531,28 @@@ x = focus_area.x; width = focus_area.width; - if (width < tree_view->priv->hadjustment->page_size) + if (width < gtk_adjustment_get_page_size (tree_view->priv->hadjustment)) { - if ((tree_view->priv->hadjustment->value + tree_view->priv->hadjustment->page_size) < (x + width)) + if ((gtk_adjustment_get_value (tree_view->priv->hadjustment) + gtk_adjustment_get_page_size (tree_view->priv->hadjustment)) < (x + width)) gtk_adjustment_set_value (tree_view->priv->hadjustment, - x + width - tree_view->priv->hadjustment->page_size); - else if (tree_view->priv->hadjustment->value > x) + x + width - gtk_adjustment_get_page_size (tree_view->priv->hadjustment)); + else if (gtk_adjustment_get_value (tree_view->priv->hadjustment) > x) gtk_adjustment_set_value (tree_view->priv->hadjustment, x); } } gtk_adjustment_set_value (tree_view->priv->hadjustment, CLAMP (x, - tree_view->priv->hadjustment->lower, - tree_view->priv->hadjustment->upper - - tree_view->priv->hadjustment->page_size)); + gtk_adjustment_get_lower (tree_view->priv->hadjustment), + gtk_adjustment_get_upper (tree_view->priv->hadjustment) + - gtk_adjustment_get_page_size (tree_view->priv->hadjustment))); } else { - if ((tree_view->priv->hadjustment->value + tree_view->priv->hadjustment->page_size) < (x + width)) + if ((gtk_adjustment_get_value (tree_view->priv->hadjustment) + gtk_adjustment_get_page_size (tree_view->priv->hadjustment)) < (x + width)) gtk_adjustment_set_value (tree_view->priv->hadjustment, - x + width - tree_view->priv->hadjustment->page_size); - else if (tree_view->priv->hadjustment->value > x) + x + width - gtk_adjustment_get_page_size (tree_view->priv->hadjustment)); + else if (gtk_adjustment_get_value (tree_view->priv->hadjustment) > x) gtk_adjustment_set_value (tree_view->priv->hadjustment, x); } } @@@ -7707,7 -7604,9 +7710,7 @@@ pspp_sheet_view_set_column_drag_info (P } else { - gint width; - - gdk_drawable_get_size (tree_view->priv->header_window, &width, NULL); + gint width = gdk_window_get_width (tree_view->priv->header_window); reorder->right_align = width + TREE_VIEW_COLUMN_DRAG_DEAD_MULTIPLIER (tree_view); } } @@@ -7719,7 -7618,7 +7722,7 @@@ _pspp_sheet_view_column_start_drag (Psp { GdkEvent *send_event; GtkAllocation allocation; - gint x, y, width, height; + gint x, y; GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (tree_view)); GdkDisplay *display = gdk_screen_get_display (screen); @@@ -7744,8 -7643,9 +7747,8 @@@ attributes.width = column->allocation.width; attributes.height = column->allocation.height; attributes.visual = gtk_widget_get_visual (GTK_WIDGET (tree_view)); - attributes.colormap = gtk_widget_get_colormap (GTK_WIDGET (tree_view)); attributes.event_mask = GDK_VISIBILITY_NOTIFY_MASK | GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK; - attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; + attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL ; tree_view->priv->drag_window = gdk_window_new (tree_view->priv->bin_window, &attributes, @@@ -7760,7 -7660,7 +7763,7 @@@ send_event = gdk_event_new (GDK_LEAVE_NOTIFY); send_event->crossing.send_event = TRUE; - send_event->crossing.window = g_object_ref (GTK_BUTTON (column->button)->event_window); + send_event->crossing.window = g_object_ref (gtk_button_get_event_window (GTK_BUTTON (column->button))); send_event->crossing.subwindow = NULL; send_event->crossing.detail = GDK_NOTIFY_ANCESTOR; send_event->crossing.time = GDK_CURRENT_TIME; @@@ -7777,9 -7677,7 +7780,9 @@@ send_event->button.axes = NULL; send_event->button.state = 0; send_event->button.button = 1; - send_event->button.device = gdk_display_get_core_pointer (display); + send_event->button.device = + gdk_device_manager_get_client_pointer (gdk_display_get_device_manager (display)); + send_event->button.x_root = 0; send_event->button.y_root = 0; @@@ -7803,6 -7701,7 +7806,6 @@@ gdk_window_show (tree_view->priv->drag_window); gdk_window_get_origin (tree_view->priv->header_window, &x, &y); - gdk_drawable_get_size (tree_view->priv->header_window, &width, &height); gtk_widget_grab_focus (GTK_WIDGET (tree_view)); while (gtk_events_pending ()) @@@ -7824,14 -7723,12 +7827,14 @@@ _pspp_sheet_view_queue_draw_node (PsppS const GdkRectangle *clip_rect) { GdkRectangle rect; + GtkAllocation allocation; if (!gtk_widget_get_realized (GTK_WIDGET (tree_view))) return; + gtk_widget_get_allocation (GTK_WIDGET (tree_view), &allocation); rect.x = 0; - rect.width = MAX (tree_view->priv->width, GTK_WIDGET (tree_view)->allocation.width); + rect.width = MAX (tree_view->priv->width, allocation.width); rect.y = BACKGROUND_FIRST_PIXEL (tree_view, node); rect.height = ROW_HEIGHT (tree_view); @@@ -8097,8 -7994,8 +8100,8 @@@ pspp_sheet_view_move_cursor_page_up_dow y = pspp_sheet_view_node_find_offset (tree_view, cursor_node); window_y = RBTREE_Y_TO_TREE_WINDOW_Y (tree_view, y); y += tree_view->priv->cursor_offset; - y += count * (int)tree_view->priv->vadjustment->page_increment; - y = CLAMP (y, (gint)tree_view->priv->vadjustment->lower, (gint)tree_view->priv->vadjustment->upper - vertical_separator); + y += count * (int)gtk_adjustment_get_page_increment (tree_view->priv->vadjustment); + y = CLAMP (y, (gint)gtk_adjustment_get_lower (tree_view->priv->vadjustment), (gint)gtk_adjustment_get_upper (tree_view->priv->vadjustment) - vertical_separator); if (y >= tree_view->priv->height) y = tree_view->priv->height - 1; @@@ -8658,11 -8555,22 +8661,11 @@@ send_focus_change (GtkWidget *widget { GdkEvent *fevent = gdk_event_new (GDK_FOCUS_CHANGE); - g_object_ref (widget); - - if (in) - GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS); - else - GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS); - fevent->focus_change.type = GDK_FOCUS_CHANGE; - fevent->focus_change.window = g_object_ref (widget->window); + fevent->focus_change.window = g_object_ref (gtk_widget_get_window (widget)); fevent->focus_change.in = in; - gtk_widget_event (widget, fevent); - - g_object_notify (G_OBJECT (widget), "has-focus"); - - g_object_unref (widget); + gtk_widget_send_focus_change (widget, fevent); gdk_event_free (fevent); } @@@ -8680,11 -8588,11 +8683,11 @@@ pspp_sheet_view_ensure_interactive_dire if (tree_view->priv->search_window != NULL) { - if (GTK_WINDOW (toplevel)->group) - gtk_window_group_add_window (GTK_WINDOW (toplevel)->group, + if (gtk_window_get_group (GTK_WINDOW (toplevel))) + gtk_window_group_add_window (gtk_window_get_group (GTK_WINDOW (toplevel)), GTK_WINDOW (tree_view->priv->search_window)); - else if (GTK_WINDOW (tree_view->priv->search_window)->group) - gtk_window_group_remove_window (GTK_WINDOW (tree_view->priv->search_window)->group, + else if (gtk_window_get_group (GTK_WINDOW (tree_view->priv->search_window))) + gtk_window_group_remove_window (gtk_window_get_group (GTK_WINDOW (tree_view->priv->search_window)), GTK_WINDOW (tree_view->priv->search_window)); gtk_window_set_screen (GTK_WINDOW (tree_view->priv->search_window), screen); return; @@@ -8693,8 -8601,8 +8696,8 @@@ tree_view->priv->search_window = gtk_window_new (GTK_WINDOW_POPUP); gtk_window_set_screen (GTK_WINDOW (tree_view->priv->search_window), screen); - if (GTK_WINDOW (toplevel)->group) - gtk_window_group_add_window (GTK_WINDOW (toplevel)->group, + if (gtk_window_get_group (GTK_WINDOW (toplevel))) + gtk_window_group_add_window (gtk_window_get_group (GTK_WINDOW (toplevel)), GTK_WINDOW (tree_view->priv->search_window)); gtk_window_set_type_hint (GTK_WINDOW (tree_view->priv->search_window), @@@ -8732,14 -8640,10 +8735,14 @@@ g_signal_connect (tree_view->priv->search_entry, "activate", G_CALLBACK (pspp_sheet_view_search_activate), tree_view); + +#if GTK3_TRANSITION g_signal_connect (GTK_ENTRY (tree_view->priv->search_entry)->im_context, "preedit-changed", G_CALLBACK (pspp_sheet_view_search_preedit_changed), tree_view); +#endif + gtk_container_add (GTK_CONTAINER (vbox), tree_view->priv->search_entry); @@@ -8850,7 -8754,7 +8853,7 @@@ pspp_sheet_view_new_column_width (PsppS gint width; gboolean rtl; - /* first translate the x position from widget->window + /* first translate the x position from gtk_widget_get_window (widget) * to clist->clist_window */ rtl = (gtk_widget_get_direction (GTK_WIDGET (tree_view)) == GTK_TEXT_DIR_RTL); @@@ -8882,19 -8786,18 +8885,19 @@@ typedef struc int dy; } ScrollData; -/* The window to which widget->window is relative */ +/* The window to which gtk_widget_get_window (widget) is relative */ #define ALLOCATION_WINDOW(widget) \ (!gtk_widget_get_has_window (widget) ? \ - (widget)->window : \ - gdk_window_get_parent ((widget)->window)) + gtk_widget_get_window (widget) : \ + gdk_window_get_parent (gtk_widget_get_window (widget))) static void adjust_allocation_recurse (GtkWidget *widget, gpointer data) { ScrollData *scroll_data = data; - + GtkAllocation allocation; + gtk_widget_get_allocation (widget, &allocation); /* Need to really size allocate instead of just poking * into widget->allocation if the widget is not realized. * FIXME someone figure out why this was. @@@ -8903,7 -8806,7 +8906,7 @@@ { if (gtk_widget_get_visible (widget)) { - GdkRectangle tmp_rectangle = widget->allocation; + GdkRectangle tmp_rectangle = allocation; tmp_rectangle.x += scroll_data->dx; tmp_rectangle.y += scroll_data->dy; @@@ -8914,8 -8817,8 +8917,8 @@@ { if (ALLOCATION_WINDOW (widget) == scroll_data->window) { - widget->allocation.x += scroll_data->dx; - widget->allocation.y += scroll_data->dy; + allocation.x += scroll_data->dx; + allocation.y += scroll_data->dy; if (GTK_IS_CONTAINER (widget)) gtk_container_forall (GTK_CONTAINER (widget), @@@ -8957,12 -8860,12 +8960,12 @@@ pspp_sheet_view_adjustment_changed (Gtk gint dy; gdk_window_move (tree_view->priv->bin_window, - - tree_view->priv->hadjustment->value, + - gtk_adjustment_get_value (tree_view->priv->hadjustment), TREE_VIEW_HEADER_HEIGHT (tree_view)); gdk_window_move (tree_view->priv->header_window, - - tree_view->priv->hadjustment->value, + - gtk_adjustment_get_value (tree_view->priv->hadjustment), 0); - dy = tree_view->priv->dy - (int) tree_view->priv->vadjustment->value; + dy = tree_view->priv->dy - (int) gtk_adjustment_get_value (tree_view->priv->vadjustment); if (dy) { update_prelight (tree_view, @@@ -8992,10 -8895,10 +8995,10 @@@ } gdk_window_scroll (tree_view->priv->bin_window, 0, dy); - if (tree_view->priv->dy != (int) tree_view->priv->vadjustment->value) + if (tree_view->priv->dy != (int) gtk_adjustment_get_value (tree_view->priv->vadjustment)) { /* update our dy and top_row */ - tree_view->priv->dy = (int) tree_view->priv->vadjustment->value; + tree_view->priv->dy = (int) gtk_adjustment_get_value (tree_view->priv->vadjustment); if (!tree_view->priv->in_top_row_to_dy) pspp_sheet_view_dy_to_top_row (tree_view); @@@ -9004,13 -8907,11 +9007,13 @@@ for (list = tree_view->priv->columns; list; list = list->next) { PsppSheetViewColumn *column = list->data; - GtkAllocation *allocation = &column->allocation; + GtkAllocation *col_allocation = &column->allocation; + GtkAllocation widget_allocation; + gtk_widget_get_allocation (GTK_WIDGET (tree_view), &widget_allocation); - if (span_intersects (allocation->x, allocation->width, - tree_view->priv->hadjustment->value, - GTK_WIDGET (tree_view)->allocation.width)) + if (span_intersects (col_allocation->x, col_allocation->width, + gtk_adjustment_get_value (tree_view->priv->hadjustment), + widget_allocation.width)) { pspp_sheet_view_column_set_need_button (column, TRUE); if (!column->button) @@@ -9229,12 -9130,9 +9232,12 @@@ pspp_sheet_view_get_hadjustment (PsppSh { g_return_val_if_fail (PSPP_IS_SHEET_VIEW (tree_view), NULL); - if (tree_view->priv->hadjustment == NULL) - pspp_sheet_view_set_hadjustment (tree_view, NULL); + return pspp_sheet_view_do_get_hadjustment (tree_view); +} +static GtkAdjustment * +pspp_sheet_view_do_get_hadjustment (PsppSheetView *tree_view) +{ return tree_view->priv->hadjustment; } @@@ -9258,60 -9156,23 +9261,60 @@@ pspp_sheet_view_set_hadjustment (PsppSh g_object_notify (G_OBJECT (tree_view), "hadjustment"); } +static void +pspp_sheet_view_do_set_hadjustment (PsppSheetView *tree_view, + GtkAdjustment *adjustment) +{ + PsppSheetViewPrivate *priv = tree_view->priv; + + if (adjustment && priv->hadjustment == adjustment) + return; + + if (priv->hadjustment != NULL) + { + g_signal_handlers_disconnect_by_func (priv->hadjustment, + pspp_sheet_view_adjustment_changed, + tree_view); + g_object_unref (priv->hadjustment); + } + + if (adjustment == NULL) + adjustment = gtk_adjustment_new (0.0, 0.0, 0.0, + 0.0, 0.0, 0.0); + + g_signal_connect (adjustment, "value-changed", + G_CALLBACK (pspp_sheet_view_adjustment_changed), tree_view); + priv->hadjustment = g_object_ref_sink (adjustment); + /* FIXME: Adjustment should probably be populated here with fresh values, but + * internal details are too complicated for me to decipher right now. + */ + pspp_sheet_view_adjustment_changed (NULL, tree_view); + + g_object_notify (G_OBJECT (tree_view), "hadjustment"); +} + /** * pspp_sheet_view_get_vadjustment: * @tree_view: A #PsppSheetView * * Gets the #GtkAdjustment currently being used for the vertical aspect. * - * Return value: A #GtkAdjustment object, or %NULL if none is currently being - * used. + * Return value: (transfer none): A #GtkAdjustment object, or %NULL + * if none is currently being used. + * + * Deprecated: 3.0: Use gtk_scrollable_get_vadjustment() **/ GtkAdjustment * pspp_sheet_view_get_vadjustment (PsppSheetView *tree_view) { g_return_val_if_fail (PSPP_IS_SHEET_VIEW (tree_view), NULL); - if (tree_view->priv->vadjustment == NULL) - pspp_sheet_view_set_vadjustment (tree_view, NULL); + return pspp_sheet_view_do_get_vadjustment (tree_view); +} +static GtkAdjustment * +pspp_sheet_view_do_get_vadjustment (PsppSheetView *tree_view) +{ return tree_view->priv->vadjustment; } @@@ -9321,47 -9182,17 +9324,47 @@@ * @adjustment: (allow-none): The #GtkAdjustment to set, or %NULL * * Sets the #GtkAdjustment for the current vertical aspect. + * + * Deprecated: 3.0: Use gtk_scrollable_set_vadjustment() **/ void pspp_sheet_view_set_vadjustment (PsppSheetView *tree_view, - GtkAdjustment *adjustment) + GtkAdjustment *adjustment) { g_return_if_fail (PSPP_IS_SHEET_VIEW (tree_view)); + g_return_if_fail (adjustment == NULL || GTK_IS_ADJUSTMENT (adjustment)); - pspp_sheet_view_set_adjustments (tree_view, - tree_view->priv->hadjustment, - adjustment); + pspp_sheet_view_do_set_vadjustment (tree_view, adjustment); +} + +static void +pspp_sheet_view_do_set_vadjustment (PsppSheetView *tree_view, + GtkAdjustment *adjustment) +{ + PsppSheetViewPrivate *priv = tree_view->priv; + if (adjustment && priv->vadjustment == adjustment) + return; + + if (priv->vadjustment != NULL) + { + g_signal_handlers_disconnect_by_func (priv->vadjustment, + pspp_sheet_view_adjustment_changed, + tree_view); + g_object_unref (priv->vadjustment); + } + + if (adjustment == NULL) + adjustment = gtk_adjustment_new (0.0, 0.0, 0.0, + 0.0, 0.0, 0.0); + + g_signal_connect (adjustment, "value-changed", + G_CALLBACK (pspp_sheet_view_adjustment_changed), tree_view); + priv->vadjustment = g_object_ref_sink (adjustment); + /* FIXME: Adjustment should probably be populated here with fresh values, but + * internal details are too complicated for me to decipher right now. + */ + pspp_sheet_view_adjustment_changed (NULL, tree_view); g_object_notify (G_OBJECT (tree_view), "vadjustment"); } @@@ -9397,12 -9228,9 +9400,12 @@@ pspp_sheet_view_set_headers_visible (Ps gint x, y; GList *list; PsppSheetViewColumn *column; + GtkAllocation allocation; g_return_if_fail (PSPP_IS_SHEET_VIEW (tree_view)); + gtk_widget_get_allocation (GTK_WIDGET (tree_view), &allocation); + headers_visible = !! headers_visible; if (PSPP_SHEET_VIEW_FLAG_SET (tree_view, PSPP_SHEET_VIEW_HEADERS_VISIBLE) == headers_visible) @@@ -9418,8 -9246,7 +9421,8 @@@ gdk_window_get_position (tree_view->priv->bin_window, &x, &y); if (headers_visible) { - gdk_window_move_resize (tree_view->priv->bin_window, x, y + TREE_VIEW_HEADER_HEIGHT (tree_view), tree_view->priv->width, GTK_WIDGET (tree_view)->allocation.height - + TREE_VIEW_HEADER_HEIGHT (tree_view)); + gdk_window_move_resize (tree_view->priv->bin_window, x, y + TREE_VIEW_HEADER_HEIGHT (tree_view), + tree_view->priv->width, allocation.height - + TREE_VIEW_HEADER_HEIGHT (tree_view)); if (gtk_widget_get_mapped (GTK_WIDGET (tree_view))) pspp_sheet_view_map_buttons (tree_view); @@@ -9438,10 -9265,10 +9441,10 @@@ } } - tree_view->priv->vadjustment->page_size = GTK_WIDGET (tree_view)->allocation.height - TREE_VIEW_HEADER_HEIGHT (tree_view); - tree_view->priv->vadjustment->page_increment = (GTK_WIDGET (tree_view)->allocation.height - TREE_VIEW_HEADER_HEIGHT (tree_view)) / 2; - tree_view->priv->vadjustment->lower = 0; - tree_view->priv->vadjustment->upper = tree_view->priv->height; + gtk_adjustment_set_page_size (tree_view->priv->vadjustment, allocation.height - TREE_VIEW_HEADER_HEIGHT (tree_view)); + gtk_adjustment_set_page_increment (tree_view->priv->vadjustment, (allocation.height - TREE_VIEW_HEADER_HEIGHT (tree_view)) / 2); + gtk_adjustment_set_lower (tree_view->priv->vadjustment, 0); + gtk_adjustment_set_upper (tree_view->priv->vadjustment, tree_view->priv->height); gtk_adjustment_changed (tree_view->priv->vadjustment); gtk_widget_queue_resize (GTK_WIDGET (tree_view)); @@@ -9965,9 -9792,9 +9968,9 @@@ pspp_sheet_view_scroll_to_point (PsppSh vadj = tree_view->priv->vadjustment; if (tree_x != -1) - gtk_adjustment_set_value (hadj, CLAMP (tree_x, hadj->lower, hadj->upper - hadj->page_size)); + gtk_adjustment_set_value (hadj, CLAMP (tree_x, gtk_adjustment_get_lower (hadj), gtk_adjustment_get_upper (hadj) - gtk_adjustment_get_page_size (hadj))); if (tree_y != -1) - gtk_adjustment_set_value (vadj, CLAMP (tree_y, vadj->lower, vadj->upper - vadj->page_size)); + gtk_adjustment_set_value (vadj, CLAMP (tree_y, gtk_adjustment_get_lower (vadj), gtk_adjustment_get_upper (vadj) - gtk_adjustment_get_page_size (vadj))); } /** @@@ -10455,7 -10282,7 +10458,7 @@@ pspp_sheet_view_get_path_at_pos (PsppSh if (tree_view->priv->row_count == 0) return FALSE; - if (x > tree_view->priv->hadjustment->upper) + if (x > gtk_adjustment_get_upper (tree_view->priv->hadjustment)) return FALSE; if (x < 0 || y < 0) @@@ -10765,12 -10592,10 +10768,12 @@@ pspp_sheet_view_get_visible_rect (PsppS if (visible_rect) { - visible_rect->x = tree_view->priv->hadjustment->value; - visible_rect->y = tree_view->priv->vadjustment->value; - visible_rect->width = widget->allocation.width; - visible_rect->height = widget->allocation.height - TREE_VIEW_HEADER_HEIGHT (tree_view); + GtkAllocation allocation; + gtk_widget_get_allocation (widget, &allocation); + visible_rect->x = gtk_adjustment_get_value (tree_view->priv->hadjustment); + visible_rect->y = gtk_adjustment_get_value (tree_view->priv->vadjustment); + visible_rect->width = allocation.width; + visible_rect->height = allocation.height - TREE_VIEW_HEADER_HEIGHT (tree_view); } } @@@ -10801,7 -10626,7 +10804,7 @@@ pspp_sheet_view_widget_to_tree_coords ( g_return_if_fail (PSPP_IS_SHEET_VIEW (tree_view)); if (tx) - *tx = wx + tree_view->priv->hadjustment->value; + *tx = wx + gtk_adjustment_get_value (tree_view->priv->hadjustment); if (ty) *ty = wy + tree_view->priv->dy; } @@@ -10833,7 -10658,7 +10836,7 @@@ pspp_sheet_view_tree_to_widget_coords ( g_return_if_fail (PSPP_IS_SHEET_VIEW (tree_view)); if (wx) - *wx = tx - tree_view->priv->hadjustment->value; + *wx = tx - gtk_adjustment_get_value (tree_view->priv->hadjustment); if (wy) *wy = ty - tree_view->priv->dy; } @@@ -10926,7 -10751,7 +10929,7 @@@ pspp_sheet_view_convert_widget_to_bin_w g_return_if_fail (PSPP_IS_SHEET_VIEW (tree_view)); if (bx) - *bx = wx + tree_view->priv->hadjustment->value; + *bx = wx + gtk_adjustment_get_value (tree_view->priv->hadjustment); if (by) *by = wy - TREE_VIEW_HEADER_HEIGHT (tree_view); } @@@ -10954,7 -10779,7 +10957,7 @@@ pspp_sheet_view_convert_bin_window_to_w g_return_if_fail (PSPP_IS_SHEET_VIEW (tree_view)); if (wx) - *wx = bx - tree_view->priv->hadjustment->value; + *wx = bx - gtk_adjustment_get_value (tree_view->priv->hadjustment); if (wy) *wy = by + TREE_VIEW_HEADER_HEIGHT (tree_view); } @@@ -11062,10 -10887,10 +11065,10 @@@ pspp_sheet_view_get_visible_range (Pspp { gint y; - if (tree_view->priv->height < tree_view->priv->vadjustment->page_size) + if (tree_view->priv->height < gtk_adjustment_get_page_size (tree_view->priv->vadjustment)) y = tree_view->priv->height - 1; else - y = TREE_WINDOW_Y_TO_RBTREE_Y (tree_view, tree_view->priv->vadjustment->page_size) - 1; + y = TREE_WINDOW_Y_TO_RBTREE_Y (tree_view, gtk_adjustment_get_page_size (tree_view->priv->vadjustment)) - 1; pspp_sheet_view_find_offset (tree_view, y, &node); if (node >= 0) @@@ -11433,7 -11258,7 +11436,7 @@@ pspp_sheet_view_get_dest_row_at_pos (Ps } - +#if GTK3_TRANSITION /* KEEP IN SYNC WITH PSPP_SHEET_VIEW_BIN_EXPOSE */ /** * pspp_sheet_view_create_row_drag_icon: @@@ -11487,7 -11312,8 +11490,7 @@@ pspp_sheet_view_create_row_drag_icon (P background_area.y = y; background_area.height = ROW_HEIGHT (tree_view); - gdk_drawable_get_size (tree_view->priv->bin_window, - &bin_window_width, NULL); + bin_window_width = gdk_window_get_width (tree_view->priv->bin_window); drawable = gdk_pixmap_new (tree_view->priv->bin_window, bin_window_width + 2, @@@ -11499,14 -11325,12 +11502,14 @@@ expose_area.width = bin_window_width + 2; expose_area.height = background_area.height + 2; +#if GTK3_TRANSITION gdk_draw_rectangle (drawable, widget->style->base_gc [gtk_widget_get_state (widget)], TRUE, 0, 0, bin_window_width + 2, background_area.height + 2); +#endif rtl = gtk_widget_get_direction (GTK_WIDGET (tree_view)) == GTK_TEXT_DIR_RTL; @@@ -11545,18 -11369,16 +11548,18 @@@ cell_offset += column->width; } +#if GTK3_TRANSITION gdk_draw_rectangle (drawable, widget->style->black_gc, FALSE, 0, 0, bin_window_width + 1, background_area.height + 1); +#endif return drawable; } - +#endif /** * pspp_sheet_view_set_destroy_count_func: @@@ -11901,8 -11723,8 +11904,8 @@@ pspp_sheet_view_search_position_func (P gint x, y; gint tree_x, tree_y; gint tree_width, tree_height; - GdkWindow *tree_window = GTK_WIDGET (tree_view)->window; - GdkScreen *screen = gdk_drawable_get_screen (tree_window); + GdkWindow *tree_window = gtk_widget_get_window (GTK_WIDGET (tree_view)); + GdkScreen *screen = gdk_window_get_screen (tree_window); GtkRequisition requisition; gint monitor_num; GdkRectangle monitor; @@@ -11913,9 -11735,9 +11916,9 @@@ gtk_widget_realize (search_dialog); gdk_window_get_origin (tree_window, &tree_x, &tree_y); - gdk_drawable_get_size (tree_window, - &tree_width, - &tree_height); + tree_width = gdk_window_get_width (tree_window); + tree_height = gdk_window_get_height (tree_window); + gtk_widget_size_request (search_dialog, &requisition); if (tree_x + tree_width > gdk_screen_get_width (screen)) @@@ -11947,7 -11769,6 +11950,7 @@@ pspp_sheet_view_search_disable_popdown G_CALLBACK (pspp_sheet_view_search_enable_popdown), data); } +#if GTK3_TRANSITION /* Because we're visible but offscreen, we just set a flag in the preedit * callback. */ @@@ -11966,7 -11787,6 +11969,7 @@@ pspp_sheet_view_search_preedit_changed } } +#endif static void pspp_sheet_view_search_activate (GtkEntry *entry, @@@ -12649,7 -12469,7 +12652,7 @@@ pspp_sheet_view_event (GtkWidget *widge gtk_tree_path_free (path); handled = gtk_binding_set_activate (edit_bindings, keyval, event->state, - GTK_OBJECT (tree_view)); + G_OBJECT (tree_view)); if (handled) g_signal_stop_emission_by_name (widget, "event"); @@@ -12686,7 -12506,7 +12689,7 @@@ pspp_sheet_view_real_start_editing (Psp guint flags) { PsppSheetSelectionMode mode = pspp_sheet_selection_get_mode (tree_view->priv->selection); - gint pre_val = tree_view->priv->vadjustment->value; + gint pre_val = gtk_adjustment_get_value (tree_view->priv->vadjustment); GtkRequisition requisition; gint row; @@@ -12698,7 -12518,7 +12701,7 @@@ row = gtk_tree_path_get_indices (path)[0]; tree_view->priv->edited_row = row; pspp_sheet_view_real_set_cursor (tree_view, path, FALSE, TRUE, 0); - cell_area->y += pre_val - (int)tree_view->priv->vadjustment->value; + cell_area->y += pre_val - (int)gtk_adjustment_get_value (tree_view->priv->vadjustment); pspp_sheet_selection_unselect_all_columns (tree_view->priv->selection); pspp_sheet_selection_select_column (tree_view->priv->selection, column); @@@ -12917,8 -12737,8 +12920,8 @@@ pspp_sheet_view_state_changed (GtkWidge if (gtk_widget_get_realized (widget)) { - gdk_window_set_back_pixmap (widget->window, NULL, FALSE); - gdk_window_set_background (tree_view->priv->bin_window, &widget->style->base[widget->state]); + GtkStyle *style = gtk_widget_get_style (widget); + gdk_window_set_background (tree_view->priv->bin_window, &style->base[gtk_widget_get_state (widget)]); } gtk_widget_queue_draw (widget); @@@ -13124,10 -12944,8 +13127,10 @@@ pspp_sheet_view_set_tooltip_cell (PsppS } else { + GtkAllocation allocation; + gtk_widget_get_allocation (GTK_WIDGET (tree_view), &allocation); rect.x = 0; - rect.width = GTK_WIDGET (tree_view)->allocation.width; + rect.width = allocation.width; } /* Determine y values. */ @@@ -13144,7 -12962,7 +13147,7 @@@ else { rect.y = 0; - rect.height = tree_view->priv->vadjustment->page_size; + rect.height = gtk_adjustment_get_page_size (tree_view->priv->vadjustment); } gtk_tooltip_set_tip_area (tooltip, &rect); @@@ -13360,7 -13178,6 +13363,7 @@@ _gtk_boolean_handled_accumulator (GSign return continue_emission; } + GType pspp_sheet_view_grid_lines_get_type (void) { diff --combined src/ui/gui/psppire-conf.c index e917ecebb8,561f933ff0..09f6d68a12 --- a/src/ui/gui/psppire-conf.c +++ b/src/ui/gui/psppire-conf.c @@@ -223,6 -223,31 +223,31 @@@ psppire_conf_get_boolean (PsppireConf * } + + gboolean + psppire_conf_get_string (PsppireConf *conf, const gchar *base, + const gchar *name, gchar **value) + { + gboolean ok; + gchar *b; + GError *err = NULL; + conf_read (conf); + b = g_key_file_get_string (conf->keyfile, + base, + name, &err); + + ok = (err == NULL); + if ( err != NULL ) + g_error_free (err); + + if (ok) + *value = b; + + return ok; + } + + + void psppire_conf_set_int (PsppireConf *conf, const gchar *base, const gchar *name, @@@ -241,6 -266,18 +266,18 @@@ psppire_conf_set_boolean (PsppireConf * conf_write (conf); } + + void + psppire_conf_set_string (PsppireConf *conf, + const gchar *base, const gchar *name, + const gchar *value) + { + g_key_file_set_string (conf->keyfile, base, name, value); + conf_write (conf); + } + + + /* A convenience function to set the geometry of a window from from a saved config @@@ -300,11 -337,10 +337,11 @@@ psppire_conf_save_window_geometry (Pspp if (!maximized) { - gint width, height; gint x, y; - gdk_drawable_get_size (w, &width, &height); + gint width = gdk_window_get_width (w); + gint height= gdk_window_get_height (w); + gdk_window_get_position (w, &x, &y); psppire_conf_set_int (conf, base, "height", height); diff --combined src/ui/gui/psppire-data-editor.c index 5ae78dd886,b1526ac95a..09729bc425 --- a/src/ui/gui/psppire-data-editor.c +++ b/src/ui/gui/psppire-data-editor.c @@@ -32,6 -32,7 +32,7 @@@ #include "ui/gui/psppire-value-entry.h" #include "ui/gui/psppire-var-sheet.h" #include "ui/gui/psppire.h" + #include "ui/gui/psppire-conf.h" #include #define _(msgid) gettext (msgid) @@@ -224,10 -225,14 +225,10 @@@ psppire_data_editor_get_property (GObje static void psppire_data_editor_switch_page (GtkNotebook *notebook, -#if GTK_DISABLE_DEPRECATED && GTK_CHECK_VERSION(2,20,0) - gpointer page, -#else - GtkNotebookPage *page, -#endif + GtkWidget *w, guint page_num) { - GTK_NOTEBOOK_CLASS (parent_class)->switch_page (notebook, page, page_num); + GTK_NOTEBOOK_CLASS (parent_class)->switch_page (notebook, w, page_num); psppire_data_editor_update_ui_manager (PSPPIRE_DATA_EDITOR (notebook)); } @@@ -693,11 -698,14 +694,14 @@@ make_split_datasheet (PsppireDataEdito return GTK_WIDGET (xpaned); } + static void set_font_recursively (GtkWidget *w, gpointer data); + static void psppire_data_editor_init (PsppireDataEditor *de) { GtkWidget *var_sheet_scroller; GtkWidget *hbox; + gchar *fontname = NULL; de->font = NULL; de->ui_manager = NULL; @@@ -747,6 -755,15 +751,15 @@@ g_object_set (de, "can-focus", FALSE, NULL); + if (psppire_conf_get_string (psppire_conf_new (), + "Data Editor", "font", + &fontname) ) + { + de->font = pango_font_description_from_string (fontname); + g_free (fontname); + set_font_recursively (GTK_WIDGET (de), de->font); + } + psppire_data_editor_update_ui_manager (de); } @@@ -798,11 -815,18 +811,18 @@@ set_font_recursively (GtkWidget *w, gpo void psppire_data_editor_set_font (PsppireDataEditor *de, PangoFontDescription *font_desc) { + gchar *font_name; set_font_recursively (GTK_WIDGET (de), font_desc); if (de->font) pango_font_description_free (de->font); de->font = pango_font_description_copy (font_desc); + font_name = pango_font_description_to_string (de->font); + + psppire_conf_set_string (psppire_conf_new (), + "Data Editor", "font", + font_name); + } /* If SPLIT is TRUE, splits DE's data sheet into four panes. diff --combined src/ui/gui/psppire-data-sheet.c index dfb7382da5,badc204165..1b7b66a057 --- a/src/ui/gui/psppire-data-sheet.c +++ b/src/ui/gui/psppire-data-sheet.c @@@ -124,6 -124,7 +124,7 @@@ on_query_tooltip (GtkWidget *widget, gi int width; g_return_val_if_fail (data_store != NULL, FALSE); + g_return_val_if_fail (data_store->datasheet != NULL, FALSE); if (!get_tooltip_location (widget, tooltip, wx, wy, &row, &column)) return FALSE; @@@ -176,9 -177,9 +177,9 @@@ render_row_number_cell (PsppSheetViewCo { PsppireDataStore *store = store_; GValue gvalue = { 0, }; - gint row; + gint row = GPOINTER_TO_INT (iter->user_data); - row = GPOINTER_TO_INT (iter->user_data); + g_return_if_fail (store->datasheet); g_value_init (&gvalue, G_TYPE_INT); g_value_set_int (&gvalue, row + 1); @@@ -2308,7 -2309,7 +2309,7 @@@ psppire_data_sheet_clipboard_set (GtkSe g_assert_not_reached (); } - gtk_selection_data_set (selection_data, selection_data->target, + gtk_selection_data_set (selection_data, gtk_selection_data_get_target (selection_data), 8, (const guchar *) string->str, string->len); @@@ -2441,13 -2442,13 +2442,13 @@@ psppire_data_sheet_clip_received_cb (Gt gint first_column; char *c; - if ( sd->length < 0 ) + if ( gtk_selection_data_get_length (sd) < 0 ) return; - if ( sd->type != gdk_atom_intern ("UTF8_STRING", FALSE)) + if ( gtk_selection_data_get_data_type (sd) != gdk_atom_intern ("UTF8_STRING", FALSE)) return; - c = (char *) sd->data; + c = (char *) gtk_selection_data_get_data (sd); /* Get the starting selected position in the data sheet. (Possibly we should only paste into the selected range if it's larger than one cell?) */ @@@ -2461,14 -2462,14 +2462,14 @@@ g_return_if_fail (next_row >= 0); g_return_if_fail (next_column >= 0); - while (count < sd->length) + while (count < gtk_selection_data_get_length (sd)) { gint row = next_row; gint column = next_column; struct variable *var; char *s = c; - while (*c != '\t' && *c != '\n' && count < sd->length) + while (*c != '\t' && *c != '\n' && count < gtk_selection_data_get_length (sd)) { c++; count++; diff --combined src/ui/gui/psppire-data-window.c index 0bb3e4971f,2a56fa6666..5408f8d36c --- a/src/ui/gui/psppire-data-window.c +++ b/src/ui/gui/psppire-data-window.c @@@ -27,33 -27,21 +27,21 @@@ #include "ui/gui/aggregate-dialog.h" #include "ui/gui/autorecode-dialog.h" #include "ui/gui/builder-wrapper.h" - #include "ui/gui/chi-square-dialog.h" #include "ui/gui/comments-dialog.h" - #include "ui/gui/compute-dialog.h" - #include "ui/gui/count-dialog.h" #include "ui/gui/entry-dialog.h" #include "ui/gui/executor.h" #include "ui/gui/help-menu.h" #include "ui/gui/helper.h" #include "ui/gui/helper.h" - #include "ui/gui/k-related-dialog.h" - #include "ui/gui/npar-two-sample-related.h" - #include "ui/gui/oneway-anova-dialog.h" #include "ui/gui/psppire-data-window.h" #include "ui/gui/psppire-dialog-action.h" #include "ui/gui/psppire-syntax-window.h" #include "ui/gui/psppire-window.h" #include "ui/gui/psppire.h" - #include "ui/gui/runs-dialog.h" - #include "ui/gui/ks-one-sample-dialog.h" #include "ui/gui/recode-dialog.h" #include "ui/gui/select-cases-dialog.h" #include "ui/gui/split-file-dialog.h" - #include "ui/gui/t-test-one-sample.h" - #include "ui/gui/t-test-paired-samples.h" #include "ui/gui/text-data-import-dialog.h" - #include "ui/gui/transpose-dialog.h" - #include "ui/gui/univariate-dialog.h" #include "ui/gui/weight-cases-dialog.h" #include "ui/syntax-gen.h" @@@ -314,18 -302,25 +302,25 @@@ dump_rm (GtkRecentManager *rm } #endif + static gboolean + has_suffix (const gchar *name, const gchar *suffix) + { + size_t name_len = strlen (name); + size_t suffix_len = strlen (suffix); + return (name_len > suffix_len + && !c_strcasecmp (&name[name_len - suffix_len], suffix)); + } + static gboolean name_has_por_suffix (const gchar *name) { - size_t length = strlen (name); - return length > 4 && !c_strcasecmp (&name[length - 4], ".por"); + return has_suffix (name, ".por"); } static gboolean name_has_sav_suffix (const gchar *name) { - size_t length = strlen (name); - return length > 4 && !c_strcasecmp (&name[length - 4], ".sav"); + return has_suffix (name, ".sav") || has_suffix (name, ".zsav"); } /* Returns true if NAME has a suffix which might denote a PSPP file */ @@@ -380,6 -375,17 +375,17 @@@ load_file (PsppireWindow *de, const gch return ok; } + static const char * + psppire_data_window_format_to_string (enum PsppireDataWindowFormat format) + { + if (format == PSPPIRE_DATA_WINDOW_SAV) + return ".sav"; + else if (format == PSPPIRE_DATA_WINDOW_ZSAV) + return ".zsav"; + else + return ".por"; + } + /* Save DE to file */ static void save_file (PsppireWindow *w) @@@ -396,12 -402,7 +402,7 @@@ fnx = g_string_new (file_name); if ( ! name_has_suffix (fnx->str)) - { - if ( de->save_as_portable) - g_string_append (fnx, ".por"); - else - g_string_append (fnx, ".sav"); - } + g_string_append (fnx, psppire_data_window_format_to_string (de->format)); ds_init_empty (&filename); @@@ -412,9 -413,13 +413,13 @@@ syntax_gen_string (&filename, ss_cstr (utf8_file_name)); g_free (utf8_file_name); - syntax = g_strdup_printf ("%s OUTFILE=%s.", - de->save_as_portable ? "EXPORT" : "SAVE", - ds_cstr (&filename)); + if (de->format == PSPPIRE_DATA_WINDOW_SAV) + syntax = g_strdup_printf ("SAVE OUTFILE=%s.", ds_cstr (&filename)); + else if (de->format == PSPPIRE_DATA_WINDOW_ZSAV) + syntax = g_strdup_printf ("SAVE /ZCOMPRESSED /OUTFILE=%s.", + ds_cstr (&filename)); + else + syntax = g_strdup_printf ("EXPORT OUTFILE=%s.", ds_cstr (&filename)); ds_destroy (&filename); @@@ -462,9 -467,11 +467,11 @@@ sysfile_info (PsppireDataWindow *de static void data_pick_filename (PsppireWindow *window) { + GtkListStore *list_store; + GtkWidget *combo_box; + PsppireDataWindow *de = PSPPIRE_DATA_WINDOW (window); - GtkFileFilter *filter = gtk_file_filter_new (); - GtkWidget *button_sys; + GtkFileFilter *filter; GtkWidget *dialog = gtk_file_chooser_dialog_new (_("Save"), GTK_WINDOW (de), @@@ -475,10 -482,16 +482,16 @@@ g_object_set (dialog, "local-only", FALSE, NULL); + filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, _("System Files (*.sav)")); gtk_file_filter_add_mime_type (filter, "application/x-spss-sav"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); + filter = gtk_file_filter_new (); + gtk_file_filter_set_name (filter, _("Compressed System Files (*.zsav)")); + gtk_file_filter_add_pattern (filter, "*.zsav"); + gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); + filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, _("Portable Files (*.por) ")); gtk_file_filter_add_mime_type (filter, "application/x-spss-por"); @@@ -490,22 -503,46 +503,46 @@@ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); { - GtkWidget *button_por; - GtkWidget *vbox = gtk_vbox_new (TRUE, 5); - button_sys = - gtk_radio_button_new_with_label (NULL, _("System File")); - - button_por = - gtk_radio_button_new_with_label - (gtk_radio_button_get_group (GTK_RADIO_BUTTON(button_sys)), - _("Portable File")); - - psppire_box_pack_start_defaults (GTK_BOX (vbox), button_sys); - psppire_box_pack_start_defaults (GTK_BOX (vbox), button_por); - - gtk_widget_show_all (vbox); - - gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER(dialog), vbox); + GtkCellRenderer *cell; + GtkWidget *label; + GtkTreeIter iter; + GtkWidget *hbox; + + list_store = gtk_list_store_new (2, G_TYPE_INT, G_TYPE_STRING); + combo_box = gtk_combo_box_new_with_model (GTK_TREE_MODEL (list_store)); + + gtk_list_store_append (list_store, &iter); + gtk_list_store_set (list_store, &iter, + 0, PSPPIRE_DATA_WINDOW_SAV, + 1, _("System File"), + -1); + gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combo_box), &iter); + + gtk_list_store_append (list_store, &iter); + gtk_list_store_set (list_store, &iter, + 0, PSPPIRE_DATA_WINDOW_ZSAV, + 1, _("Compressed System File"), + -1); + + gtk_list_store_append (list_store, &iter); + gtk_list_store_set (list_store, &iter, + 0, PSPPIRE_DATA_WINDOW_POR, + 1, _("Portable File"), + -1); + + label = gtk_label_new (_("Format:")); + + cell = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), cell, FALSE); + gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combo_box), cell, + "text", 1); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), combo_box, FALSE, FALSE, 0); + gtk_widget_show_all (hbox); + + gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (dialog), hbox); } gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), @@@ -521,16 -558,18 +558,18 @@@ gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)) ); - de->save_as_portable = - ! gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button_sys)); + GtkTreeIter iter; + int format; + + gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo_box), &iter); + gtk_tree_model_get (GTK_TREE_MODEL (list_store), &iter, + 0, &format, + -1); + de->format = format; if ( ! name_has_suffix (filename->str)) - { - if ( de->save_as_portable) - g_string_append (filename, ".por"); - else - g_string_append (filename, ".sav"); - } + g_string_append (filename, + psppire_data_window_format_to_string (format)); psppire_window_set_filename (PSPPIRE_WINDOW (de), filename->str); @@@ -644,10 -683,14 +683,10 @@@ static voi fonts_activate (PsppireDataWindow *de) { GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (de)); - PangoFontDescription *current_font; - gchar *font_name; - GtkWidget *dialog = - gtk_font_selection_dialog_new (_("Font Selection")); - - - current_font = GTK_WIDGET(de->data_editor)->style->font_desc; - font_name = pango_font_description_to_string (current_font); + GtkWidget *dialog = gtk_font_selection_dialog_new (_("Font Selection")); + GtkStyle *style = gtk_widget_get_style (GTK_WIDGET(de->data_editor)); + PangoFontDescription *current_font = style->font_desc; + gchar *font_name = pango_font_description_to_string (current_font); gtk_font_selection_dialog_set_font_name (GTK_FONT_SELECTION_DIALOG (dialog), font_name); @@@ -862,14 -905,12 +901,14 @@@ enable_save (PsppireDataWindow *dw static void psppire_data_window_init (PsppireDataWindow *de) { + GtkWidget *w ; de->builder = builder_new ("data-editor.ui"); de->ui_manager = GTK_UI_MANAGER (get_object_assert (de->builder, "uimanager1", GTK_TYPE_UI_MANAGER)); - PSPPIRE_WINDOW (de)->menu = - GTK_MENU_SHELL (gtk_ui_manager_get_widget (de->ui_manager, "/ui/menubar/windows/windows_minimise_all")->parent); + w = gtk_ui_manager_get_widget (de->ui_manager, "/ui/menubar/windows/windows_minimise_all"); + + PSPPIRE_WINDOW (de)->menu = GTK_MENU_SHELL (gtk_widget_get_parent (w)); de->uim = NULL; de->merge_id = 0; @@@ -949,43 -990,24 +988,24 @@@ psppire_data_window_finish_init (Psppir enable_save (de); connect_action (de, "file_new_data", G_CALLBACK (create_data_window)); - connect_action (de, "file_import", G_CALLBACK (text_data_import_assistant)); - connect_action (de, "file_save", G_CALLBACK (psppire_window_save)); - connect_action (de, "file_open", G_CALLBACK (psppire_window_open)); - connect_action (de, "file_save_as", G_CALLBACK (psppire_window_save_as)); - connect_action (de, "rename_dataset", G_CALLBACK (on_rename_dataset)); - connect_action (de, "file_information_working-file", G_CALLBACK (display_dict)); - connect_action (de, "file_information_external-file", G_CALLBACK (sysfile_info)); g_signal_connect_swapped (get_action_assert (de->builder, "view_value-labels"), "toggled", G_CALLBACK (toggle_value_labels), de); - connect_action (de, "data_transpose", G_CALLBACK (transpose_dialog)); connect_action (de, "data_select-cases", G_CALLBACK (select_cases_dialog)); connect_action (de, "data_aggregate", G_CALLBACK (aggregate_dialog)); - connect_action (de, "transform_compute", G_CALLBACK (compute_dialog)); connect_action (de, "transform_autorecode", G_CALLBACK (autorecode_dialog)); connect_action (de, "data_split-file", G_CALLBACK (split_file_dialog)); connect_action (de, "data_weight-cases", G_CALLBACK (weight_cases_dialog)); - connect_action (de, "oneway-anova", G_CALLBACK (oneway_anova_dialog)); - connect_action (de, "paired-t-test", G_CALLBACK (t_test_paired_samples_dialog)); - connect_action (de, "one-sample-t-test", G_CALLBACK (t_test_one_sample_dialog)); connect_action (de, "utilities_comments", G_CALLBACK (comments_dialog)); - connect_action (de, "transform_count", G_CALLBACK (count_dialog)); connect_action (de, "transform_recode-same", G_CALLBACK (recode_same_dialog)); connect_action (de, "transform_recode-different", G_CALLBACK (recode_different_dialog)); - connect_action (de, "univariate", G_CALLBACK (univariate_dialog)); - connect_action (de, "chi-square", G_CALLBACK (chisquare_dialog)); - connect_action (de, "runs", G_CALLBACK (runs_dialog)); - connect_action (de, "ks-one-sample", G_CALLBACK (ks_one_sample_dialog)); - connect_action (de, "k-related-samples", G_CALLBACK (k_related_dialog)); - connect_action (de, "two-related-samples", G_CALLBACK (two_related_dialog)); { GtkWidget *recent_data = @@@ -1093,6 -1115,15 +1113,15 @@@ psppire_data_window_dispose (GObject *o if (dw->dict) { + g_signal_handlers_disconnect_by_func (dw->dict, + G_CALLBACK (enable_save), dw); + g_signal_handlers_disconnect_by_func (dw->dict, + G_CALLBACK (on_weight_change), dw); + g_signal_handlers_disconnect_by_func (dw->dict, + G_CALLBACK (on_filter_change), dw); + g_signal_handlers_disconnect_by_func (dw->dict, + G_CALLBACK (on_split_change), dw); + g_object_unref (dw->dict); dw->dict = NULL; } diff --combined src/ui/gui/psppire-output-window.c index 38306d3bd4,8a29fab18c..e4f6c6ec95 --- a/src/ui/gui/psppire-output-window.c +++ b/src/ui/gui/psppire-output-window.c @@@ -38,7 -38,6 +38,6 @@@ #include "ui/gui/builder-wrapper.h" #include "ui/gui/psppire-output-window.h" - #include "gl/error.h" #include "gl/tmpdir.h" #include "gl/xalloc.h" #include "gl/c-xvasprintf.h" @@@ -163,10 -162,12 +162,10 @@@ psppire_output_cast (struct output_driv static void on_dwgarea_realize (GtkWidget *widget, gpointer data); static gboolean -expose_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data) +draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data) { PsppireOutputWindow *viewer = PSPPIRE_OUTPUT_WINDOW (data); struct xr_rendering *r = g_object_get_data (G_OBJECT (widget), "rendering"); - cairo_t *cr = gdk_cairo_create (widget->window); - const GtkStyle *style = gtk_widget_get_style (GTK_WIDGET (viewer)); PangoFontDescription *font_desc; @@@ -193,12 -194,14 +192,12 @@@ pango_font_description_free (font_desc); xr_rendering_apply_options (r, &viewer->render_opts); - - xr_rendering_draw (r, cr, event->area.x, event->area.y, - event->area.width, event->area.height); - cairo_destroy (cr); + xr_rendering_draw_all (r, cr); return TRUE; } + static void psppire_output_submit (struct output_driver *this, const struct output_item *item) @@@ -242,7 -245,7 +241,7 @@@ return; } - cr = gdk_cairo_create (GTK_WIDGET (pod->viewer)->window); + cr = gdk_cairo_create (gtk_widget_get_window (GTK_WIDGET (pod->viewer))); if (pod->xr == NULL) { const GtkStyle *style = gtk_widget_get_style (GTK_WIDGET (viewer)); @@@ -305,8 -308,8 +304,8 @@@ g_signal_connect (drawing_area, "realize", G_CALLBACK (on_dwgarea_realize), pod->viewer); - g_signal_connect (drawing_area, "expose_event", - G_CALLBACK (expose_event_callback), pod->viewer); + g_signal_connect (drawing_area, "draw", + G_CALLBACK (draw_callback), pod->viewer); gtk_widget_set_size_request (drawing_area, tw, th); gtk_layout_put (pod->viewer->output, drawing_area, 0, pod->viewer->y); @@@ -450,8 -453,8 +449,8 @@@ on_row_activate (GtkTreeView *overview g_value_unset (&value); vadj = gtk_layout_get_vadjustment (window->output); - min = vadj->lower; - max = vadj->upper - vadj->page_size; + min = gtk_adjustment_get_lower (vadj); + max = gtk_adjustment_get_upper (vadj) - gtk_adjustment_get_page_size (vadj); if (y < min) y = min; else if (y > max) @@@ -766,7 -769,7 +765,7 @@@ clipboard_get_cb (GtkClipboard *cli if (path_search (dirname, sizeof dirname, NULL, NULL, true) || mkdtemp (dirname) == NULL) { - error (0, errno, _("failed to create temporary directory")); + msg_error (errno, _("failed to create temporary directory during clipboard operation")); return; } filename = xasprintf ("%s/clip.tmp", dirname); @@@ -829,7 -832,7 +828,7 @@@ if ( g_file_get_contents (filename, &text, &length, NULL) ) { - gtk_selection_data_set (selection_data, selection_data->target, + gtk_selection_data_set (selection_data, gtk_selection_data_get_target (selection_data), 8, (const guchar *) text, length); } @@@ -1018,14 -1021,11 +1017,14 @@@ psppire_output_window_init (PsppireOutp NULL); { + GtkWidget *w; GtkUIManager *uim = GTK_UI_MANAGER (get_object_assert (xml, "uimanager1", GTK_TYPE_UI_MANAGER)); merge_help_menu (uim); + w = gtk_ui_manager_get_widget (uim,"/ui/menubar/windows_menuitem/windows_minimise-all"); + PSPPIRE_WINDOW (window)->menu = - GTK_MENU_SHELL (gtk_ui_manager_get_widget (uim,"/ui/menubar/windows_menuitem/windows_minimise-all")->parent); + GTK_MENU_SHELL (gtk_widget_get_parent (w)); } g_signal_connect_swapped (get_action_assert (xml, "file_export"), "activate", diff --combined src/ui/gui/syntax-editor.ui index 6c7adc9110,361ccfbd17..2cdea8981b --- a/src/ui/gui/syntax-editor.ui +++ b/src/ui/gui/syntax-editor.ui @@@ -12,38 -12,42 +12,42 @@@ - gtk-new + file-new-data new2 + _New... + file-syntax-data file_new_syntax _Syntax + file-system-data file_new_data _Data - gtk-open + file-open-data file_open _Open... - gtk-save + file-save-data file_save + _Save... - gtk-save-as + file-save-as file_save_as Save _As... @@@ -51,12 -55,13 +55,13 @@@ file_print - gtk-print + file-print + _Print... - gtk-quit + file-quit file_quit @@@ -68,42 -73,44 +73,44 @@@ - gtk-cut + edit-cut edit_cut false - gtk-copy + edit-copy edit_copy false - gtk-paste + edit-paste edit_paste false - gtk-delete + edit-delete edit_delete false - gtk-undo + edit-undo edit_undo + false - gtk-redo + edit-redo edit_redo + false @@@ -114,18 -121,21 +121,21 @@@ + run-all run_all All + run-selection run_selection Selection + run-current-line run_current_line Current Line @@@ -133,7 -143,8 +143,8 @@@ - run_to_end + run-to-end + run-to-end To End @@@ -145,6 -156,7 +156,7 @@@ + windows-minimize-all windows_minimise_all _Minimize All Windows @@@ -220,5 -232,6 +232,5 @@@ True - True diff --combined src/ui/gui/text-data-import-dialog.c index f6d2561893,d1252592e8..76c95c4178 --- a/src/ui/gui/text-data-import-dialog.c +++ b/src/ui/gui/text-data-import-dialog.c @@@ -41,7 -41,6 +41,6 @@@ #include "libpspp/i18n.h" #include "libpspp/line-reader.h" #include "libpspp/message.h" - #include "ui/gui/checkbox-treeview.h" #include "ui/gui/dialog-common.h" #include "ui/gui/executor.h" #include "ui/gui/helper.h" @@@ -56,7 -55,6 +55,6 @@@ #include "ui/gui/psppire-scanf.h" #include "ui/syntax-gen.h" - #include "gl/error.h" #include "gl/intprops.h" #include "gl/xalloc.h" @@@ -162,6 -160,7 +160,7 @@@ apply_dict (const struct dictionary *di enum val_type type = var_get_type (var); int width = var_get_width (var); enum measure measure = var_get_measure (var); + enum var_role role = var_get_role (var); enum alignment alignment = var_get_alignment (var); const struct fmt_spec *format = var_get_print_format (var); @@@ -212,16 -211,13 +211,13 @@@ name, var_get_label (var)); if (measure != var_default_measure (type)) syntax_gen_pspp (s, "VARIABLE LEVEL %ss (%ss).\n", - name, - (measure == MEASURE_NOMINAL ? "NOMINAL" - : measure == MEASURE_ORDINAL ? "ORDINAL" - : "SCALE")); + name, measure_to_syntax (measure)); + if (role != ROLE_INPUT) + syntax_gen_pspp (s, "VARIABLE ROLE /%ss %ss.\n", + var_role_to_syntax (role), name); if (alignment != var_default_alignment (type)) syntax_gen_pspp (s, "VARIABLE ALIGNMENT %ss (%ss).\n", - name, - (alignment == ALIGN_LEFT ? "LEFT" - : alignment == ALIGN_CENTRE ? "CENTER" - : "RIGHT")); + name, alignment_to_syntax (alignment)); if (var_get_display_width (var) != var_default_display_width (width)) syntax_gen_pspp (s, "VARIABLE WIDTH %ss (%d).\n", name, var_get_display_width (var)); @@@ -662,7 -658,7 +658,7 @@@ push_watch_cursor (struct import_assist GtkWidget *widget = GTK_WIDGET (ia->asst.assistant); GdkDisplay *display = gtk_widget_get_display (widget); GdkCursor *cursor = gdk_cursor_new_for_display (display, GDK_WATCH); - gdk_window_set_cursor (widget->window, cursor); + gdk_window_set_cursor (gtk_widget_get_window (widget), cursor); gdk_cursor_unref (cursor); gdk_display_flush (display); } @@@ -676,6 -672,6 +672,6 @@@ pop_watch_cursor (struct import_assista if (--ia->asst.watch_cursor == 0) { GtkWidget *widget = GTK_WIDGET (ia->asst.assistant); - gdk_window_set_cursor (widget->window, NULL); + gdk_window_set_cursor (gtk_widget_get_window (widget), NULL); } }