[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