[anjuta] message-view: bgo #727634 - Cannot copy build output



commit 44e78cc455de1a76df92f88b9e5bfc768e6f5dee
Author: Sébastien Granjoux <seb sfo free fr>
Date:   Sat Apr 26 18:55:14 2014 +0200

    message-view: bgo #727634 - Cannot copy build output

 plugins/message-view/anjuta-message-manager.xml |    3 +-
 plugins/message-view/message-view.c             |  100 ++++-------------------
 plugins/message-view/message-view.h             |    2 +-
 plugins/message-view/plugin.c                   |   14 ++--
 4 files changed, 27 insertions(+), 92 deletions(-)
---
diff --git a/plugins/message-view/anjuta-message-manager.xml b/plugins/message-view/anjuta-message-manager.xml
index 99a1c77..7d33e02 100644
--- a/plugins/message-view/anjuta-message-manager.xml
+++ b/plugins/message-view/anjuta-message-manager.xml
@@ -18,9 +18,10 @@
        </popup>
        <popup name="PopupMessageView">
                <menuitem name="CopyMessage" action="ActionMessageCopy" />
+               <menuitem name="CopyAllMessage" action="ActionMessageCopyAll" />
+               <separator name="separator1" />
                <menuitem name="NextMessage" action="ActionMessageNext" />
                <menuitem name="PrevMessage" action="ActionMessagePrev" />
-               <menuitem name="SaveMessage" action="ActionMessageSave" />
                <placeholder name="PlaceholderPopupMessageView"/>
        </popup>
 </ui>
diff --git a/plugins/message-view/message-view.c b/plugins/message-view/message-view.c
index 672fd81..a984632 100644
--- a/plugins/message-view/message-view.c
+++ b/plugins/message-view/message-view.c
@@ -90,31 +90,6 @@ message_view_tree_view_filter (GtkTreeModel *model,
                                                           GtkTreeIter  *iter,
                                                           gpointer      data);
 
-/* Ask the user for an uri name */
-static gchar *
-ask_user_for_save_uri (GtkWindow* parent)
-{
-       GtkWidget* dialog;
-       gchar* uri;
-
-               dialog = gtk_file_chooser_dialog_new (_("Save file as"), parent,
-               GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-               GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL);
-
-       if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
-       {
-               uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
-       }
-       else
-       {
-               uri = NULL;
-       }
-
-       gtk_widget_destroy(dialog);
-
-       return uri;
-}
-
 /* Message object creation, copy and freeing */
 static Message*
 message_new (IAnjutaMessageViewType type, const gchar *summary,
@@ -786,37 +761,18 @@ void message_view_previous(MessageView* view)
        gtk_tree_path_free (path);
 }
 
-static gboolean message_view_save_as(MessageView* view, gchar* uri)
+void message_view_copy_all(MessageView* view)
 {
-       GFile *file;
-       GOutputStream *os;
        GtkTreeIter iter;
        GtkTreeModel *model;
-       gboolean ok;
-
-       g_return_val_if_fail (view != NULL && MESSAGE_IS_VIEW (view), FALSE);
-
-       if (uri == NULL)
-               return FALSE;
+       GString *messages;
 
-       file = g_file_new_for_uri (uri);
-       os = G_OUTPUT_STREAM (
-                       g_file_replace (file, NULL,
-                               FALSE,
-                               G_FILE_CREATE_NONE,
-                               NULL,
-                               NULL));
-       /* Create file */
-       if (os == NULL)
-       {
-               g_object_unref (file);
-               return FALSE;
-       }
+       g_return_if_fail (view != NULL && MESSAGE_IS_VIEW (view));
 
-       /* Save all lines of message view */
+       /* Copy all lines of message view */
        model = view->privat->model;
 
-       ok = TRUE;
+       messages = g_string_new (NULL);
        gtk_tree_model_get_iter_first (model, &iter);
        do
        {
@@ -827,49 +783,27 @@ static gboolean message_view_save_as(MessageView* view, gchar* uri)
                {
                        if (message->details && (strlen (message->details) > 0))
                        {
-                               if (g_output_stream_write (os, message->details, strlen (message->details), 
NULL, NULL) < 0)
-                               {
-                                       ok = FALSE;
-                               }
+                               g_string_append (messages, message->details);
+                               g_string_append_c (messages, '\n');
                        }
                        else
                        {
-                               if (g_output_stream_write (os, message->summary, strlen (message->summary), 
NULL, NULL) < 0)
-                               {
-                                       ok = FALSE;
-                               }
-                       }
-                       if (g_output_stream_write (os, "\n", 1, NULL, NULL) < 0)
-                       {
-                               ok = FALSE;
+                               g_string_append (messages, message->summary);
+                               g_string_append_c (messages, '\n');
                        }
                }
        } while (gtk_tree_model_iter_next (model, &iter));
-       g_output_stream_close (os, NULL, NULL);
-       g_object_unref (os);
-       g_object_unref (file);
-
-       return ok;
-}
-
-void message_view_save(MessageView* view)
-{
-       GtkWindow* parent;
-       gchar* uri;
-
-       g_return_if_fail (view != NULL && MESSAGE_IS_VIEW (view));
+       
+       if (messages->len != 0)
+       {
+               GtkClipboard *clipboard;
 
-       parent = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view)));
+               clipboard = gtk_widget_get_clipboard (GTK_WIDGET (view), GDK_SELECTION_CLIPBOARD);
 
