[Goodies-commits] r7493 - in parole/trunk: . data/interfaces src

Ali Abdallah aliov at xfce.org
Sun Jun 7 12:11:46 CEST 2009


Author: aliov
Date: 2009-06-07 10:11:46 +0000 (Sun, 07 Jun 2009)
New Revision: 7493

Modified:
   parole/trunk/ChangeLog
   parole/trunk/data/interfaces/parole.ui
   parole/trunk/src/gst.c
   parole/trunk/src/medialist.c
   parole/trunk/src/player.c
   parole/trunk/src/statusbar.c
   parole/trunk/src/statusbar.h
Log:
	* Change playbin state to NULL on errors.
	* Hide statusbar+menubar when full screen mode.
	* Hide cursor on vidoe output when playing.

Modified: parole/trunk/ChangeLog
===================================================================
--- parole/trunk/ChangeLog	2009-06-07 09:29:43 UTC (rev 7492)
+++ parole/trunk/ChangeLog	2009-06-07 10:11:46 UTC (rev 7493)
@@ -1,3 +1,8 @@
+2009-06-07: Ali aliov at xfce.org
+	* Change playbin state to NULL on errors.
+	* Hide statusbar+menubar when full screen mode.
+	* Hide cursor on vidoe output when playing.
+
 2009-06-06: Ali aliov at xfce.org
 	* Button to hide/show playlist.
 	* Fallback to ximagesink if xvimagesink is not found.

Modified: parole/trunk/data/interfaces/parole.ui
===================================================================
--- parole/trunk/data/interfaces/parole.ui	2009-06-07 09:29:43 UTC (rev 7492)
+++ parole/trunk/data/interfaces/parole.ui	2009-06-07 10:11:46 UTC (rev 7493)
@@ -12,7 +12,7 @@
         <property name="orientation">vertical</property>
         <property name="spacing">4</property>
         <child>
-          <object class="GtkMenuBar" id="menubar1">
+          <object class="GtkMenuBar" id="menubar">
             <property name="visible">True</property>
             <child>
               <object class="GtkMenuItem" id="file-menu">
@@ -153,7 +153,7 @@
                                   </packing>
                                 </child>
                                 <child>
-                                  <object class="GtkVBox" id="vbox4">
+                                  <object class="GtkVBox" id="play-box">
                                     <property name="visible">True</property>
                                     <property name="orientation">vertical</property>
                                     <property name="spacing">5</property>

Modified: parole/trunk/src/gst.c
===================================================================
--- parole/trunk/src/gst.c	2009-06-07 09:29:43 UTC (rev 7492)
+++ parole/trunk/src/gst.c	2009-06-07 10:11:46 UTC (rev 7493)
@@ -40,13 +40,14 @@
 #include "enum-gtypes.h"
 #include "gmarshal.h"
 
+#define HIDE_WINDOW_CURSOR_TIMEOUT 3.0f
+
 #define PAROLE_GST_GET_PRIVATE(o) \
 (G_TYPE_INSTANCE_GET_PRIVATE ((o), PAROLE_TYPE_GST, ParoleGstPrivate))
 
 static void	parole_gst_play_file_internal 	(ParoleGst *gst);
 static void     parole_gst_change_state 	(ParoleGst *gst, 
 						 GstState new);
-
 struct ParoleGstPrivate
 {
     GstElement	 *playbin;
@@ -63,6 +64,7 @@
     
     GdkPixbuf    *logo;
     GdkCursor    *busy_cursor;
+    GTimer	 *hidecursor_timer;
 };
 
 enum
@@ -102,6 +104,44 @@
 }
 
 static void
