]> Dogcows Code - chaz/openbox/blobdiff - openbox/startupnotify.c
make startup notification a little more robust. obconf is just broken, between
[chaz/openbox] / openbox / startupnotify.c
index ebe6e6b3fdb8481f68057768b083a6291c33c355..dbb633ef17c4cafb65256669e4018bd0a8f93c10 100644 (file)
@@ -1,3 +1,22 @@
+/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
+
+   startupnotify.c for the Openbox window manager
+   Copyright (c) 2006        Mikael Magnusson
+   Copyright (c) 2003        Ben Jansens
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   See the COPYING file for a copy of the GNU General Public License.
+*/
+
 #include "startupnotify.h"
 
 #ifndef USE_LIBSN
@@ -145,8 +164,8 @@ static void sn_event_func(SnMonitorEvent *ev, gpointer data)
     case SN_MONITOR_EVENT_INITIATED:
         d = wait_data_new(seq);
         sn_waits = g_slist_prepend(sn_waits, d);
-        /* 30 second timeout for apps to start */
-        ob_main_loop_timeout_add(ob_main_loop, 30 * G_USEC_PER_SEC,
+        /* 15 second timeout for apps to start */
+        ob_main_loop_timeout_add(ob_main_loop, 15 * G_USEC_PER_SEC,
                                  sn_wait_timeout, d, sn_wait_destroy);
         change = TRUE;
         break;
@@ -158,7 +177,8 @@ static void sn_event_func(SnMonitorEvent *ev, gpointer data)
     case SN_MONITOR_EVENT_CANCELED:
         if ((d = wait_find(sn_startup_sequence_get_id(seq)))) {
             d->feedback = FALSE;
-            ob_main_loop_timeout_remove_data(ob_main_loop, sn_wait_timeout, d);
+            ob_main_loop_timeout_remove_data(ob_main_loop, sn_wait_timeout,
+                                             d, FALSE);
             change = TRUE;
         }
         break;
@@ -168,14 +188,17 @@ static void sn_event_func(SnMonitorEvent *ev, gpointer data)
         screen_set_root_cursor();
 }
 
-void sn_app_started(gchar *wmclass)
+void sn_app_started(const gchar *id, const gchar *wmclass)
 {
     GSList *it;
 
     for (it = sn_waits; it; it = g_slist_next(it)) {
         ObWaitData *d = it->data;
-        if (sn_startup_sequence_get_wmclass(d->seq) &&
-            !strcmp(sn_startup_sequence_get_wmclass(d->seq), wmclass))
+        const gchar *seqid, *seqclass;
+        seqid = sn_startup_sequence_get_id(d->seq);
+        seqclass = sn_startup_sequence_get_wmclass(d->seq);
+        if ((seqid && id && !strcmp(seqid, id)) ||
+            (seqclass && wmclass && !strcmp(seqclass, wmclass)))
         {
             sn_startup_sequence_complete(d->seq);
             break;
This page took 0.023203 seconds and 4 git commands to generate.