-       uri = ask_user_for_save_uri (parent);
-       if (uri)
-       {
-               if (message_view_save_as (view, uri) == FALSE)
-               {
-                       anjuta_util_dialog_error(parent, _("Error writing %s"), uri);
-               }
-               g_free (uri);
+               gtk_clipboard_set_text (clipboard, messages->str, messages->len);
        }
+
+       g_string_free (messages, TRUE);
 }
 
 void message_view_copy(MessageView* view)
diff --git a/plugins/message-view/message-view.h b/plugins/message-view/message-view.h
index ac55cf1..e776bf3 100644
--- a/plugins/message-view/message-view.h
+++ b/plugins/message-view/message-view.h
@@ -73,7 +73,7 @@ GtkWidget* message_view_new (GtkWidget* popup_menu);
 
 void message_view_next(MessageView* view);
 void message_view_previous(MessageView* view);
-void message_view_save(MessageView* view);
+void message_view_copy_all(MessageView* view);
 void message_view_copy(MessageView* view);
 gboolean message_view_serialize (MessageView *view,
                                                                 AnjutaSerializer *serializer);
diff --git a/plugins/message-view/plugin.c b/plugins/message-view/plugin.c
index cc0b832..7888da5 100644
--- a/plugins/message-view/plugin.c
+++ b/plugins/message-view/plugin.c
@@ -65,12 +65,12 @@ static void on_copy_message(GtkAction* menuitem, MessageViewPlugin *plugin)
                message_view_copy(view);
 }
 
-static void on_save_message(GtkAction* menuitem, MessageViewPlugin *plugin)
+static void on_copy_all_message(GtkAction* menuitem, MessageViewPlugin *plugin)
 {
        AnjutaMsgman* msgman = ANJUTA_MSGMAN(plugin->msgman);
        MessageView* view = anjuta_msgman_get_current_view(msgman);
        if (view != NULL)
-               message_view_save(view);
+               message_view_copy_all(view);
 }
 
 static GtkActionEntry actions_goto[] = {
@@ -79,6 +79,10 @@ static GtkActionEntry actions_goto[] = {
     N_("_Copy Message"), NULL,
        N_("Copy message"),
     G_CALLBACK (on_copy_message)},
+  { "ActionMessageCopyAll", NULL,
+    N_("_Copy All Messages"), NULL,
+       N_("Copy All Messages"),
+    G_CALLBACK (on_copy_all_message)},
   { "ActionMessageNext", ANJUTA_STOCK_NEXT_MESSAGE,
     N_("_Next Message"), "<control><alt>n",
        N_("Next message"),
@@ -86,11 +90,7 @@ static GtkActionEntry actions_goto[] = {
   { "ActionMessagePrev", ANJUTA_STOCK_PREV_MESSAGE,
     N_("_Previous Message"), "<control><alt>p",
        N_("Previous message"),
-    G_CALLBACK (on_prev_message)},
-  { "ActionMessageSave", NULL,
-    N_("_Save Message"), NULL,
-       N_("Save message"),
-    G_CALLBACK (on_save_message)}
+    G_CALLBACK (on_prev_message)}
 };
 
 static void on_view_changed(AnjutaMsgman* msgman, MessageViewPlugin* plugin)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]