+parole_gst_set_invisible_cursor (GdkWindow *window)
+{
+    GdkBitmap *empty_bitmap;
+    GdkCursor *cursor;
+    GdkColor  color;
+    
+    char cursor_bits[] = { 0x0 }; 
+
+    color.red = color.green = color.blue = 0;
+    color.pixel = 0;
+
+    empty_bitmap = gdk_bitmap_create_from_data (window,
+		   cursor_bits,
+		   1, 1);
+
+    cursor = gdk_cursor_new_from_pixmap (empty_bitmap,
+					 empty_bitmap,
+					 &color,
+					 &color, 0, 0);
+
+    gdk_window_set_cursor (window, cursor);
+
+    gdk_cursor_unref (cursor);
+
+    g_object_unref (empty_bitmap);
+}
+
+static void 
+parole_gst_set_cursor_visible (ParoleGst *gst, gboolean visible)
+{
+    if ( visible )
+	gdk_window_set_cursor (GTK_WIDGET (gst)->window, 
+			       gst->priv->target == gst->priv->state ? NULL : gst->priv->busy_cursor);
+    else
+	parole_gst_set_invisible_cursor (GTK_WIDGET (gst)->window);
+}
+
+static void
 parole_gst_set_window_cursor (GdkWindow *window, GdkCursor *cursor)
 {
     if ( window )
@@ -138,7 +178,9 @@
     attr.event_mask = gtk_widget_get_events (widget) | 
                       GDK_EXPOSURE_MASK |
 	              GDK_BUTTON_PRESS_MASK | 
-                      GDK_BUTTON_RELEASE_MASK;
+                      GDK_BUTTON_RELEASE_MASK | 
+		      GDK_POINTER_MOTION_MASK |
+		      GDK_KEY_PRESS_MASK;
 		      
     mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
 	
@@ -305,6 +347,9 @@
     g_signal_emit (G_OBJECT (gst), signals [MEDIA_PROGRESSED], 0, gst->priv->stream, value);
 
 out:
+    if ( g_timer_elapsed (gst->priv->hidecursor_timer, NULL ) > HIDE_WINDOW_CURSOR_TIMEOUT )
+	parole_gst_set_cursor_visible (gst, FALSE);
+	
     return TRUE;
 }
 
@@ -324,7 +369,6 @@
         g_source_remove (gst->priv->tick_id);
 	gst->priv->tick_id = 0;
     }    
-	    
 }
 
 static void
@@ -456,6 +500,8 @@
 	    GError *error = NULL;
 	    gchar *debug;
 	    parole_gst_set_window_cursor (GTK_WIDGET (gst)->window, NULL);
+	    gst->priv->target = GST_STATE_NULL;
+	    parole_gst_change_state (gst, GST_STATE_NULL);
 	    gst_message_parse_error (msg, &error, &debug);
 	    TRACE ("*** ERROR %s : %s ***", error->message, debug);
 	    g_signal_emit (G_OBJECT (gst), signals [ERROR], 0, error->message);
@@ -631,6 +677,23 @@
     parole_gst_load_logo (gst);
 }
 
+static gboolean
+parole_gst_motion_notify_event (GtkWidget *widget, GdkEventMotion *ev)
+{
+    ParoleGst *gst;
+    gboolean ret = FALSE;
+    
+    gst = PAROLE_GST (widget);
+    
+    g_timer_reset (gst->priv->hidecursor_timer);
+    parole_gst_set_cursor_visible (gst, TRUE);
+    
+    if (GTK_WIDGET_CLASS (parole_gst_parent_class)->motion_notify_event)
+	ret |= GTK_WIDGET_CLASS (parole_gst_parent_class)->motion_notify_event (widget, ev);
+
+    return ret;
+}
+
 static void
 parole_gst_class_init (ParoleGstClass *klass)
 {
@@ -644,6 +707,7 @@
     widget_class->show = parole_gst_show;
     widget_class->size_allocate = parole_gst_size_allocate;
     widget_class->expose_event = parole_gst_expose_event;
+    widget_class->motion_notify_event = parole_gst_motion_notify_event;
 
     signals[MEDIA_STATE] = 
         g_signal_new ("media-state",
@@ -699,6 +763,7 @@
     gst->priv->stream = parole_stream_new ();
     gst->priv->tick_id = 0;
     gst->priv->busy_cursor = gdk_cursor_new (GDK_WATCH);
+    gst->priv->hidecursor_timer = g_timer_new ();
     
     GTK_WIDGET_SET_FLAGS (GTK_WIDGET (gst), GTK_CAN_FOCUS);
     

Modified: parole/trunk/src/medialist.c
===================================================================
--- parole/trunk/src/medialist.c	2009-06-07 09:29:43 UTC (rev 7492)
+++ parole/trunk/src/medialist.c	2009-06-07 10:11:46 UTC (rev 7493)
@@ -533,9 +533,11 @@
     {
 	if ( !list->priv->hidden )
 	    gtk_widget_show_all (GTK_WIDGET (list->priv->box));
+	gtk_widget_show (list->priv->hide_show);
     }
     else
     {
 	gtk_widget_hide_all (GTK_WIDGET (list->priv->box));
+	gtk_widget_hide (list->priv->hide_show);
     }
 }

Modified: parole/trunk/src/player.c
===================================================================
--- parole/trunk/src/player.c	2009-06-07 09:29:43 UTC (rev 7492)
+++ parole/trunk/src/player.c	2009-06-07 10:11:46 UTC (rev 7493)
@@ -58,6 +58,8 @@
     
     GtkWidget		*volume;
     GtkWidget		*volume_image;
+    GtkWidget		*menu_bar;
+    GtkWidget		*play_box;
     
     gboolean             exit;
     
@@ -428,6 +430,9 @@
     {
 	parole_media_list_set_visible (player->priv->list, TRUE);
 	parole_sidebar_set_visible (player->priv->sidebar, TRUE);
+	parole_statusbar_set_visible (player->priv->status, TRUE);
+	gtk_widget_show (player->priv->menu_bar);
+	gtk_widget_show (player->priv->play_box);
 	player->priv->full_screen = FALSE;
 	gtk_window_unfullscreen (GTK_WINDOW (player->priv->window));
     }
@@ -435,6 +440,9 @@
     {
 	parole_media_list_set_visible (player->priv->list, FALSE);
 	parole_sidebar_set_visible (player->priv->sidebar, FALSE);
+	parole_statusbar_set_visible (player->priv->status, FALSE);
+	gtk_widget_hide (player->priv->menu_bar);
+	gtk_widget_hide (player->priv->play_box);
 	player->priv->full_screen = TRUE;
 	gtk_window_fullscreen (GTK_WINDOW (player->priv->window));
     }
@@ -530,6 +538,22 @@
     return FALSE;
 }
 
