X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-output-window.c;h=38306d3bd4ace2b8f36c64fb37e0ad5361249390;hb=683961575de1160a98ed9a262b05db597b2e7609;hp=c59930ccef007ec0c9666b282fc3bd265357cb52;hpb=ff5e81803b409939e921211f1ffd46cb24df33e9;p=pspp diff --git a/src/ui/gui/psppire-output-window.c b/src/ui/gui/psppire-output-window.c index c59930ccef..38306d3bd4 100644 --- a/src/ui/gui/psppire-output-window.c +++ b/src/ui/gui/psppire-output-window.c @@ -1,5 +1,5 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation + Copyright (C) 2008, 2009, 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 @@ -163,12 +163,10 @@ psppire_output_cast (struct output_driver *driver) 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; @@ -195,14 +193,12 @@ expose_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data) 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) @@ -246,7 +242,7 @@ psppire_output_submit (struct output_driver *this, 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)); @@ -309,8 +305,8 @@ psppire_output_submit (struct output_driver *this, 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); @@ -454,8 +450,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) @@ -653,14 +649,17 @@ psppire_output_window_export (PsppireOutputWindow *window) if ( response == GTK_RESPONSE_ACCEPT ) { - int file_type = gtk_combo_box_get_active (GTK_COMBO_BOX (combo)); - char *filename = gtk_file_chooser_get_filename (chooser); + gint file_type = gtk_combo_box_get_active (GTK_COMBO_BOX (combo)); + gchar *filename = gtk_file_chooser_get_filename (chooser); struct string_map options; g_return_if_fail (filename); if (file_type == FT_AUTO) { + /* If the "Infer file type from extension" option was chosen, + search for the respective type in the list. + (It's a O(n) search, but fortunately n is small). */ gint i; for (i = 1 ; i < N_EXTENSIONS ; ++i) { @@ -671,7 +670,17 @@ psppire_output_window_export (PsppireOutputWindow *window) } } } - + else if (! g_str_has_suffix (filename, ft[file_type].ext)) + { + /* If an explicit document format was chosen, and if the chosen + filename does not already have that particular "extension", + then append it. + */ + + gchar *of = filename; + filename = g_strconcat (filename, ft[file_type].ext, NULL); + g_free (of); + } string_map_init (&options); string_map_insert (&options, "output-file", filename); @@ -820,7 +829,7 @@ clipboard_get_cb (GtkClipboard *clipboard, 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); } @@ -1009,11 +1018,14 @@ psppire_output_window_init (PsppireOutputWindow *window) 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",