Blob Blame History Raw
--- notification-daemon-0.4.0/src/daemon/daemon.c.always-stack	2008-09-25 21:27:07.000000000 -0400
+++ notification-daemon-0.4.0/src/daemon/daemon.c	2009-09-23 02:44:22.721967819 -0400
@@ -1270,14 +1270,14 @@
 	}
 
 
-	if (window_xid != None)
+	if (window_xid != None && !theme_get_always_stack(nw))
 	{
 		/*
 		 * Do nothing here if we were passed an XID; we'll call
 		 * sync_notification_position later.
 		 */
 	}
-	else if (use_pos_data)
+	else if (use_pos_data && !theme_get_always_stack(nw))
 	{
 		/*
 		 * Typically, the theme engine will set its own position based on
@@ -1316,7 +1316,7 @@
 	 * for changes, and reposition the window based on the source
 	 * window.  We need to do this after return_id is calculated.
 	 */
-	if (window_xid != None)
+	if (window_xid != None && !theme_get_always_stack(nw))
 	{
 		monitor_notification_source_windows(daemon, nt, window_xid);
 		sync_notification_position(daemon, nw, window_xid);
--- notification-daemon-0.4.0/src/daemon/engines.h.always-stack	2008-03-14 19:11:43.000000000 -0400
+++ notification-daemon-0.4.0/src/daemon/engines.h	2009-09-23 02:16:32.615722273 -0400
@@ -21,5 +21,6 @@
 								   const char *key, GCallback cb);
 void theme_clear_notification_actions(GtkWindow *nw);
 void theme_move_notification(GtkWindow *nw, int x, int y);
+gboolean theme_get_always_stack(GtkWindow *nw);
 
 #endif /* _ENGINES_H_ */
--- notification-daemon-0.4.0/src/daemon/engines.c.always-stack	2008-11-20 05:45:16.000000000 -0500
+++ notification-daemon-0.4.0/src/daemon/engines.c	2009-09-23 02:16:32.614725140 -0400
@@ -30,6 +30,7 @@
 	void (*move_notification)(GtkWindow *nw, int x, int y);
 	void (*set_notification_timeout)(GtkWindow *nw, glong timeout);
 	void (*notification_tick)(GtkWindow *nw, glong timeout);
+	gboolean (*get_always_stack)(GtkWindow *nw);
 
 } ThemeEngine;
 
@@ -83,6 +84,7 @@
 	BIND_OPTIONAL_FUNC(set_notification_timeout);
 	BIND_OPTIONAL_FUNC(set_notification_hints);
 	BIND_OPTIONAL_FUNC(notification_tick);
+	BIND_OPTIONAL_FUNC(get_always_stack);
 
 	if (!engine->theme_check_init(NOTIFICATION_DAEMON_MAJOR_VERSION,
 								  NOTIFICATION_DAEMON_MINOR_VERSION,
@@ -290,3 +292,14 @@
 	ThemeEngine *engine = g_object_get_data(G_OBJECT(nw), "_theme_engine");
 	engine->move_notification(nw, x, y);
 }
+
+gboolean
+theme_get_always_stack(GtkWindow *nw)
+{
+	ThemeEngine *engine = g_object_get_data(G_OBJECT(nw), "_theme_engine");
+
+	if (engine->get_always_stack != NULL)
+		return engine->get_always_stack(nw);
+	else
+		return FALSE;
+}