+static gboolean
+parole_player_gst_widget_motion_notify_event (GtkWidget *widget, GdkEventMotion *ev, ParolePlayer *player)
+{
+    gint pointer_y;
+
+    if ( player->priv->full_screen )
+    {
+	pointer_y = (gint) ev->y;
+	if ( pointer_y >= widget->allocation.height - 10 )
+	    gtk_widget_show (player->priv->play_box);
+	else
+	    gtk_widget_hide (player->priv->play_box);
+    }
+    return FALSE;
+}
+
 static void
 parole_player_open_media_chooser (gboolean multiple)
 {
@@ -684,6 +708,9 @@
     g_signal_connect (G_OBJECT (player->priv->gst), "button_release_event",
 		      G_CALLBACK (parole_player_gst_widget_button_press), player);
     
+    g_signal_connect (G_OBJECT (player->priv->gst), "motion_notify_event",
+		      G_CALLBACK (parole_player_gst_widget_motion_notify_event), player);
+    
     player->priv->row = NULL;
     
     gtk_box_pack_start (GTK_BOX (gtk_builder_get_object (builder, "output")), player->priv->gst,
@@ -744,7 +771,10 @@
 			      
     g_signal_connect_swapped (gtk_builder_get_object (builder, "menu-exit"), "activate",
 			      G_CALLBACK (parole_player_menu_exit_cb), player);
-		      
+    
+    player->priv->menu_bar = GTK_WIDGET (gtk_builder_get_object (builder, "menubar"));
+    player->priv->play_box = GTK_WIDGET (gtk_builder_get_object (builder, "play-box"));
+    
     gtk_widget_show_all (player->priv->window);
     
     g_object_unref (builder);

Modified: parole/trunk/src/statusbar.c
===================================================================
--- parole/trunk/src/statusbar.c	2009-06-07 09:29:43 UTC (rev 7492)
+++ parole/trunk/src/statusbar.c	2009-06-07 10:11:46 UTC (rev 7493)
@@ -38,6 +38,7 @@
 
 struct ParoleStatusbarPrivate
 {
+    GtkWidget *box;
     GtkWidget *progress;
     GtkWidget *label;
     
@@ -89,6 +90,7 @@
     gtk_widget_show (box);
     gtk_widget_show (statusbar->priv->label);
     g_object_unref (builder);
+    statusbar->priv->box = box;
 }
 
 ParoleStatusbar *
@@ -137,7 +139,7 @@
     g_free (buff);
 }
 
-void parole_statusbar_set_full_screen (ParoleStatusbar *bar, gboolean full_screen)
+void parole_statusbar_set_visible (ParoleStatusbar *bar, gboolean visible)
 {
-    
+    visible ? gtk_widget_show (bar->priv->box) : gtk_widget_hide (bar->priv->box);
 }

Modified: parole/trunk/src/statusbar.h
===================================================================
--- parole/trunk/src/statusbar.h	2009-06-07 09:29:43 UTC (rev 7492)
+++ parole/trunk/src/statusbar.h	2009-06-07 10:11:46 UTC (rev 7493)
@@ -60,8 +60,8 @@
 void				parole_statusbar_set_buffering   (ParoleStatusbar *bar,
 								  gint percentage);
 
-void				parole_statusbar_set_full_screen (ParoleStatusbar *bar,
-								  gboolean full_screen);
+void				parole_statusbar_set_visible 	 (ParoleStatusbar *bar,
+								  gboolean visible);
 
 G_END_DECLS
 




More information about the Goodies-commits mailing list