diff --git a/src/Makefile.am b/src/Makefile.am
index 5e08c1d61..2969f2ea0 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -314,6 +314,7 @@ libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \
meta/prefs.h \
core/startup-notification.c \
core/startup-notification-private.h \
+ meta/meta-startup-notification.h \
meta/types.h \
core/restart.c \
core/stack.c \
@@ -575,6 +576,7 @@ libmutterinclude_headers = \
meta/meta-shaped-texture.h \
meta/meta-shadow-factory.h \
meta/meta-stage.h \
+ meta/meta-startup-notification.h \
meta/meta-window-actor.h \
meta/meta-window-group.h \
meta/meta-window-shape.h \
diff --git a/src/core/display.c b/src/core/display.c
index 22e3c796b..6243bf73a 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -3644,3 +3644,9 @@ meta_display_get_workspace_manager (MetaDisplay *display)
{
return display->workspace_manager;
}
+
+MetaStartupNotification *
+meta_display_get_startup_notification (MetaDisplay *display)
+{
+ return display->startup_notification;
+}
diff --git a/src/core/startup-notification-private.h b/src/core/startup-notification-private.h
index 334a55608..849c5de62 100644
--- a/src/core/startup-notification-private.h
+++ b/src/core/startup-notification-private.h
@@ -26,11 +26,8 @@
#define META_STARTUP_NOTIFICATION_PRIVATE_H
#include "core/display-private.h"
+#include "meta/meta-startup-notification.h"
-#define META_TYPE_STARTUP_NOTIFICATION (meta_startup_notification_get_type ())
-#define META_TYPE_STARTUP_SEQUENCE (meta_startup_sequence_get_type ())
-
-typedef struct _MetaStartupSequence MetaStartupSequence;
typedef struct _MetaStartupSequenceClass MetaStartupSequenceClass;
struct _MetaStartupSequenceClass
@@ -63,6 +60,4 @@ MetaStartupSequence *
meta_startup_notification_lookup_sequence (MetaStartupNotification *sn,
const gchar *id);
-GSList * meta_startup_notification_get_sequences (MetaStartupNotification *sn);
-
#endif /* META_STARTUP_NOTIFICATION_PRIVATE_H */
diff --git a/src/core/startup-notification.c b/src/core/startup-notification.c
index 161c8c7b9..43260d59b 100644
--- a/src/core/startup-notification.c
+++ b/src/core/startup-notification.c
@@ -90,6 +90,7 @@ typedef struct {
char *id;
uint64_t timestamp;
int workspace;
+ uint completed : 1;
} MetaStartupSequencePrivate;
G_DEFINE_TYPE (MetaStartupNotification,
@@ -288,35 +289,113 @@ meta_startup_sequence_class_init (MetaStartupSequenceClass *klass)
g_object_class_install_properties (object_class, N_SEQ_PROPS, seq_props);
}
-static const gchar *
+const char *
meta_startup_sequence_get_id (MetaStartupSequence *seq)
{
MetaStartupSequencePrivate *priv;
+ g_return_val_if_fail (META_IS_STARTUP_SEQUENCE (seq), NULL);
+
priv = meta_startup_sequence_get_instance_private (seq);
return priv->id;
}
-static gint64
+uint64_t
meta_startup_sequence_get_timestamp (MetaStartupSequence *seq)
{
MetaStartupSequencePrivate *priv;
+ g_return_val_if_fail (META_IS_STARTUP_SEQUENCE (seq), 0);
+
priv = meta_startup_sequence_get_instance_private (seq);
return priv->timestamp;
}
-static void
+void
meta_startup_sequence_complete (MetaStartupSequence *seq)
{
MetaStartupSequenceClass *klass;
+ MetaStartupSequencePrivate *priv;
+ g_return_if_fail (META_IS_STARTUP_SEQUENCE (seq));
+
+ priv = meta_startup_sequence_get_instance_private (seq);
+ if (priv->completed)
+ return;
+
+ priv->completed = TRUE;
klass = META_STARTUP_SEQUENCE_GET_CLASS (seq);
if (klass->complete)
klass->complete (seq);
}
+gboolean
+meta_startup_sequence_get_completed (MetaStartupSequence *seq)
+{
+ MetaStartupSequencePrivate *priv;
+
+ g_return_val_if_fail (META_IS_STARTUP_SEQUENCE (seq), FALSE);
+
+ priv = meta_startup_sequence_get_instance_private (seq);
+ return priv->completed;
+}
+
+const char *
+meta_startup_sequence_get_name (MetaStartupSequence *seq)
+{
+ MetaStartupSequencePrivate *priv;
+
+ g_return_val_if_fail (META_IS_STARTUP_SEQUENCE (seq), NULL);
+
+ priv = meta_startup_sequence_get_instance_private (seq);
+ return priv->name;
+}
+
+int
+meta_startup_sequence_get_workspace (MetaStartupSequence *seq)
+{
+ MetaStartupSequencePrivate *priv;
+
+ g_return_val_if_fail (META_IS_STARTUP_SEQUENCE (seq), 0);
+
+ priv = meta_startup_sequence_get_instance_private (seq);
+ return priv->workspace;
+}
+
+const char *
+meta_startup_sequence_get_icon_name (MetaStartupSequence *seq)
+{
+ MetaStartupSequencePrivate *priv;
+
+ g_return_val_if_fail (META_IS_STARTUP_SEQUENCE (seq), NULL);
+
+ priv = meta_startup_sequence_get_instance_private (seq);
+ return priv->icon_name;
+}
+
+const char *
+meta_startup_sequence_get_application_id (MetaStartupSequence *seq)
+{
+ MetaStartupSequencePrivate *priv;
+
+ g_return_val_if_fail (META_IS_STARTUP_SEQUENCE (seq), NULL);
+
+ priv = meta_startup_sequence_get_instance_private (seq);
+ return priv->application_id;
+}
+
+const char *
+meta_startup_sequence_get_wmclass (MetaStartupSequence *seq)
+{
+ MetaStartupSequencePrivate *priv;
+
+ g_return_val_if_fail (META_IS_STARTUP_SEQUENCE (seq), NULL);
+
+ priv = meta_startup_sequence_get_instance_private (seq);
+ return priv->wmclass;
+}
+
void
meta_startup_notification_add_sequence (MetaStartupNotification *sn,
MetaStartupSequence *seq)
diff --git a/src/meta/display.h b/src/meta/display.h
index 3b58aaf23..d8e460499 100644
--- a/src/meta/display.h
+++ b/src/meta/display.h
@@ -27,6 +27,7 @@
#include
#include
#include
+#include
/**
* MetaTabList:
@@ -225,5 +226,6 @@ typedef enum
} MetaDisplayCorner;
MetaWorkspaceManager *meta_display_get_workspace_manager (MetaDisplay *display);
+MetaStartupNotification * meta_display_get_startup_notification (MetaDisplay *display);
#endif
diff --git a/src/meta/meson.build b/src/meta/meson.build
index 4fd1edc16..bdd77a08e 100644
--- a/src/meta/meson.build
+++ b/src/meta/meson.build
@@ -25,6 +25,7 @@ mutter_public_headers = [
'meta-shadow-factory.h',
'meta-shaped-texture.h',
'meta-stage.h',
+ 'meta-startup-notification.h',
'meta-window-actor.h',
'meta-window-group.h',
'meta-window-shape.h',
diff --git a/src/meta/meta-startup-notification.h b/src/meta/meta-startup-notification.h
new file mode 100644
index 000000000..da2d60ab5
--- /dev/null
+++ b/src/meta/meta-startup-notification.h
@@ -0,0 +1,45 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+/*
+ * Copyright (C) 2018 Red Hat, Inc
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+
+#ifndef META_STARTUP_NOTIFICATION_H
+#define META_STARTUP_NOTIFICATION_H
+
+#define META_TYPE_STARTUP_SEQUENCE (meta_startup_sequence_get_type ())
+#define META_TYPE_STARTUP_NOTIFICATION (meta_startup_notification_get_type ())
+
+typedef struct _MetaStartupNotification MetaStartupNotification;
+typedef struct _MetaStartupSequence MetaStartupSequence;
+
+GType meta_startup_notification_get_type (void);
+
+GSList * meta_startup_notification_get_sequences (MetaStartupNotification *sn);
+
+GType meta_startup_sequence_get_type (void);
+
+const char * meta_startup_sequence_get_id (MetaStartupSequence *sequence);
+gboolean meta_startup_sequence_get_completed (MetaStartupSequence *sequence);
+const char * meta_startup_sequence_get_name (MetaStartupSequence *sequence);
+int meta_startup_sequence_get_workspace (MetaStartupSequence *sequence);
+uint64_t meta_startup_sequence_get_timestamp (MetaStartupSequence *sequence);
+const char * meta_startup_sequence_get_icon_name (MetaStartupSequence *sequence);
+const char * meta_startup_sequence_get_application_id (MetaStartupSequence *sequence);
+const char * meta_startup_sequence_get_wmclass (MetaStartupSequence *sequence);
+
+void meta_startup_sequence_complete (MetaStartupSequence *sequence);
+
+#endif /* META_STARTUP_NOTIFICATION_H */