X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-dialog-action-comments.c;h=600ec897414808b1e62b39cffd084b9a89c0f67a;hb=a1538e0714e45fae1b7d43d11c587b70f2aa1eed;hp=bbb0a9dfda77e2a775793831b317b65cf884a5e4;hpb=e83d90847323b194bdb04267f9b0eb557fb139d4;p=pspp diff --git a/src/ui/gui/psppire-dialog-action-comments.c b/src/ui/gui/psppire-dialog-action-comments.c index bbb0a9dfda..600ec89741 100644 --- a/src/ui/gui/psppire-dialog-action-comments.c +++ b/src/ui/gui/psppire-dialog-action-comments.c @@ -52,7 +52,7 @@ generate_syntax (const PsppireDialogAction *pda) g_string_append (str, "ADD DOCUMENT\n"); - for (i = 0 ; i < gtk_text_buffer_get_line_count (buffer) ; ++i ) + for (i = 0 ; i < gtk_text_buffer_get_line_count (buffer) ; ++i) { struct string tmp; GtkTextIter start; @@ -79,7 +79,7 @@ generate_syntax (const PsppireDialogAction *pda) g_string_append (str, " .\n"); - if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cd->check))) + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cd->check))) g_string_append (str, "DISPLAY DOCUMENTS.\n"); text = str->str; @@ -114,7 +114,7 @@ retrieve_comments (PsppireDialogAction *pda) gtk_text_buffer_set_text (buffer, "", 0); - for ( i = 0 ; i < dict_get_document_line_cnt (pda->dict->dict); ++i ) + for (i = 0 ; i < dict_get_document_line_cnt (pda->dict->dict); ++i) add_line_to_buffer (buffer, dict_get_document_line (pda->dict->dict, i)); } @@ -139,7 +139,7 @@ set_column_number (GtkTextBuffer *textbuffer, GtkLabel *label = data; gchar *text ; - text = g_strdup_printf ( _("Column Number: %d"), + text = g_strdup_printf (_("Column Number: %d"), 1 + gtk_text_iter_get_line_offset (iter)); gtk_label_set_text (label, text); @@ -156,7 +156,7 @@ wrap_line (GtkTextBuffer *buffer, { gint chars = gtk_text_iter_get_chars_in_line (iter); - if ( chars > DOC_LINE_LENGTH ) + if (chars > DOC_LINE_LENGTH) { GtkTextIter line_fold = *iter; @@ -167,100 +167,63 @@ wrap_line (GtkTextBuffer *buffer, } -static void -psppire_dialog_action_comments_activate (PsppireDialogAction *pda) +static GtkBuilder * +psppire_dialog_action_comments_activate (PsppireDialogAction *pda, GVariant *param) { PsppireDialogActionComments *act = PSPPIRE_DIALOG_ACTION_COMMENTS (pda); - GHashTable *thing = psppire_dialog_action_get_hash_table (pda); - GtkBuilder *xml = g_hash_table_lookup (thing, pda); - if (!xml) - { - GtkTextIter iter; - - xml = builder_new ("comments.ui"); - g_hash_table_insert (thing, pda, xml); - - pda->dialog = get_widget_assert (xml, "comments-dialog"); - act->textview = get_widget_assert (xml, "comments-textview1"); - GtkWidget *label = get_widget_assert (xml, "column-number-label"); - GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (act->textview)); - act->check = get_widget_assert (xml, "comments-checkbutton1"); - - g_signal_connect_swapped (pda->dialog, "show", G_CALLBACK (retrieve_comments), pda); - - { - PangoContext * context ; - PangoLayout * layout ; - PangoRectangle rect; - - - /* Since we're going to truncate lines to 80 chars, - we need a monospaced font otherwise it'll look silly */ - PangoFontDescription *font_desc = - pango_font_description_from_string ("monospace"); - { - GtkStyleContext *style = gtk_widget_get_style_context (GTK_WIDGET (act->textview)); - GtkCssProvider *cssp = gtk_css_provider_new (); - - gchar *str = pango_font_description_to_string (font_desc); - gchar *css = - g_strdup_printf ("* {font: %s}", str); - g_free (str); - - GError *err = NULL; - gtk_css_provider_load_from_data (cssp, css, -1, &err); - if (err) - { - g_warning ("Failed to load font css \"%s\": %s", css, err->message); - g_error_free (err); - } - g_free (css); - - gtk_style_context_add_provider (style, - GTK_STYLE_PROVIDER (cssp), - GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); - g_object_unref (cssp); - } - - /* And let's just make sure that a complete line fits into the - widget's width */ - context = gtk_widget_create_pango_context (act->textview); - layout = pango_layout_new (context); + GtkBuilder *xml = builder_new ("comments.ui"); - pango_layout_set_text (layout, "M", 1); + pda->dialog = get_widget_assert (xml, "comments-dialog"); + act->textview = get_widget_assert (xml, "comments-textview1"); + GtkWidget *label = get_widget_assert (xml, "column-number-label"); + GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (act->textview)); + act->check = get_widget_assert (xml, "comments-checkbutton1"); - pango_layout_set_font_description (layout, font_desc); + g_signal_connect_swapped (pda->dialog, "show", G_CALLBACK (retrieve_comments), pda); - pango_layout_get_extents (layout, NULL, &rect); + { + /* Since we're going to truncate lines to 80 chars, + we need a monospaced font otherwise it'll look silly */ + { + GtkStyleContext *style = gtk_widget_get_style_context (GTK_WIDGET (act->textview)); + GtkCssProvider *cssp = gtk_css_provider_new (); - g_object_set (act->textview, "width-request", - PANGO_PIXELS (rect.width) * DOC_LINE_LENGTH + 20, NULL); + const gchar *css = "* {font-family: monospace}"; + GError *err = NULL; + gtk_css_provider_load_from_data (cssp, css, -1, &err); + if (err) + { + g_warning ("Failed to load font css \"%s\": %s", css, err->message); + g_error_free (err); + } - g_object_unref (G_OBJECT (layout)); - g_object_unref (G_OBJECT (context)); + gtk_style_context_add_provider (style, + GTK_STYLE_PROVIDER (cssp), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + g_object_unref (cssp); + } + } + GtkTextIter iter; + g_signal_connect (buffer, "mark-set", + G_CALLBACK (set_column_number), label); - pango_font_description_free (font_desc); - } - - g_signal_connect (buffer, "mark-set", - G_CALLBACK (set_column_number), label); + g_signal_connect_after (buffer, "insert-text", + G_CALLBACK (wrap_line), NULL); - g_signal_connect_after (buffer, "insert-text", - G_CALLBACK (wrap_line), NULL); + gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0); + gtk_text_buffer_place_cursor (buffer, &iter); - gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0); - gtk_text_buffer_place_cursor (buffer, &iter); - } - psppire_dialog_action_set_valid_predicate (pda, dialog_state_valid); psppire_dialog_action_set_refresh (pda, refresh); + + return xml; } static void psppire_dialog_action_comments_class_init (PsppireDialogActionCommentsClass *class) { - psppire_dialog_action_set_activation (class, psppire_dialog_action_comments_activate); + PSPPIRE_DIALOG_ACTION_CLASS (class)->initial_activate = psppire_dialog_action_comments_activate; PSPPIRE_DIALOG_ACTION_CLASS (class)->generate_syntax = generate_syntax; }