[Xfce4-commits] <midori:master> Implement 'Run in debugger' button in diagnostic dialog

Christian Dywan noreply at xfce.org
Wed Mar 27 00:52:01 CET 2013


Updating branch refs/heads/master
         to d31e4830493cc16b3763438bc6de68ca5eabb17e (commit)
       from 78cc6cc295143821ae1229ddd1b691ae00c4f78b (commit)

commit d31e4830493cc16b3763438bc6de68ca5eabb17e
Author: Christian Dywan <christian at twotoasts.de>
Date:   Wed Mar 27 00:50:19 2013 +0100

    Implement 'Run in debugger' button in diagnostic dialog

 katze/midori-paths.vala  |    3 ++-
 midori/main.c            |   11 +----------
 midori/midori-frontend.c |   29 ++++++++++++++++++++++++++++-
 midori/sokoke.c          |   16 ++++++++++++++++
 midori/sokoke.h          |    4 ++++
 5 files changed, 51 insertions(+), 12 deletions(-)

diff --git a/katze/midori-paths.vala b/katze/midori-paths.vala
index d404a5f..6f5cd45 100644
--- a/katze/midori-paths.vala
+++ b/katze/midori-paths.vala
@@ -313,7 +313,8 @@ namespace Midori {
             assert (command_line != null);
             if (for_display)
                 return string.joinv (" ", command_line).replace (Environment.get_home_dir (), "~");
-            return string.joinv (" ", command_line).replace ("--debug", "").replace ("-g", "");
+            return string.joinv (" ", command_line).replace ("--debug", "").replace ("-g", "")
+                .replace ("--diagnostic-dialog", "").replace ("-d", "");
         }
 
         public static string get_lib_path (string package) {
diff --git a/midori/main.c b/midori/main.c
index a24a025..4dcfcab 100644
--- a/midori/main.c
+++ b/midori/main.c
@@ -143,19 +143,10 @@ main (int    argc,
     if (debug)
     {
         gchar* gdb = g_find_program_in_path ("gdb");
-        gchar* args = midori_paths_get_command_line_str (FALSE);
-        const gchar* runtime_dir = midori_paths_get_runtime_dir ();
-        gchar* cmd = g_strdup_printf (
-            "--batch -ex 'set print thread-events off' -ex run "
-            "-ex 'set logging on %s/%s' -ex 'bt' --return-child-result "
-            "--args %s",
-            runtime_dir, "gdb.bt", args);
         if (gdb == NULL)
             midori_error (_("Error: \"gdb\" can't be found\n"));
-        sokoke_spawn_program (gdb, TRUE, cmd, FALSE, TRUE);
+        sokoke_spawn_gdb (gdb, TRUE);
         g_free (gdb);
-        g_free (cmd);
-        g_free (args);
         return 0;
     }
 
diff --git a/midori/midori-frontend.c b/midori/midori-frontend.c
index af28e4a..d8198c8 100644
--- a/midori/midori-frontend.c
+++ b/midori/midori-frontend.c
@@ -304,7 +304,19 @@ midori_frontend_crash_log_cb (GtkWidget* button,
 {
     GError* error = NULL;
     if (!sokoke_show_uri (gtk_widget_get_screen (button), crash_log, 0, &error))
-        midori_error (error->message);
+    {
+        sokoke_message_dialog (GTK_MESSAGE_ERROR,
+                               _("Could not run external program."),
+                               error->message, FALSE);
+        g_error_free (error);
+    }
+}
+
+static void
+midori_frontend_debugger_cb (GtkWidget* button,
+                             GtkDialog* dialog)
+{
+    gtk_dialog_response (dialog, GTK_RESPONSE_HELP);
 }
 
 static MidoriStartup
@@ -367,6 +379,16 @@ midori_frontend_diagnostic_dialog (MidoriApp*         app,
     }
     else
         g_free (crash_log);
+
+    gchar* gdb = g_find_program_in_path ("gdb");
+    if (gdb != NULL)
+    {
+        GtkWidget* button = gtk_button_new_with_mnemonic (_("Run in _debugger"));
+        g_signal_connect (button, "clicked",
+            G_CALLBACK (midori_frontend_debugger_cb), dialog);
+        gtk_widget_show (button);
+        gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 4);
+    }
     gtk_dialog_set_default_response (GTK_DIALOG (dialog),
         load_on_startup == MIDORI_STARTUP_HOMEPAGE
         ? MIDORI_STARTUP_BLANK_PAGE : load_on_startup);
@@ -390,6 +412,11 @@ midori_frontend_diagnostic_dialog (MidoriApp*         app,
     gtk_widget_destroy (dialog);
     if (response == GTK_RESPONSE_DELETE_EVENT)
         response = G_MAXINT;
+    else if (response == GTK_RESPONSE_HELP)
+    {
+        sokoke_spawn_gdb (gdb, FALSE);
+        response = G_MAXINT;
+    }
     else if (response == MIDORI_STARTUP_BLANK_PAGE)
         katze_array_clear (session);
     return response;
diff --git a/midori/sokoke.c b/midori/sokoke.c
index 66636ba..bcc3c24 100644
--- a/midori/sokoke.c
+++ b/midori/sokoke.c
@@ -395,6 +395,22 @@ sokoke_spawn_program (const gchar* command,
 }
 
 void
+sokoke_spawn_gdb (const gchar* gdb,
+                  gboolean     sync)
+{
+    gchar* args = midori_paths_get_command_line_str (FALSE);
+    const gchar* runtime_dir = midori_paths_get_runtime_dir ();
+    gchar* cmd = g_strdup_printf (
+        "--batch -ex 'set print thread-events off' -ex run "
+        "-ex 'set logging on %s/%s' -ex 'bt' --return-child-result "
+        "--args %s",
+        runtime_dir, "gdb.bt", args);
+    sokoke_spawn_program (gdb, TRUE, cmd, FALSE, sync);
+    g_free (cmd);
+    g_free (args);
+}
+
+void
 sokoke_spawn_app (const gchar* uri,
                   gboolean     private)
 {
diff --git a/midori/sokoke.h b/midori/sokoke.h
index 7074b96..b7acae4 100644
--- a/midori/sokoke.h
+++ b/midori/sokoke.h
@@ -56,6 +56,10 @@ sokoke_spawn_program                    (const gchar* command,
                                          gboolean        sync);
 
 void
+sokoke_spawn_gdb                        (const gchar*    gdb,
+                                         gboolean        sync);
+
+void
 sokoke_spawn_app                        (const gchar*    uri,
                                          gboolean        inherit_config);
 


More information about the Xfce4-commits mailing list