[rhythmbox] new location for plugin UI elements: right side pane (bug #584182)
- From: Jonathan Matthew <jmatthew src gnome org>
- To: svn-commits-list gnome org
- Subject: [rhythmbox] new location for plugin UI elements: right side pane (bug #584182)
- Date: Sun, 7 Jun 2009 10:24:30 -0400 (EDT)
commit 48e0d44c14ece84f214c2335e3362ff5409041e4
Author: John Iacona <plate0salad gmail com>
Date: Mon Jun 8 00:19:49 2009 +1000
new location for plugin UI elements: right side pane (bug #584182)
This is slightly more complicated than the existing UI locations as it
has a user-controllable width (via GtkPaned) and needs to be hidden when
empty.
---
bindings/python/rb.defs | 1 +
data/rhythmbox.schemas | 11 +++++++++++
lib/rb-preferences.h | 1 +
shell/rb-shell.c | 45 ++++++++++++++++++++++++++++++++++++++++++---
shell/rb-shell.h | 1 +
5 files changed, 56 insertions(+), 3 deletions(-)
diff --git a/bindings/python/rb.defs b/bindings/python/rb.defs
index ef006cb..d55e475 100644
--- a/bindings/python/rb.defs
+++ b/bindings/python/rb.defs
@@ -278,6 +278,7 @@
(gtype-id "RB_TYPE_SHELL_UI_LOCATION")
(values
'("sidebar" "RB_SHELL_UI_LOCATION_SIDEBAR")
+ '("right-sidebar" "RB_SHELL_UI_LOCATION_RIGHT_SIDEBAR")
'("main-top" "RB_SHELL_UI_LOCATION_MAIN_TOP")
'("main-bottom" "RB_SHELL_UI_LOCATION_MAIN_BOTTOM")
'("main-notebook" "RB_SHELL_UI_LOCATION_MAIN_NOTEBOOK")
diff --git a/data/rhythmbox.schemas b/data/rhythmbox.schemas
index dc240f7..52eb5fb 100644
--- a/data/rhythmbox.schemas
+++ b/data/rhythmbox.schemas
@@ -135,6 +135,17 @@
</locale>
</schema>
<schema>
+ <key>/schemas/apps/rhythmbox/state/right_paned_position</key>
+ <applyto>/apps/rhythmbox/state/right_paned_position</applyto>
+ <owner>rhythmbox</owner>
+ <type>int</type>
+ <default>400</default>
+ <locale name="C">
+ <short>Position of the right pane</short>
+ <long>Position of the right pane</long>
+ </locale>
+ </schema>
+ <schema>
<key>/schemas/apps/rhythmbox/state/window_width</key>
<applyto>/apps/rhythmbox/state/window_width</applyto>
<owner>rhythmbox</owner>
diff --git a/lib/rb-preferences.h b/lib/rb-preferences.h
index 94b8ed9..6a7dfcb 100644
--- a/lib/rb-preferences.h
+++ b/lib/rb-preferences.h
@@ -43,6 +43,7 @@ G_BEGIN_DECLS
#define CONF_UI_TOOLBAR_STYLE CONF_PREFIX "/ui/toolbar_style"
#define CONF_UI_SONG_POSITION_SLIDER_HIDDEN CONF_PREFIX "/ui/song_position_slider_hidden"
#define CONF_UI_SIDEPANE_HIDDEN CONF_PREFIX "/ui/sourcelist_hidden"
+#define CONF_UI_RSIDEPANE_HIDDEN CONF_PREFIX "/ui/rsidebar_hidden"
#define CONF_UI_QUEUE_AS_SIDEBAR CONF_PREFIX "/ui/queue_as_sidebar"
#define CONF_UI_SMALL_DISPLAY CONF_PREFIX "/ui/small_display"
#define CONF_UI_FULLSCREEN CONF_PREFIX "/ui/fullscreen"
diff --git a/shell/rb-shell.c b/shell/rb-shell.c
index 2d2c23c..6d0c9ad 100644
--- a/shell/rb-shell.c
+++ b/shell/rb-shell.c
@@ -269,8 +269,9 @@ enum
#define CONF_STATE_WINDOW_HEIGHT CONF_PREFIX "/state/window_height"
#define CONF_STATE_SMALL_WIDTH CONF_PREFIX "/state/small_width"
#define CONF_STATE_WINDOW_MAXIMIZED CONF_PREFIX "/state/window_maximized"
-#define CONF_STATE_PANED_POSITION CONF_PREFIX "/state/paned_position"
#define CONF_STATE_ADD_DIR CONF_PREFIX "/state/add_dir"
+#define CONF_STATE_PANED_POSITION CONF_PREFIX "/state/paned_position"
+#define CONF_STATE_RIGHT_PANED_POSITION CONF_PREFIX "/state/right_paned_position"
#define CONF_STATE_WINDOW_X_POSITION CONF_PREFIX "/state/window_x_position"
#define CONF_STATE_WINDOW_Y_POSITION CONF_PREFIX "/state/window_y_position"
#define CONF_STATE_SOURCELIST_HEIGHT CONF_PREFIX "/state/sourcelist_height"
@@ -301,14 +302,17 @@ struct RBShellPrivate
GtkWidget *main_vbox;
GtkWidget *paned;
+ GtkWidget *right_paned;
GtkWidget *sourcelist;
GtkWidget *notebook;
GtkWidget *queue_paned;
GtkWidget *queue_sidebar;
GtkBox *sidebar_container;
+ GtkBox *right_sidebar_container;
GtkBox *top_container;
GtkBox *bottom_container;
+ guint right_sidebar_widget_count;
GList *sources;
GHashTable *sources_hash;
@@ -377,6 +381,7 @@ struct RBShellPrivate
gint window_x;
gint window_y;
gint paned_position;
+ gint right_paned_position;
gint sourcelist_height;
};
@@ -1115,9 +1120,17 @@ construct_widgets (RBShell *shell)
shell->priv->top_container = GTK_BOX (gtk_vbox_new (FALSE, 0));
shell->priv->bottom_container = GTK_BOX (gtk_vbox_new (FALSE, 0));
shell->priv->sidebar_container = GTK_BOX (gtk_vbox_new (FALSE, 0));
+ shell->priv->right_sidebar_container = GTK_BOX (gtk_vbox_new (FALSE, 0));
/* set up sidebars */
shell->priv->paned = gtk_hpaned_new ();
+ shell->priv->right_paned = gtk_hpaned_new ();
+ gtk_widget_show_all (shell->priv->right_paned);
+ g_signal_connect_object (G_OBJECT (shell->priv->right_paned),
+ "size-allocate",
+ G_CALLBACK (paned_size_allocate_cb),
+ shell, 0);
+ gtk_widget_set_no_show_all (shell->priv->right_paned, TRUE);
{
GtkWidget *vbox2 = gtk_vbox_new (FALSE, 0);
@@ -1143,13 +1156,21 @@ construct_widgets (RBShell *shell)
GTK_WIDGET (shell->priv->bottom_container),
FALSE, FALSE, 0);
- gtk_box_pack_start (shell->priv->sidebar_container, shell->priv->queue_paned,
+ gtk_paned_pack1 (GTK_PANED (shell->priv->right_paned),
+ vbox2, TRUE, TRUE);
+ gtk_paned_pack2 (GTK_PANED (shell->priv->right_paned),
+ GTK_WIDGET (shell->priv->right_sidebar_container),
+ FALSE, TRUE);
+ gtk_widget_hide (GTK_WIDGET(shell->priv->right_sidebar_container));
+
+ gtk_box_pack_start (shell->priv->sidebar_container,
+ shell->priv->queue_paned,
TRUE, TRUE, 0);
gtk_paned_pack1 (GTK_PANED (shell->priv->paned),
GTK_WIDGET (shell->priv->sidebar_container),
FALSE, TRUE);
gtk_paned_pack2 (GTK_PANED (shell->priv->paned),
- vbox2,
+ shell->priv->right_paned,
TRUE, TRUE);
gtk_widget_show (vbox2);
}
@@ -1367,6 +1388,7 @@ rb_shell_constructor (GType type,
shell->priv->window_x = eel_gconf_get_integer (CONF_STATE_WINDOW_X_POSITION);
shell->priv->window_y = eel_gconf_get_integer (CONF_STATE_WINDOW_Y_POSITION);
shell->priv->paned_position = eel_gconf_get_integer (CONF_STATE_PANED_POSITION);
+ shell->priv->right_paned_position = eel_gconf_get_integer (CONF_STATE_RIGHT_PANED_POSITION);
shell->priv->sourcelist_height = eel_gconf_get_integer (CONF_STATE_SOURCELIST_HEIGHT);
shell->priv->statusbar_hidden = eel_gconf_get_boolean (CONF_UI_STATUSBAR_HIDDEN);
@@ -2635,6 +2657,8 @@ smalldisplay_changed_cb (GConfClient *client,
static void
rb_shell_sync_paned (RBShell *shell)
{
+ gtk_paned_set_position (GTK_PANED (shell->priv->right_paned),
+ shell->priv->right_paned_position);
gtk_paned_set_position (GTK_PANED (shell->priv->paned),
shell->priv->paned_position);
gtk_paned_set_position (GTK_PANED (shell->priv->queue_paned),
@@ -2647,8 +2671,11 @@ paned_size_allocate_cb (GtkWidget *widget,
RBShell *shell)
{
shell->priv->paned_position = gtk_paned_get_position (GTK_PANED (shell->priv->paned));
+ shell->priv->right_paned_position = gtk_paned_get_position (GTK_PANED (shell->priv->right_paned));
rb_debug ("paned position %d", shell->priv->paned_position);
+ rb_debug ("right_paned position %d", shell->priv->right_paned_position);
eel_gconf_set_integer (CONF_STATE_PANED_POSITION, shell->priv->paned_position);
+ eel_gconf_set_integer (CONF_STATE_RIGHT_PANED_POSITION, shell->priv->right_paned_position);
}
static void
@@ -3220,6 +3247,9 @@ rb_shell_get_box_for_ui_location (RBShell *shell, RBShellUILocation location)
case RB_SHELL_UI_LOCATION_SIDEBAR:
box = shell->priv->sidebar_container;
break;
+ case RB_SHELL_UI_LOCATION_RIGHT_SIDEBAR:
+ box = shell->priv->right_sidebar_container;
+ break;
case RB_SHELL_UI_LOCATION_MAIN_TOP:
box = shell->priv->top_container;
break;
@@ -3244,6 +3274,10 @@ rb_shell_add_widget (RBShell *shell, GtkWidget *widget, RBShellUILocation locati
widget,
gtk_label_new (""));
break;
+ case RB_SHELL_UI_LOCATION_RIGHT_SIDEBAR:
+ if (!shell->priv->right_sidebar_widget_count)
+ gtk_widget_show (GTK_WIDGET (shell->priv->right_sidebar_container));
+ shell->priv->right_sidebar_widget_count++;
default:
box = rb_shell_get_box_for_ui_location (shell, location);
g_return_if_fail (box != NULL);
@@ -3267,6 +3301,10 @@ rb_shell_remove_widget (RBShell *shell, GtkWidget *widget, RBShellUILocation loc
gtk_notebook_remove_page (GTK_NOTEBOOK (shell->priv->notebook),
page_num);
break;
+ case RB_SHELL_UI_LOCATION_RIGHT_SIDEBAR:
+ shell->priv->right_sidebar_widget_count--;
+ if (!shell->priv->right_sidebar_widget_count)
+ gtk_widget_hide (GTK_WIDGET (shell->priv->right_sidebar_container));
default:
box = rb_shell_get_box_for_ui_location (shell, location);
g_return_if_fail (box != NULL);
@@ -3310,6 +3348,7 @@ rb_shell_ui_location_get_type (void)
if (etype == 0) {
static const GEnumValue values[] = {
ENUM_ENTRY (RB_SHELL_UI_LOCATION_SIDEBAR, "Sidebar"),
+ ENUM_ENTRY (RB_SHELL_UI_LOCATION_RIGHT_SIDEBAR, "Right Sidebar"),
ENUM_ENTRY (RB_SHELL_UI_LOCATION_MAIN_TOP, "Main Top"),
ENUM_ENTRY (RB_SHELL_UI_LOCATION_MAIN_BOTTOM, "Main Bottom"),
ENUM_ENTRY (RB_SHELL_UI_LOCATION_MAIN_NOTEBOOK, "Main Notebook"),
diff --git a/shell/rb-shell.h b/shell/rb-shell.h
index fca025c..b637927 100644
--- a/shell/rb-shell.h
+++ b/shell/rb-shell.h
@@ -60,6 +60,7 @@ GQuark rb_shell_error_quark (void);
typedef enum
{
RB_SHELL_UI_LOCATION_SIDEBAR,
+ RB_SHELL_UI_LOCATION_RIGHT_SIDEBAR,
RB_SHELL_UI_LOCATION_MAIN_TOP,
RB_SHELL_UI_LOCATION_MAIN_BOTTOM,
RB_SHELL_UI_LOCATION_MAIN_NOTEBOOK
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]