[gnome-flashback] desktop: add ready signals
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-flashback] desktop: add ready signals
- Date: Tue, 29 Oct 2019 13:31:46 +0000 (UTC)
commit a3d90c0e82d253e7fe6464ad219cc94b93d41c8b
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Tue Oct 29 00:55:12 2019 +0200
desktop: add ready signals
Signals will be used to show desktop window when background is
ready to avoid visual problems.
gnome-flashback/libdesktop/gf-background.c | 18 +++++++++++
gnome-flashback/libdesktop/gf-desktop-window.c | 45 ++++++++++++++++++++++++++
gnome-flashback/libdesktop/gf-desktop-window.h | 6 ++--
gnome-flashback/libdesktop/gf-desktop.c | 12 +++++++
4 files changed, 79 insertions(+), 2 deletions(-)
---
diff --git a/gnome-flashback/libdesktop/gf-background.c b/gnome-flashback/libdesktop/gf-background.c
index 4e19853..6494814 100644
--- a/gnome-flashback/libdesktop/gf-background.c
+++ b/gnome-flashback/libdesktop/gf-background.c
@@ -36,6 +36,15 @@ enum
static GParamSpec *background_properties[LAST_PROP] = { NULL };
+enum
+{
+ READY,
+
+ LAST_SIGNAL
+};
+
+static guint background_signals[LAST_SIGNAL] = { 0 };
+
G_DEFINE_TYPE (GfBackground, gf_background, G_TYPE_OBJECT)
static void
@@ -76,6 +85,14 @@ install_properties (GObjectClass *object_class)
background_properties);
}
+static void
+install_signals (void)
+{
+ background_signals[READY] =
+ g_signal_new ("ready", GF_TYPE_BACKGROUND, G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL, NULL, G_TYPE_NONE, 0);
+}
+
static void
gf_background_class_init (GfBackgroundClass *self_class)
{
@@ -86,6 +103,7 @@ gf_background_class_init (GfBackgroundClass *self_class)
object_class->set_property = gf_background_set_property;
install_properties (object_class);
+ install_signals ();
}
static void
diff --git a/gnome-flashback/libdesktop/gf-desktop-window.c b/gnome-flashback/libdesktop/gf-desktop-window.c
index 1bd2e40..5dc0c89 100644
--- a/gnome-flashback/libdesktop/gf-desktop-window.c
+++ b/gnome-flashback/libdesktop/gf-desktop-window.c
@@ -30,6 +30,8 @@ struct _GfDesktopWindow
gboolean show_icons;
GtkWidget *icon_view;
+
+ gboolean ready;
};
enum
@@ -44,8 +46,34 @@ enum
static GParamSpec *window_properties[LAST_PROP] = { NULL };
+enum
+{
+ READY,
+
+ LAST_SIGNAL
+};
+
+static guint window_signals[LAST_SIGNAL] = { 0 };
+
G_DEFINE_TYPE (GfDesktopWindow, gf_desktop_window, GTK_TYPE_WINDOW)
+static void
+emit_ready (GfDesktopWindow *self)
+{
+ if (self->ready)
+ return;
+
+ g_signal_emit (self, window_signals[READY], 0);
+ self->ready = TRUE;
+}
+
+static void
+ready_cb (GfBackground *background,
+ GfDesktopWindow *self)
+{
+ emit_ready (self);
+}
+
static void
draw_background_changed (GfDesktopWindow *self)
{
@@ -53,6 +81,8 @@ draw_background_changed (GfDesktopWindow *self)
{
g_assert (self->background == NULL);
self->background = gf_background_new (GTK_WIDGET (self));
+
+ g_signal_connect (self->background, "ready", G_CALLBACK (ready_cb), self);
}
else
{
@@ -181,6 +211,14 @@ install_properties (GObjectClass *object_class)
g_object_class_install_properties (object_class, LAST_PROP, window_properties);
}
+static void
+install_signals (void)
+{
+ window_signals[READY] =
+ g_signal_new ("ready", GF_TYPE_DESKTOP_WINDOW, G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL, NULL, G_TYPE_NONE, 0);
+}
+
static void
gf_desktop_window_class_init (GfDesktopWindowClass *self_class)
{
@@ -193,6 +231,7 @@ gf_desktop_window_class_init (GfDesktopWindowClass *self_class)
object_class->set_property = gf_desktop_window_set_property;
install_properties (object_class);
+ install_signals ();
}
static void
@@ -218,3 +257,9 @@ gf_desktop_window_new (gboolean draw_background,
"show-icons", show_icons,
NULL);
}
+
+gboolean
+gf_desktop_window_is_ready (GfDesktopWindow *self)
+{
+ return self->ready;
+}
diff --git a/gnome-flashback/libdesktop/gf-desktop-window.h b/gnome-flashback/libdesktop/gf-desktop-window.h
index d302152..51fda3f 100644
--- a/gnome-flashback/libdesktop/gf-desktop-window.h
+++ b/gnome-flashback/libdesktop/gf-desktop-window.h
@@ -26,8 +26,10 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (GfDesktopWindow, gf_desktop_window,
GF, DESKTOP_WINDOW, GtkWindow)
-GtkWidget *gf_desktop_window_new (gboolean draw_background,
- gboolean show_icons);
+GtkWidget *gf_desktop_window_new (gboolean draw_background,
+ gboolean show_icons);
+
+gboolean gf_desktop_window_is_ready (GfDesktopWindow *self);
G_END_DECLS
diff --git a/gnome-flashback/libdesktop/gf-desktop.c b/gnome-flashback/libdesktop/gf-desktop.c
index 03b9ae1..014d094 100644
--- a/gnome-flashback/libdesktop/gf-desktop.c
+++ b/gnome-flashback/libdesktop/gf-desktop.c
@@ -33,6 +33,13 @@ struct _GfDesktop
G_DEFINE_TYPE (GfDesktop, gf_desktop, G_TYPE_OBJECT)
+static void
+ready_cb (GfDesktopWindow *window,
+ GfDesktop *self)
+{
+ gtk_widget_show (self->window);
+}
+
static void
gf_desktop_dispose (GObject *object)
{
@@ -76,6 +83,11 @@ gf_desktop_init (GfDesktop *self)
g_settings_bind (self->settings, "show-icons",
self->window, "show-icons",
G_SETTINGS_BIND_GET);
+
+ if (!gf_desktop_window_is_ready (GF_DESKTOP_WINDOW (self->window)))
+ g_signal_connect (self->window, "ready", G_CALLBACK (ready_cb), self);
+ else
+ gtk_widget_show (self->window);
}
GfDesktop *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]