[gnome-software] Unbreak animated row removal
- From: Kalev Lember <klember src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software] Unbreak animated row removal
- Date: Thu, 22 May 2014 11:28:59 +0000 (UTC)
commit 842337d3e45c56bbaaaf7f1aa5a42d82a7580b14
Author: Kalev Lember <kalevlember gmail com>
Date: Thu May 22 13:17:58 2014 +0200
Unbreak animated row removal
Animated row removal broke with the GsAppRow refactoring. This restores
the funcationality and moves the GtkRevealer handling to GsAppRow so
that callers don't have to poke at its internals.
src/gs-app-row.c | 42 ++++++++++++++++++++++++++++++++++++++++++
src/gs-app-row.h | 2 ++
src/gs-shell-installed.c | 39 +++++++--------------------------------
3 files changed, 51 insertions(+), 32 deletions(-)
---
diff --git a/src/gs-app-row.c b/src/gs-app-row.c
index ac2ef5f..3abfd5a 100644
--- a/src/gs-app-row.c
+++ b/src/gs-app-row.c
@@ -60,6 +60,7 @@ enum {
enum {
SIGNAL_BUTTON_CLICKED,
+ SIGNAL_UNREVEALED,
SIGNAL_LAST
};
@@ -250,6 +251,40 @@ gs_app_row_refresh (GsAppRow *app_row)
}
}
+static void
+child_unrevealed (GObject *revealer, GParamSpec *pspec, gpointer user_data)
+{
+ GsAppRow *app_row = user_data;
+
+ g_signal_emit (app_row, signals[SIGNAL_UNREVEALED], 0);
+}
+
+void
+gs_app_row_unreveal (GsAppRow *app_row)
+{
+ GtkWidget *child;
+ GtkWidget *revealer;
+
+ g_return_if_fail (GS_IS_APP_ROW (app_row));
+
+ child = gtk_bin_get_child (GTK_BIN (app_row));
+ gtk_widget_set_sensitive (child, FALSE);
+
+ revealer = gtk_revealer_new ();
+ gtk_revealer_set_reveal_child (GTK_REVEALER (revealer), TRUE);
+ gtk_widget_show (revealer);
+
+ g_object_ref (child);
+ gtk_container_remove (GTK_CONTAINER (app_row), child);
+ gtk_container_add (GTK_CONTAINER (revealer), child);
+ g_object_unref (child);
+
+ gtk_container_add (GTK_CONTAINER (app_row), revealer);
+ g_signal_connect (revealer, "notify::child-revealed",
+ G_CALLBACK (child_unrevealed), app_row);
+ gtk_revealer_set_reveal_child (GTK_REVEALER (revealer), FALSE);
+}
+
/**
* gs_app_row_get_app:
**/
@@ -356,6 +391,13 @@ gs_app_row_class_init (GsAppRowClass *klass)
NULL, NULL, g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
+ signals [SIGNAL_UNREVEALED] =
+ g_signal_new ("unrevealed",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsAppRowClass, unrevealed),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/software/gs-app-row.ui");
gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, image);
diff --git a/src/gs-app-row.h b/src/gs-app-row.h
index d3f4ca4..41cf825 100644
--- a/src/gs-app-row.h
+++ b/src/gs-app-row.h
@@ -51,11 +51,13 @@ struct _GsAppRowClass
{
GtkListBoxRowClass parent_class;
void (*button_clicked) (GsAppRow *app_row);
+ void (*unrevealed) (GsAppRow *app_row);
};
GType gs_app_row_get_type (void);
GtkWidget *gs_app_row_new (void);
void gs_app_row_refresh (GsAppRow *app_row);
+void gs_app_row_unreveal (GsAppRow *app_row);
void gs_app_row_set_colorful (GsAppRow *app_row,
gboolean colorful);
void gs_app_row_set_show_update (GsAppRow *app_row,
diff --git a/src/gs-shell-installed.c b/src/gs-shell-installed.c
index 881c2e2..84bdea4 100644
--- a/src/gs-shell-installed.c
+++ b/src/gs-shell-installed.c
@@ -37,8 +37,6 @@
#define INSTALL_DATE_INSTALLING (G_MAXUINT - 2)
static void gs_shell_installed_finalize (GObject *object);
-static void gs_shell_installed_remove_row (GtkListBox *list_box,
- GtkWidget *child);
struct GsShellInstalledPrivate
{
@@ -99,36 +97,12 @@ typedef struct {
} GsShellInstalledHelper;
static void
-row_unrevealed (GObject *revealer, GParamSpec *pspec, gpointer data)
+row_unrevealed (GObject *row, GParamSpec *pspec, gpointer data)
{
- GtkWidget *row, *list;
+ GtkWidget *list;
- row = gtk_widget_get_parent (GTK_WIDGET (revealer));
- list = gtk_widget_get_parent (row);
-
- gtk_container_remove (GTK_CONTAINER (list), row);
-}
-
-static void
-gs_shell_installed_remove_row (GtkListBox *list_box, GtkWidget *child)
-{
- GtkWidget *row, *revealer;
-
- gtk_widget_set_sensitive (child, FALSE);
- row = gtk_widget_get_parent (child);
- revealer = gtk_revealer_new ();
- gtk_revealer_set_reveal_child (GTK_REVEALER (revealer), TRUE);
- gtk_widget_show (revealer);
-
- g_object_ref (child);
- gtk_container_remove (GTK_CONTAINER (row), child);
- gtk_container_add (GTK_CONTAINER (revealer), child);
- g_object_unref (child);
-
- gtk_container_add (GTK_CONTAINER (row), revealer);
- g_signal_connect (revealer, "notify::child-revealed",
- G_CALLBACK (row_unrevealed), NULL);
- gtk_revealer_set_reveal_child (GTK_REVEALER (revealer), FALSE);
+ list = gtk_widget_get_parent (GTK_WIDGET (row));
+ gtk_container_remove (GTK_CONTAINER (list), GTK_WIDGET (row));
}
/**
@@ -163,8 +137,9 @@ gs_shell_installed_app_removed_cb (GObject *source,
/* remove from the list */
app = gs_app_row_get_app (helper->app_row);
g_debug ("removed %s", gs_app_get_id (app));
- gs_shell_installed_remove_row (GTK_LIST_BOX (priv->list_box_install),
- GTK_WIDGET (helper->app_row));
+ gs_app_row_unreveal (helper->app_row);
+ g_signal_connect (helper->app_row, "unrevealed",
+ G_CALLBACK (row_unrevealed), NULL);
}
g_object_unref (helper->app_row);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]