[rhythmbox] entry-view: display status in a floating bar
- From: Jonathan Matthew <jmatthew src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rhythmbox] entry-view: display status in a floating bar
- Date: Mon, 23 Oct 2017 10:42:25 +0000 (UTC)
commit e9bc55cfa1061f30e7892c48d42436aae4a1ea60
Author: Jonathan Matthew <jonathan d14n org>
Date: Mon Oct 23 20:24:36 2017 +1000
entry-view: display status in a floating bar
This involves changing the parent class to GtkBox, which requires a
few changes elsewhere. The box contains an overlay, which then
contains the scrolled window, and also has a floating bar overlaid.
plugins/soundcloud/soundcloud.py | 3 +-
sources/rb-play-queue-source.c | 4 --
widgets/rb-entry-view.c | 59 ++++++++++++++++++++++++++++++++-----
widgets/rb-entry-view.h | 4 ++-
4 files changed, 55 insertions(+), 15 deletions(-)
---
diff --git a/plugins/soundcloud/soundcloud.py b/plugins/soundcloud/soundcloud.py
index 07834ba..7593f74 100644
--- a/plugins/soundcloud/soundcloud.py
+++ b/plugins/soundcloud/soundcloud.py
@@ -538,8 +538,7 @@ class SoundCloudSource(RB.StreamingSource):
self.songs = RB.EntryView(db=shell.props.db,
shell_player=shell.props.shell_player,
is_drag_source=True,
- is_drag_dest=False,
- shadow_type=Gtk.ShadowType.NONE)
+ is_drag_dest=False)
self.songs.append_column(RB.EntryViewColumn.TITLE, True)
self.songs.append_column(RB.EntryViewColumn.ARTIST, True)
self.songs.append_column(RB.EntryViewColumn.DURATION, True)
diff --git a/sources/rb-play-queue-source.c b/sources/rb-play-queue-source.c
index 677e40a..8c25971 100644
--- a/sources/rb-play-queue-source.c
+++ b/sources/rb-play-queue-source.c
@@ -280,10 +280,6 @@ rb_play_queue_source_constructed (GObject *object)
priv->sidebar = rb_entry_view_new (db, shell_player, TRUE, TRUE);
g_object_unref (shell_player);
- g_object_set (priv->sidebar,
- "vscrollbar-policy", GTK_POLICY_AUTOMATIC,
- "shadow-type", GTK_SHADOW_NONE,
- NULL);
gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (priv->sidebar)),
"sidebar-queue");
diff --git a/widgets/rb-entry-view.c b/widgets/rb-entry-view.c
index 922aeb9..2839909 100644
--- a/widgets/rb-entry-view.c
+++ b/widgets/rb-entry-view.c
@@ -94,6 +94,7 @@
#include "rb-cell-renderer-rating.h"
#include "rb-shell-player.h"
#include "rb-cut-and-paste-code.h"
+#include "nautilus-floating-bar.h"
static const GtkTargetEntry rb_entry_view_drag_types[] = {
{ "application/x-rhythmbox-entry", 0, 0 },
@@ -178,6 +179,9 @@ struct RBEntryViewPrivate
RhythmDBQueryModel *model;
+ GtkWidget *overlay;
+ GtkWidget *scrolled_window;
+ GtkWidget *status;
GtkWidget *treeview;
GtkTreeSelection *selection;
@@ -231,7 +235,7 @@ enum
PROP_VISIBLE_COLUMNS
};
-G_DEFINE_TYPE (RBEntryView, rb_entry_view, GTK_TYPE_SCROLLED_WINDOW)
+G_DEFINE_TYPE (RBEntryView, rb_entry_view, GTK_TYPE_BOX)
static guint rb_entry_view_signals[LAST_SIGNAL] = { 0 };
@@ -780,13 +784,9 @@ rb_entry_view_new (RhythmDB *db,
RBEntryView *view;
view = RB_ENTRY_VIEW (g_object_new (RB_TYPE_ENTRY_VIEW,
- "hadjustment", NULL,
- "vadjustment", NULL,
- "hscrollbar_policy", GTK_POLICY_AUTOMATIC,
- "vscrollbar_policy", GTK_POLICY_AUTOMATIC,
+ "orientation", GTK_ORIENTATION_VERTICAL,
"hexpand", TRUE,
"vexpand", TRUE,
- "shadow_type", GTK_SHADOW_NONE,
"db", db,
"shell-player", RB_SHELL_PLAYER (shell_player),
"is-drag-source", is_drag_source,
@@ -1794,7 +1794,23 @@ rb_entry_view_constructed (GObject *object)
view = RB_ENTRY_VIEW (object);
- view->priv->treeview = GTK_WIDGET (gtk_tree_view_new ());
+ view->priv->overlay = gtk_overlay_new ();
+ gtk_widget_set_vexpand (view->priv->overlay, TRUE);
+ gtk_widget_set_hexpand (view->priv->overlay, TRUE);
+ gtk_container_add (GTK_CONTAINER (view), view->priv->overlay);
+ gtk_widget_show (view->priv->overlay);
+
+ /* NautilusFloatingBar needs enter and leavy notify events */
+ gtk_widget_add_events (view->priv->overlay, GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK);
+
+ view->priv->scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (view->priv->scrolled_window),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (view->priv->scrolled_window),
GTK_SHADOW_NONE);
+ gtk_widget_show (view->priv->scrolled_window);
+ gtk_container_add (GTK_CONTAINER (view->priv->overlay), view->priv->scrolled_window);
+
+ view->priv->treeview = gtk_tree_view_new ();
gtk_tree_view_set_fixed_height_mode (GTK_TREE_VIEW (view->priv->treeview), TRUE);
gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW (view->priv->treeview),
@@ -1843,7 +1859,7 @@ rb_entry_view_constructed (GObject *object)
GDK_ACTION_COPY | GDK_ACTION_MOVE);
}
- gtk_container_add (GTK_CONTAINER (view), view->priv->treeview);
+ gtk_container_add (GTK_CONTAINER (view->priv->scrolled_window), view->priv->treeview);
{
GtkTreeViewColumn *column;
@@ -1889,6 +1905,12 @@ rb_entry_view_constructed (GObject *object)
query_model = rhythmdb_query_model_new_empty (view->priv->db);
rb_entry_view_set_model (view, RHYTHMDB_QUERY_MODEL (query_model));
g_object_unref (query_model);
+
+ view->priv->status = nautilus_floating_bar_new (NULL, NULL, FALSE);
+ gtk_widget_set_no_show_all (view->priv->status, TRUE);
+ gtk_widget_set_halign (view->priv->status, GTK_ALIGN_END);
+ gtk_widget_set_valign (view->priv->status, GTK_ALIGN_END);
+ gtk_overlay_add_overlay (GTK_OVERLAY (view->priv->overlay), view->priv->status);
}
static void
@@ -2605,6 +2627,27 @@ rb_entry_view_set_column_editable (RBEntryView *view,
g_list_free (renderers);
}
+/**
+ * rb_entry_view_set_status:
+ * @view: a #RBEntryView
+ * @status: status text to display, or NULL
+ * @busy: whether the source is busy
+ *
+ * Sets the status text to be displayed inside the entry view, and
+ * shows the spinner if busy.
+ */
+void
+rb_entry_view_set_status (RBEntryView *view, const char *status, gboolean busy)
+{
+ if (status == NULL) {
+ gtk_widget_hide (view->priv->status);
+ } else {
+ nautilus_floating_bar_set_primary_label (NAUTILUS_FLOATING_BAR (view->priv->status), status);
+ nautilus_floating_bar_set_show_spinner (NAUTILUS_FLOATING_BAR (view->priv->status), busy);
+ gtk_widget_show (view->priv->status);
+ }
+}
+
/* This should really be standard. */
#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC }
diff --git a/widgets/rb-entry-view.h b/widgets/rb-entry-view.h
index e60d400..a6116ab 100644
--- a/widgets/rb-entry-view.h
+++ b/widgets/rb-entry-view.h
@@ -83,7 +83,7 @@ typedef struct RBEntryViewPrivate RBEntryViewPrivate;
struct _RBEntryView
{
- GtkScrolledWindow parent;
+ GtkBox parent;
RBEntryViewPrivate *priv;
};
@@ -190,6 +190,8 @@ const char * rb_entry_view_get_time_date_column_sample (void);
/* resort the model with the current sorting order*/
void rb_entry_view_resort_model (RBEntryView *view);
+void rb_entry_view_set_status (RBEntryView *view, const char *status, gboolean
busy);
+
G_END_DECLS
#endif /* __RB_ENTRY_VIEW_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]