Author: kelnos
Date: 2006-07-21 04:06:39 +0000 (Fri, 21 Jul 2006)
New Revision: 22502

Modified:
   xfce-utils/trunk/xfrun/xfrun-dbus.c
   xfce-utils/trunk/xfrun/xfrun-dialog.c
Log:
* fix returning focus to the entry widget if the box is canceled
* unref the dbus connection (patch from nick schermer).  not really necessary,
  but can't hurt.
* if the xfrun4 client can't contact the dbus session bus, pop up a dialog
  on our own


Modified: xfce-utils/trunk/xfrun/xfrun-dbus.c
===================================================================
--- xfce-utils/trunk/xfrun/xfrun-dbus.c 2006-07-20 23:18:31 UTC (rev 22501)
+++ xfce-utils/trunk/xfrun/xfrun-dbus.c 2006-07-21 04:06:39 UTC (rev 22502)
@@ -288,6 +288,7 @@
     }
     
     dbus_message_unref(result);
+    dbus_connection_unref(connection);
     
     return TRUE;
 }
@@ -314,15 +315,24 @@
     dbus_message_unref(method);
     if(result)
         dbus_message_unref(result);
+    
+    dbus_connection_unref(connection);
 }
 
 int
 main(int argc,
      char **argv)
 {
+    gboolean have_gtk = gtk_init_check(&argc, &argv);
+    
     if(argc > 1 && !strcmp(argv[1], "--quit"))
         xfrun_send_quit();
     else if(argc > 1 && !strcmp(argv[1], "--daemon")) {
+        if(!have_gtk) {
+            g_critical("GTK is not available, failing.");
+            return 1;
+        }
+        
         if(argc == 2 || strcmp(argv[2], "--no-detach")) {  /* for debugging 
purposes... */
 #ifdef HAVE_DAEMON
             if(daemon(1, 1)) {
@@ -356,8 +366,6 @@
 #endif
         }
         
-        gtk_init(&argc, &argv);
-        
         static_dialog = xfrun_dialog_new(NULL);
         xfrun_dialog_set_destroy_on_close(XFRUN_DIALOG(static_dialog), FALSE);
         g_signal_connect(G_OBJECT(static_dialog), "closed",
@@ -368,9 +376,23 @@
         
         gtk_main();
     } else {
-        gdk_init(&argc, &argv);
+        if(!have_gtk) {
+            g_critical("GTK is not available, failing.");
+            return 1;
+        }
         
-        xfrun_show_dialog(argc > 1 ? argv[1] : NULL);
+        if(!xfrun_show_dialog(argc > 1 ? argv[1] : NULL)) {
+            GtkWidget *fallback_dialog = xfrun_dialog_new(argc > 1
+                                                          ? argv[1]
+                                                          : NULL);
+            xfrun_dialog_set_destroy_on_close(XFRUN_DIALOG(fallback_dialog),
+                                              TRUE);
+            g_signal_connect(G_OBJECT(fallback_dialog), "destroy",
+                             G_CALLBACK(gtk_main_quit), NULL);
+            gtk_widget_show(fallback_dialog);
+            
+            gtk_main();
+        }
     }
     
     return 0;

Modified: xfce-utils/trunk/xfrun/xfrun-dialog.c
===================================================================
--- xfce-utils/trunk/xfrun/xfrun-dialog.c       2006-07-20 23:18:31 UTC (rev 
22501)
+++ xfce-utils/trunk/xfrun/xfrun-dialog.c       2006-07-21 04:06:39 UTC (rev 
22502)
@@ -320,8 +320,12 @@
     
     if(dialog->priv->destroy_on_close)
         gtk_widget_destroy(widget);
-    else
+    else {
+        /* assume we're going to use this again */
+        xfrun_setup_entry_completion(dialog);
+        gtk_widget_grab_focus(dialog->priv->entry);
         gtk_widget_hide(widget);
+    }
     
     return TRUE;
 }
@@ -630,11 +634,6 @@
                                 xfrun_spawn_child_setup, NULL, NULL, &error))
     {
         xfrun_add_to_history(entry_str, in_terminal);
-        if(!dialog->priv->destroy_on_close) {
-            /* assume we're going to use this again */
-            xfrun_setup_entry_completion(dialog);
-            gtk_widget_grab_focus(dialog->priv->entry);
-        }
         xfrun_dialog_delete_event(GTK_WIDGET(dialog), NULL);
     } else {
         gchar *primary = g_strdup_printf(_("The command \"%s\" failed to 
run:"),

_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to