Author: kelnos
Date: 2006-07-29 21:07:27 +0000 (Sat, 29 Jul 2006)
New Revision: 22561

Modified:
   xfce-utils/trunk/xfrun/xfrun-dbus.c
   xfce-utils/trunk/xfrun/xfrun-dialog.c
Log:
* fix dialog positioning when running fallback dialog (when the dbus service
  can't be contacted)
* fix command parsing so arguments can be passed to commands in the dialog
  box (bug 2085)


Modified: xfce-utils/trunk/xfrun/xfrun-dbus.c
===================================================================
--- xfce-utils/trunk/xfrun/xfrun-dbus.c 2006-07-29 20:04:54 UTC (rev 22560)
+++ xfce-utils/trunk/xfrun/xfrun-dbus.c 2006-07-29 21:07:27 UTC (rev 22561)
@@ -97,6 +97,7 @@
     
     gdpy = g_hash_table_lookup(open_displays, display_name);
     if(!gdpy) {
+        DBG("couldn't find display '%s'; opening a new one", display_name);
         gdpy = gdk_display_open(display_name);
         if(gdpy)
             g_hash_table_insert(open_displays, g_strdup(display_name), gdpy);
@@ -389,6 +390,7 @@
                                               TRUE);
             g_signal_connect(G_OBJECT(fallback_dialog), "destroy",
                              G_CALLBACK(gtk_main_quit), NULL);
+            
xfce_gtk_window_center_on_monitor_with_pointer(GTK_WINDOW(fallback_dialog));
             gtk_widget_show(fallback_dialog);
             
             gtk_main();

Modified: xfce-utils/trunk/xfrun/xfrun-dialog.c
===================================================================
--- xfce-utils/trunk/xfrun/xfrun-dialog.c       2006-07-29 20:04:54 UTC (rev 
22560)
+++ xfce-utils/trunk/xfrun/xfrun-dialog.c       2006-07-29 21:07:27 UTC (rev 
22561)
@@ -607,46 +607,66 @@
                   gpointer user_data)
 {
     XfrunDialog *dialog = XFRUN_DIALOG(user_data);
-    gchar *entry_str, **argv;
+    gchar *cmdline, **argv = NULL;
     gboolean in_terminal;
     GdkScreen *gscreen;
     GError *error = NULL;
-    gint i = 0;
+    gint argc;
     
-    entry_str = gtk_editable_get_chars(GTK_EDITABLE(dialog->priv->entry), 0, 
-1);
+    cmdline = gtk_editable_get_chars(GTK_EDITABLE(dialog->priv->entry), 0, -1);
     in_terminal = 
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->priv->terminal_chk));
     
     gscreen = gtk_widget_get_screen(widget);
     
-    argv = g_new0(gchar *, 5);
+    if(dialog->priv->run_argument) {
+        gchar *new_cmdline, *run_arg_quoted;
+        
+        run_arg_quoted = g_shell_quote(dialog->priv->run_argument);
+        new_cmdline = g_strconcat(cmdline, " ", run_arg_quoted, NULL);
+        
+        g_free(run_arg_quoted);
+        g_free(cmdline);
+        cmdline = new_cmdline;
+    }
     
     if(in_terminal) {
+        gint i = 0;
+        
+        argv = g_new0(gchar *, 4);
         argv[i++] = "xfterm4";
         argv[i++] = "-e";
+        argv[i++] = cmdline;
+        argv[i++] = NULL;
+    } else {
+        /* error is handled below */
+        g_shell_parse_argv(cmdline, &argc, &argv, &error);
     }
-    argv[i++] = entry_str;
-    if(dialog->priv->run_argument)
-        argv[i++] = dialog->priv->run_argument;
-    argv[i++] = NULL;
     
-    if(xfce_gdk_spawn_on_screen(gscreen, dialog->priv->working_directory,
-                                argv, NULL, G_SPAWN_SEARCH_PATH,
-                                xfrun_spawn_child_setup, NULL, NULL, &error))
+    if(argv && xfce_gdk_spawn_on_screen(gscreen,
+                                        dialog->priv->working_directory,
+                                        argv, NULL, G_SPAWN_SEARCH_PATH,
+                                        xfrun_spawn_child_setup, NULL, NULL,
+                                        &error))
     {
-        xfrun_add_to_history(entry_str, in_terminal);
+        xfrun_add_to_history(cmdline, in_terminal);
         xfrun_dialog_delete_event(GTK_WIDGET(dialog), NULL);
     } else {
         gchar *primary = g_strdup_printf(_("The command \"%s\" failed to 
run:"),
-                                         entry_str);
+                                         cmdline);
         xfce_message_dialog(GTK_WINDOW(dialog), _("Run Error"),
-                            GTK_STOCK_DIALOG_ERROR, primary, error->message,
+                            GTK_STOCK_DIALOG_ERROR, primary,
+                            error ? error->message : _("Unknown Error"),
                             GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT, NULL);
         g_free(primary);
-        g_error_free(error);
+        if(error)
+            g_error_free(error);
     }
     
-    g_free(entry_str);
-    g_free(argv);
+    g_free(cmdline);
+    if(in_terminal)
+        g_free(argv);
+    else
+        g_strfreev(argv);
 }
 
 static gboolean

_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to