[totem] main: Remove sidebar drop-down item
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [totem] main: Remove sidebar drop-down item
- Date: Thu, 9 Jun 2011 17:37:28 +0000 (UTC)
commit b2cd9c31c991a59d21e8d9684098d1947fa0bc86
Author: Bastien Nocera <hadess hadess net>
Date: Thu Jun 9 18:29:54 2011 +0100
main: Remove sidebar drop-down item
And add a menu item for each sidebar element in the View menu.
data/totem.ui | 3 +-
src/Makefile.am | 2 -
src/ev-sidebar.c | 336 -----------------------------------
src/ev-sidebar.h | 76 --------
src/plugins/publish/totem-publish.c | 10 +-
src/totem-object.c | 23 ++--
src/totem-sidebar.c | 174 +++++++++++++++----
src/totem-sidebar.h | 16 ++-
8 files changed, 175 insertions(+), 465 deletions(-)
---
diff --git a/data/totem.ui b/data/totem.ui
index 3f1ffaf..83c0bc6 100644
--- a/data/totem.ui
+++ b/data/totem.ui
@@ -450,7 +450,8 @@
<placeholder name="placeholder"/>
</menu>
<separator/>
- <menuitem name="sidebar" action="sidebar"/>
+ <menuitem name="sidebar" action="sidebar"/>
+ <placeholder name="sidebars-placeholder"/>
</menu>
<menu name="go" action="go-menu">
<menuitem name="dvd-root-menu" action="dvd-root-menu"/>
diff --git a/src/Makefile.am b/src/Makefile.am
index 5eb7099..e4edd6e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -85,8 +85,6 @@ libtotem_la_SOURCES = \
totem-menu.h \
totem-uri.c \
totem-uri.h \
- ev-sidebar.c \
- ev-sidebar.h \
totem-subtitle-encoding.c \
totem-subtitle-encoding.h \
totem-profile.h \
diff --git a/src/plugins/publish/totem-publish.c b/src/plugins/publish/totem-publish.c
index 357b249..91db545 100644
--- a/src/plugins/publish/totem-publish.c
+++ b/src/plugins/publish/totem-publish.c
@@ -45,7 +45,6 @@
#include <libpeas/peas-activatable.h>
#include <libpeas-gtk/peas-gtk-configurable.h>
-#include "ev-sidebar.h"
#include "totem-plugin.h"
#include "totem-private.h"
#include "totem-dirs.h"
@@ -391,7 +390,8 @@ totem_publish_plugin_load_playlist (TotemPublishPlugin *self,
if (error)
goto out;
- ev_sidebar_set_current_page (EV_SIDEBAR (self->priv->totem->sidebar), "playlist");
+ /* FIXME
+ ev_sidebar_set_current_page (EV_SIDEBAR (self->priv->totem->sidebar), "playlist"); */
totem_playlist_clear (self->priv->totem->playlist);
for (i = 0; i < n_entries; ++i) {
@@ -549,8 +549,8 @@ impl_activate (PeasActivatable *plugin)
epc_service_monitor_set_skip_our_own (priv->monitor, TRUE);
/* Translators: computers on the local network which are publishing their playlists over the network */
- ev_sidebar_add_page (EV_SIDEBAR (priv->totem->sidebar), "neighbours", _("Neighbors"),
- totem_publish_plugin_create_neigbours_page (self, builder));
+ totem_add_sidebar_page (priv->totem, "neighbours", _("Neighbors"),
+ totem_publish_plugin_create_neigbours_page (self, builder));
g_object_unref (builder);
priv->publisher = epc_publisher_new (service_name, "totem", NULL);
@@ -626,7 +626,7 @@ impl_deactivate (PeasActivatable *plugin)
priv->gsettings = NULL;
if (priv->totem) {
- ev_sidebar_remove_page (EV_SIDEBAR (priv->totem->sidebar), "neighbours");
+ totem_remove_sidebar_page (priv->totem, "neighbours");
g_object_unref (priv->totem);
priv->totem = NULL;
diff --git a/src/totem-object.c b/src/totem-object.c
index 0b14197..e620233 100644
--- a/src/totem-object.c
+++ b/src/totem-object.c
@@ -58,7 +58,6 @@
#include "totemobject-marshal.h"
#include "totem-private.h"
#include "totem-plugins-engine.h"
-#include "ev-sidebar.h"
#include "totem-playlist.h"
#include "bacon-video-widget.h"
#include "totem-statusbar.h"
@@ -659,14 +658,15 @@ totem_object_set_current_subtitle (TotemObject *totem, const char *subtitle_uri)
**/
void
totem_object_add_sidebar_page (TotemObject *totem,
- const char *page_id,
- const char *title,
- GtkWidget *main_widget)
+ const char *page_id,
+ const char *title,
+ GtkWidget *main_widget)
{
- ev_sidebar_add_page (EV_SIDEBAR (totem->sidebar),
- page_id,
- title,
- main_widget);
+ totem_sidebar_add_page (totem,
+ page_id,
+ title,
+ NULL,
+ main_widget);
}
/**
@@ -682,8 +682,7 @@ void
totem_object_remove_sidebar_page (TotemObject *totem,
const char *page_id)
{
- ev_sidebar_remove_page (EV_SIDEBAR (totem->sidebar),
- page_id);
+ totem_sidebar_remove_page (totem, page_id);
}
/**
@@ -3823,8 +3822,8 @@ window_key_press_event_cb (GtkWidget *win, GdkEventKey *event, TotemObject *tote
case GDK_KEY_l:
case GDK_KEY_q:
case GDK_KEY_Q:
- case GDK_KEY_S:
- case GDK_KEY_s:
+// case GDK_KEY_S:
+// case GDK_KEY_s:
case GDK_KEY_Right:
case GDK_KEY_Left:
case GDK_KEY_plus:
diff --git a/src/totem-sidebar.c b/src/totem-sidebar.c
index 11c34e2..b94fc24 100644
--- a/src/totem-sidebar.c
+++ b/src/totem-sidebar.c
@@ -27,7 +27,6 @@
#include "totem.h"
#include "totem-sidebar.h"
#include "totem-private.h"
-#include "ev-sidebar.h"
static void
cb_resize (Totem * totem)
@@ -47,7 +46,7 @@ cb_resize (Totem * totem)
gtk_widget_style_get_property (pane, "handle-size", &gvalue_size);
handle_size = g_value_get_int (&gvalue_size);
g_value_unset (&gvalue_size);
-
+
gtk_widget_get_allocation (totem->sidebar, &allocation);
if (totem->sidebar_shown) {
w += allocation.width + handle_size;
@@ -81,12 +80,6 @@ totem_sidebar_toggle (Totem *totem, gboolean state)
cb_resize(totem);
}
-static void
-toggle_sidebar_from_sidebar (GtkWidget *playlist, Totem *totem)
-{
- totem_sidebar_toggle (totem, FALSE);
-}
-
gboolean
totem_sidebar_is_visible (Totem *totem)
{
@@ -133,56 +126,175 @@ totem_sidebar_setup (Totem *totem, gboolean visible, const char *page_id)
{
GtkPaned *item;
GtkAction *action;
+ GtkUIManager *uimanager;
+ GtkActionGroup *action_group;
item = GTK_PANED (gtk_builder_get_object (totem->xml, "tmw_main_pane"));
- totem->sidebar = ev_sidebar_new ();
- ev_sidebar_add_page (EV_SIDEBAR (totem->sidebar),
- "playlist", _("Playlist"),
- GTK_WIDGET (totem->playlist));
- if (page_id != NULL) {
- ev_sidebar_set_current_page (EV_SIDEBAR (totem->sidebar),
- page_id);
- } else {
- ev_sidebar_set_current_page (EV_SIDEBAR (totem->sidebar),
- "playlist");
- }
- gtk_paned_pack2 (item, totem->sidebar, FALSE, FALSE);
+ totem->sidebar = gtk_notebook_new ();
+ gtk_notebook_set_show_border (GTK_NOTEBOOK (totem->sidebar), FALSE);
+ gtk_notebook_set_show_tabs (GTK_NOTEBOOK (totem->sidebar), FALSE);
- totem->sidebar_shown = visible;
+ action_group = gtk_action_group_new ("SidebarActions");
+ uimanager = totem_get_ui_manager (totem);
+ gtk_ui_manager_insert_action_group (uimanager, action_group, -1);
+ g_object_set_data (G_OBJECT (totem->sidebar), "sidebar-action-group", action_group);
- action = gtk_action_group_get_action (totem->main_action_group,
- "sidebar");
+ totem_sidebar_add_page (totem, "playlist", _("Playlist"), NULL, GTK_WIDGET (totem->playlist));
+ gtk_paned_pack2 (item, totem->sidebar, FALSE, FALSE);
+ totem->sidebar_shown = visible;
+ action = gtk_action_group_get_action (totem->main_action_group, "sidebar");
gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), visible);
- /* Signals */
- g_signal_connect (G_OBJECT (totem->sidebar), "closed",
- G_CALLBACK (toggle_sidebar_from_sidebar), totem);
-
gtk_widget_show_all (totem->sidebar);
gtk_widget_realize (totem->sidebar);
+ totem_sidebar_set_current_page (totem,
+ page_id ? page_id : "playlist",
+ visible);
+
+
if (!visible)
gtk_widget_hide (totem->sidebar);
}
+void
+totem_sidebar_add_page (Totem *totem,
+ const char *page_id,
+ const char *label,
+ const char *accelerator,
+ GtkWidget *main_widget)
+{
+ GtkAction *action;
+ GtkActionGroup *action_group;
+ GtkUIManager *uimanager;
+ guint merge_id;
+
+ g_return_if_fail (page_id != NULL);
+ g_return_if_fail (GTK_IS_WIDGET (main_widget));
+
+ g_object_set_data_full (G_OBJECT (main_widget), "sidebar-name",
+ g_strdup (page_id), g_free);
+
+ gtk_notebook_append_page (GTK_NOTEBOOK (totem->sidebar),
+ main_widget,
+ NULL);
+
+ /* The properties page already has a menu item in "Movie" */
+ if (g_str_equal (page_id, "properties"))
+ return;
+
+ action = gtk_action_new (page_id,
+ label,
+ NULL,
+ NULL);
+
+ uimanager = totem_get_ui_manager (totem);
+ merge_id = gtk_ui_manager_new_merge_id (uimanager);
+
+ action_group = g_object_get_data (G_OBJECT (totem->sidebar), "sidebar-action-group");
+ gtk_action_group_add_action_with_accel (action_group, action, accelerator);
+ gtk_ui_manager_add_ui (uimanager,
+ merge_id,
+ "/ui/tmw-menubar/view/sidebars-placeholder",
+ page_id,
+ page_id,
+ GTK_UI_MANAGER_MENUITEM,
+ FALSE);
+ g_object_set_data (G_OBJECT (main_widget), "sidebar-menu-merge-id",
+ GUINT_TO_POINTER (merge_id));
+}
+
+static int
+get_page_num_for_name (Totem *totem,
+ const char *page_id)
+{
+ int num_pages, i;
+
+ if (page_id == NULL)
+ return -1;
+
+ num_pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (totem->sidebar));
+ for (i = 0; i < num_pages; i++) {
+ GtkWidget *widget;
+ const char *name;
+
+ widget = gtk_notebook_get_nth_page (GTK_NOTEBOOK (totem->sidebar), i);
+
+ name = g_object_get_data (G_OBJECT (widget), "sidebar-name");
+ if (g_strcmp0 (name, page_id) == 0)
+ return i;
+ }
+
+ return -1;
+}
+
+void
+totem_sidebar_remove_page (Totem *totem,
+ const char *page_id)
+{
+ GtkUIManager *uimanager;
+ GtkAction *action;
+ GtkActionGroup *action_group;
+ GtkWidget *main_widget;
+ int page_num;
+ guint merge_id;
+ gpointer data;
+
+ page_num = get_page_num_for_name (totem, page_id);
+
+ if (page_num == -1) {
+ g_warning ("Tried to remove sidebar page '%s' but it does not exist", page_id);
+ return;
+ }
+
+ main_widget = gtk_notebook_get_nth_page (GTK_NOTEBOOK (totem->sidebar), page_num);
+ data = g_object_get_data (G_OBJECT (main_widget), "sidebar-menu-merge-id");
+ merge_id = GPOINTER_TO_UINT (data);
+
+ gtk_notebook_remove_page (GTK_NOTEBOOK (totem->sidebar), page_num);
+
+ if (data == NULL)
+ return;
+
+ action_group = g_object_get_data (G_OBJECT (totem->sidebar), "sidebar-action-group");
+ uimanager = totem_get_ui_manager (totem);
+ gtk_ui_manager_remove_ui (uimanager, merge_id);
+ action = gtk_action_group_get_action (action_group, page_id);
+ gtk_action_group_remove_action (action_group, action);
+}
+
char *
totem_sidebar_get_current_page (Totem *totem)
{
+ int current_page;
+ GtkWidget *widget;
+
if (totem->sidebar == NULL)
return NULL;
- return ev_sidebar_get_current_page (EV_SIDEBAR (totem->sidebar));
+
+ current_page = gtk_notebook_get_current_page (GTK_NOTEBOOK (totem->sidebar));
+ widget = gtk_notebook_get_nth_page (GTK_NOTEBOOK (totem->sidebar), current_page);
+
+ return g_strdup (g_object_get_data (G_OBJECT (widget), "sidebar-name"));
}
void
totem_sidebar_set_current_page (Totem *totem,
- const char *name,
+ const char *page_id,
gboolean force_visible)
{
- if (name == NULL)
+ int page_num;
+
+ page_num = get_page_num_for_name (totem, page_id);
+
+ if (page_num == -1) {
+ g_warning ("Tried to set sidebar page '%s' but it does not exist", page_id);
return;
+ }
+
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (totem->sidebar), page_num);
- ev_sidebar_set_current_page (EV_SIDEBAR (totem->sidebar), name);
if (force_visible != FALSE)
totem_sidebar_toggle (totem, TRUE);
}
diff --git a/src/totem-sidebar.h b/src/totem-sidebar.h
index 611cc06..a89a9e6 100644
--- a/src/totem-sidebar.h
+++ b/src/totem-sidebar.h
@@ -25,17 +25,29 @@
G_BEGIN_DECLS
-void totem_sidebar_setup (Totem *totem, gboolean visible,
+void totem_sidebar_setup (Totem *totem,
+ gboolean visible,
const char *page_id);
+
void totem_sidebar_toggle (Totem *totem, gboolean state);
void totem_sidebar_set_visibility (Totem *totem, gboolean visible);
gboolean totem_sidebar_is_visible (Totem *totem);
+
gboolean totem_sidebar_is_focused (Totem *totem, gboolean *handles_kbd);
+
char *totem_sidebar_get_current_page (Totem *totem);
void totem_sidebar_set_current_page (Totem *totem,
- const char *name,
+ const char *page_id,
gboolean force_visible);
+void totem_sidebar_add_page (Totem *totem,
+ const char *page_id,
+ const char *label,
+ const char *accelerator,
+ GtkWidget *main_widget);
+void totem_sidebar_remove_page (Totem *totem,
+ const char *page_id);
+
G_END_DECLS
#endif /* TOTEM_SIDEBAR_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]