[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