[Xfce4-commits] <parole:0.2.2> Add "open containing folder" on the media list.
Ali Abdallah
noreply at xfce.org
Fri Feb 25 17:00:02 CET 2011
Updating branch refs/heads/0.2.2
to 5d2e8369735727a365fc7b75a7104015644af183 (commit)
from 3dd8bd24696f3b94c06f94f26d73e021be17191e (commit)
commit 5d2e8369735727a365fc7b75a7104015644af183
Author: Ali Abdallah <aliov at xfce.org>
Date: Fri Feb 25 16:58:50 2011 +0100
Add "open containing folder" on the media list.
data/interfaces/parole.ui | 169 ++++++++++++++++++++++++++++++++++++++-------
gst/parole-gst.c | 3 +-
src/parole-medialist.c | 122 +++++++++++++++++++++++++++++++--
3 files changed, 261 insertions(+), 33 deletions(-)
diff --git a/data/interfaces/parole.ui b/data/interfaces/parole.ui
index da0e790..7b46bac 100644
--- a/data/interfaces/parole.ui
+++ b/data/interfaces/parole.ui
@@ -2,6 +2,10 @@
<interface>
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy project-wide -->
+ <object class="GtkAction" id="action-play">
+ <property name="stock_id">gtk-media-play</property>
+ <signal name="activate" handler="parole_player_action_play_cb" swapped="no"/>
+ </object>
<object class="GtkToggleAction" id="action-repeat">
<signal name="toggled" handler="parole_action_repeat_cb" swapped="no"/>
</object>
@@ -22,30 +26,30 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-new</property>
- <property name="icon-size">1</property>
+ <property name="icon-size">2</property>
</object>
<object class="GtkImage" id="image12">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-cdrom</property>
- <property name="icon-size">1</property>
+ <property name="icon-size">2</property>
</object>
<object class="GtkImage" id="image13">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-edit</property>
- <property name="icon-size">1</property>
+ <property name="icon-size">2</property>
</object>
<object class="GtkImage" id="image14">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="pixel_size">18</property>
+ <property name="pixel_size">20</property>
<property name="icon_name">applications-multimedia</property>
</object>
<object class="GtkImage" id="image15">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="pixel_size">18</property>
+ <property name="pixel_size">20</property>
<property name="icon_name">multimedia-volume-control</property>
<property name="icon-size">1</property>
</object>
@@ -53,7 +57,7 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-about</property>
- <property name="icon-size">1</property>
+ <property name="icon-size">2</property>
</object>
<object class="GtkImage" id="image17">
<property name="visible">True</property>
@@ -700,7 +704,6 @@
<object class="GtkAlignment" id="video-view">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="top_padding">4</property>
<property name="right_padding">4</property>
<child>
<object class="GtkNotebook" id="main-notebook">
@@ -810,7 +813,7 @@
<object class="GtkHBox" id="hbox3">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="spacing">2</property>
+ <property name="spacing">5</property>
<child>
<object class="GtkToggleButton" id="shuffle">
<property name="visible">True</property>
@@ -867,26 +870,20 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="resize_mode">queue</property>
- <property name="shadow_type">out</property>
+ <property name="shadow_type">none</property>
<child>
<object class="GtkHBox" id="hbox4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">2</property>
<child>
- <object class="GtkButton" id="backward">
- <property name="width_request">60</property>
+ <object class="GtkVSeparator" id="vseparator2">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
- <property name="image">image3</property>
- <property name="relief">none</property>
- <property name="focus_on_click">False</property>
+ <property name="can_focus">False</property>
</object>
<packing>
<property name="expand">False</property>
- <property name="fill">False</property>
+ <property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
@@ -895,17 +892,15 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
- <object class="GtkButton" id="play">
- <property name="width_request">80</property>
- <property name="height_request">35</property>
+ <object class="GtkButton" id="backward">
+ <property name="width_request">60</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
- <property name="image">image1</property>
- <property name="relief">half</property>
+ <property name="image">image3</property>
+ <property name="relief">none</property>
<property name="focus_on_click">False</property>
- <signal name="clicked" handler="parole_player_play_pause_clicked" swapped="no"/>
</object>
</child>
</object>
@@ -916,6 +911,26 @@
</packing>
</child>
<child>
+ <object class="GtkButton" id="play">
+ <property name="width_request">80</property>
+ <property name="height_request">35</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="related_action">action-play</property>
+ <property name="use_action_appearance">False</property>
+ <property name="image">image1</property>
+ <property name="relief">half</property>
+ <property name="use_underline">True</property>
+ <property name="focus_on_click">False</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
<object class="GtkButton" id="forward">
<property name="width_request">60</property>
<property name="visible">True</property>
@@ -929,7 +944,18 @@
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="position">2</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVSeparator" id="vseparator1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
</packing>
</child>
</object>
@@ -1048,9 +1074,21 @@
</packing>
</child>
<child>
+ <object class="GtkHSeparator" id="hseparator1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
<object class="GtkAlignment" id="alignment2">
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="top_padding">4</property>
<property name="bottom_padding">2</property>
<property name="left_padding">5</property>
<property name="right_padding">5</property>
@@ -1068,7 +1106,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">2</property>
+ <property name="position">3</property>
</packing>
</child>
</object>
@@ -1098,6 +1136,85 @@
</object>
</child>
</object>
+ <object class="GtkMenu" id="menu-player">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkImageMenuItem" id="menu-play">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="related_action">action-play</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="menu-forward">
+ <property name="label">gtk-media-forward</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="menu-backward">
+ <property name="label">gtk-media-rewind</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="menu-stop">
+ <property name="label">gtk-media-stop</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="menu-next">
+ <property name="label">gtk-media-next</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="menu-prev">
+ <property name="label">gtk-goto-first</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="menuitem3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_action_appearance">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="player-menu">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="label" translatable="yes">menuitem8</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ </object>
<object class="GtkListStore" id="sidebar-combo-liststore">
<columns>
<!-- column-name pix -->
diff --git a/gst/parole-gst.c b/gst/parole-gst.c
index 385844a..4439e41 100644
--- a/gst/parole-gst.c
+++ b/gst/parole-gst.c
@@ -415,7 +415,8 @@ parole_gst_draw_logo (ParoleGst *gst)
if (gst->priv->scale_logo)
{
- gdk_pixbuf_unref (pix);
+ if (pix)
+ gdk_pixbuf_unref (pix);
pix = gdk_pixbuf_scale_simple (gst->priv->logo,
widget->allocation.width,
widget->allocation.height,
diff --git a/src/parole-medialist.c b/src/parole-medialist.c
index f52c023..990c8c4 100644
--- a/src/parole-medialist.c
+++ b/src/parole-medialist.c
@@ -149,7 +149,7 @@ gboolean parole_media_list_query_tooltip (GtkWidget *widget,
gint x,
gint y,
gboolean keyboard_mode,
- GtkTooltip *tip,
+ GtkTooltip *tooltip,
ParoleMediaList *list);
/*
@@ -224,6 +224,7 @@ parole_media_list_add (ParoleMediaList *list, ParoleFile *file, gboolean emit, g
NAME_COL, parole_file_get_display_name (file),
DATA_COL, file,
LENGTH_COL, parole_taglibc_get_media_length (file),
+ PIXBUF_COL, NULL,
-1);
if ( emit || select_row )
@@ -562,12 +563,17 @@ gboolean parole_media_list_query_tooltip (GtkWidget *widget,
LENGTH_COL, &len,
-1);
- tip = g_strdup_printf ("File: %s\nName: %s\nLength: %s",
+ if (!len)
+ {
+ len = g_strdup (_("Unknown"));
+ }
+
+ tip = g_strdup_printf ("<b>File:</b> %s\n<b>Name:</b> %s\n<b>Length:</b> %s",
parole_file_get_file_name (file),
name,
len);
- gtk_tooltip_set_text (tooltip, tip);
+ gtk_tooltip_set_markup (tooltip, tip);
g_free (tip);
g_free (name);
g_free (len);
@@ -1086,6 +1092,90 @@ parole_media_list_selection_changed_cb (GtkTreeSelection *sel, ParoleMediaList *
}
static void
+parole_media_list_open_folder (GtkWidget *menu)
+{
+ gchar *dirname;
+
+ dirname = (gchar *) g_object_get_data (G_OBJECT (menu), "folder");
+
+ if (dirname)
+ {
+ gchar *uri;
+ uri = g_filename_to_uri (dirname, NULL, NULL);
+ TRACE ("Opening %s", dirname);
+ gtk_show_uri (gtk_widget_get_screen (menu), uri, GDK_CURRENT_TIME, NULL);
+
+ g_free (uri);
+ }
+}
+
+static void
+parole_media_list_add_open_containing_folder (ParoleMediaList *list, GtkWidget *menu,
+ gint x, gint y)
+{
+
+ GtkTreePath *path;
+
+
+ if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (list->priv->view),
+ x,
+ y,
+ &path,
+ NULL,
+ NULL,
+ NULL))
+ {
+
+ GtkTreeIter iter;
+
+ if ( path && gtk_tree_model_get_iter (GTK_TREE_MODEL (list->priv->store), &iter, path))
+ {
+ ParoleFile *file;
+ const gchar *filename;
+ const gchar *uri;
+
+ gtk_tree_model_get (GTK_TREE_MODEL (list->priv->store), &iter,
+ DATA_COL, &file,
+ -1);
+
+ filename = parole_file_get_file_name (file);
+ uri = parole_file_get_uri (file);
+
+ if (g_str_has_prefix (uri, "file:///"))
+ {
+ GtkWidget *mi, *img;
+ gchar *dirname;
+
+ dirname = g_path_get_dirname (filename);
+
+ /* Clear */
+ mi = gtk_image_menu_item_new_with_label (_("Open Containing Folder"));
+ img = gtk_image_new_from_stock (GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
+ gtk_widget_set_sensitive (mi, TRUE);
+ gtk_widget_show (mi);
+ g_signal_connect_swapped (mi, "activate",
+ G_CALLBACK (parole_media_list_open_folder), menu);
+
+ g_object_set_data (G_OBJECT (menu), "folder", dirname);
+
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+
+
+ mi = gtk_separator_menu_item_new ();
+ gtk_widget_show (mi);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+
+
+ }
+
+ gtk_tree_path_free (path);
+ }
+ }
+}
+
+
+static void
parole_media_list_clear_list (ParoleMediaList *list)
{
gtk_list_store_clear (GTK_LIST_STORE (list->priv->store));
@@ -1137,13 +1227,33 @@ shuffle_activated_cb (GtkWidget *mi, ParoleConf *conf)
}
static void
-parole_media_list_show_menu (ParoleMediaList *list, guint button, guint activate_time)
+parole_media_list_destroy_menu (GtkWidget *menu)
+{
+ gchar *dirname;
+
+ dirname = (gchar *) g_object_get_data (G_OBJECT (menu), "folder");
+
+ if (dirname)
+ {
+ g_free (dirname);
+ }
+
+ gtk_widget_destroy (menu);
+}
+
+static void
+parole_media_list_show_menu (ParoleMediaList *list, GdkEventButton *ev)
{
GtkWidget *menu, *mi;
gboolean val;
+ guint button = ev->button;
+ guint activate_time = ev->time;
menu = gtk_menu_new ();
+ parole_media_list_add_open_containing_folder (list, menu, (gint)ev->x, (gint)ev->y);
+
+
/**
* Repeat playing.
**/
@@ -1249,7 +1359,7 @@ parole_media_list_show_menu (ParoleMediaList *list, guint button, guint activate
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
g_signal_connect_swapped (menu, "selection-done",
- G_CALLBACK (gtk_widget_destroy), menu);
+ G_CALLBACK (parole_media_list_destroy_menu), menu);
gtk_menu_popup (GTK_MENU (menu),
NULL, NULL,
@@ -1262,7 +1372,7 @@ parole_media_list_button_release_event (GtkWidget *widget, GdkEventButton *ev, P
{
if ( ev->button == 3 )
{
- parole_media_list_show_menu (list, ev->button, ev->time);
+ parole_media_list_show_menu (list, ev);
return TRUE;
}
More information about the Xfce4-commits
mailing list