[Xfce4-commits] [apps/parole] 02/02: Cleanup parole_player_init
noreply at xfce.org
noreply at xfce.org
Sun Jun 29 16:55:40 CEST 2014
This is an automated email from the git hooks/post-receive script.
bluesabre pushed a commit to branch master
in repository apps/parole.
commit 046db59bce10759044b371c159dddccfaae99fc9
Author: Sean Davis <smd.seandavis at gmail.com>
Date: Sun Jun 29 10:55:26 2014 -0400
Cleanup parole_player_init
---
src/parole-player.c | 631 ++++++++++++++++++++++++++++-----------------------
1 file changed, 351 insertions(+), 280 deletions(-)
diff --git a/src/parole-player.c b/src/parole-player.c
index 45054f1..507dd09 100644
--- a/src/parole-player.c
+++ b/src/parole-player.c
@@ -3134,41 +3134,50 @@ parole_player_set_wm_opacity_hint (GtkWidget *widget)
static void
parole_player_init (ParolePlayer *player)
{
+ /* Builder */
GtkBuilder *builder;
- gint w, h;
- gboolean maximized;
- gboolean showhide;
- GdkRGBA background;
-
- gint volume;
-
- GtkWidget *hpaned;
- GdkPixbuf *logo;
- GtkWidget *recent_menu;
+ /* Recent Menu */
GtkRecentFilter *recent_filter;
- GtkWidget *clear_recent;
+ GtkWidget *recent_menu;
GtkWidget *recent_separator;
+ GtkWidget *clear_recent;
+ /* Help Menu */
GtkWidget *bug_report, *contents;
- GtkCellRenderer *cell, *sub_cell;
-
+ /* Language Infobar */
GtkWidget *hbox_infobar;
- GtkWidget *audiotrack_box, *audiotrack_label, *subtitle_box, *subtitle_label, *infobar_close, *close_icon;
GtkWidget *content_area;
+ GtkWidget *audiotrack_box, *audiotrack_label;
+ GtkWidget *subtitle_box, *subtitle_label;
+ GtkWidget *infobar_close, *close_icon;
+ GtkCellRenderer *cell, *sub_cell;
+
+ /* Content / Media List Panes */
+ GtkWidget *hpaned;
+ /* Content Area */
GtkWidget *controls_overlay;
-#if GTK_CHECK_VERSION(3,10,0)
-#else
- GtkWidget *tmp_box;
-#endif
+ #if GTK_CHECK_VERSION(3,10,0)
+ #else
+ GtkWidget *tmp_box;
+ #endif
GtkWidget *controls_parent;
GtkWidget *play_box;
+ GdkRGBA background;
+ GdkPixbuf *logo;
+
+ /* Player Controls */
+ GList *widgets;
+ /* Properties */
gchar *videosink = NULL;
+ gint w, h;
+ gboolean maximized;
+ gboolean showhide;
+ gint volume;
- GList *widgets;
g_setenv("PULSE_PROP_media.role", "video", TRUE);
@@ -3186,19 +3195,32 @@ parole_player_init (ParolePlayer *player)
builder = parole_builder_get_main_interface ();
+ /* ParoleConf */
player->priv->conf = parole_conf_new ();
player->priv->settings_dialog = parole_conf_dialog_new();
g_signal_connect_swapped (player->priv->conf, "notify::reset-saver",
G_CALLBACK (parole_player_reset_saver_changed_cb), player);
+ /* ParoleGst */
player->priv->gst = parole_gst_new (player->priv->conf);
+ /* ParoleDisc */
player->priv->disc = parole_disc_new ();
g_signal_connect (player->priv->disc, "disc-selected",
G_CALLBACK (parole_player_disc_selected_cb), player);
+ /* ParoleButton */
+ #ifdef HAVE_XF86_KEYSYM
+ player->priv->button = parole_button_new ();
+ g_signal_connect (player->priv->button, "button-pressed",
+ G_CALLBACK (parole_player_button_pressed_cb), player);
+ #endif
+
+ /* ParoleScreenSaver */
player->priv->screen_saver = parole_screen_saver_new ();
+
+ /* ParoleMediaList */
player->priv->list = PAROLE_MEDIA_LIST (parole_media_list_get ());
player->priv->state = PAROLE_STATE_STOPPED;
@@ -3212,105 +3234,57 @@ parole_player_init (ParolePlayer *player)
player->priv->recent = gtk_recent_manager_get_default ();
- /*
- * Gst signals
- */
- g_signal_connect (G_OBJECT (player->priv->gst), "media-state",
- G_CALLBACK (parole_player_media_state_cb), player);
-
- g_signal_connect (G_OBJECT (player->priv->gst), "media-progressed",
- G_CALLBACK (parole_player_media_progressed_cb), player);
-
- g_signal_connect (G_OBJECT (player->priv->gst), "media-tag",
- G_CALLBACK (parole_player_media_tag_cb), player);
-
- g_signal_connect (G_OBJECT (player->priv->gst), "error",
- G_CALLBACK (parole_player_error_cb), player);
-
- g_signal_connect (G_OBJECT (player->priv->gst), "buffering",
- G_CALLBACK (parole_player_buffering_cb), player);
-
- g_signal_connect (G_OBJECT (player->priv->gst), "dvd-chapter-count-change",
- G_CALLBACK (parole_player_dvd_chapter_count_change_cb), player);
-
- g_signal_connect (G_OBJECT (player->priv->gst), "dvd-chapter-change",
- G_CALLBACK (parole_player_dvd_chapter_change_cb), player);
-
- g_signal_connect (G_OBJECT (player->priv->gst), "notify::volume",
- G_CALLBACK (parole_property_notify_cb_volume), player);
-
- /*
- * GTK Actions
- */
- /* Play/Pause */
- player->priv->media_playpause_action = g_simple_action_new("playpause_action", NULL);
- playpause_action = player->priv->media_playpause_action;
- g_signal_connect(G_OBJECT(player->priv->media_playpause_action), "activate", G_CALLBACK(parole_player_playpause_action_cb), NULL);
- g_simple_action_set_enabled(player->priv->media_playpause_action, FALSE);
-
- /* Previous Track */
- player->priv->media_previous_action = g_simple_action_new("previous_action", NULL);
- previous_action = player->priv->media_previous_action;
- g_signal_connect(G_OBJECT(player->priv->media_previous_action), "activate", G_CALLBACK(parole_player_previous_action_cb), NULL);
- g_simple_action_set_enabled(player->priv->media_previous_action, FALSE);
-
- /* Next Track */
- player->priv->media_next_action = g_simple_action_new("next_action", NULL);
- next_action = player->priv->media_next_action;
- g_signal_connect(G_OBJECT(player->priv->media_next_action), "activate", G_CALLBACK(parole_player_next_action_cb), NULL);
- g_simple_action_set_enabled(player->priv->media_next_action, FALSE);
-
- /* Fullscreen */
- player->priv->media_fullscreen_action = g_simple_action_new("fullscreen_action", NULL);
- g_signal_connect(G_OBJECT(player->priv->media_fullscreen_action), "activate", G_CALLBACK(parole_player_fullscreen_action_cb), NULL);
- g_simple_action_set_enabled(player->priv->media_fullscreen_action, TRUE);
-
- /* Toggle Playlist */
- player->priv->toggle_playlist_action = g_simple_toggle_action_new("toggle_playlist_action", NULL);
- g_signal_connect(G_OBJECT(player->priv->toggle_playlist_action), "activate", G_CALLBACK(parole_player_toggle_playlist_action_cb), NULL);
- g_simple_action_set_enabled(player->priv->toggle_playlist_action, TRUE);
-
- /* Toggle Repeat */
- player->priv->toggle_repeat_action = g_simple_toggle_action_new("toggle_repeat_action", NULL);
- g_simple_action_set_enabled(player->priv->toggle_repeat_action, TRUE);
+ /* Get properties from ParoleConf */
+ g_object_get (G_OBJECT (player->priv->conf),
+ "showhide-playlist", &showhide,
+ "videosink", &videosink,
+ "volume", &volume,
+ "window-width", &w,
+ "window-height", &h,
+ "window-maximized", &maximized,
+ NULL);
- /* Toggle Shuffle */
- player->priv->toggle_shuffle_action = g_simple_toggle_action_new("toggle_shuffle_action", NULL);
- g_simple_action_set_enabled(player->priv->toggle_shuffle_action, TRUE);
+ player->priv->last_w = w;
+ player->priv->last_h = h;
/*
* GTK Widgets
*/
/* ParolePlayer Window */
player->priv->window = GTK_WIDGET (gtk_builder_get_object (builder, "main-window"));
- g_signal_connect_after( G_OBJECT(player->priv->window),
- "window-state-event",
- G_CALLBACK(parole_player_window_state_event),
- PAROLE_PLAYER(player) );
+ g_signal_connect_after (G_OBJECT (player->priv->window),
+ "window-state-event",
+ G_CALLBACK (parole_player_window_state_event),
+ PAROLE_PLAYER (player));
- /* Playlist notebook */
+ // Playlist notebook
player->priv->playlist_nt = GTK_WIDGET (gtk_builder_get_object (builder, "notebook-playlist"));
+ gtk_notebook_append_page (GTK_NOTEBOOK (player->priv->playlist_nt),
+ GTK_WIDGET (player->priv->list),
+ gtk_label_new (_("Playlist")));
- /* Playlist divider/handle */
+ // Playlist divider/handle
hpaned = GTK_WIDGET (gtk_builder_get_object (builder, "hpaned"));
gtk_widget_style_get (hpaned, "handle-size", &player->priv->handle_width, NULL);
+
/* Menu Bar */
player->priv->menu_bar = GTK_WIDGET (gtk_builder_get_object (builder, "menubar"));
- /* Save Playlist Menu Item */
+ /* Media Menu */
+ // Save Playlist
player->priv->save_playlist = GTK_WIDGET (gtk_builder_get_object (builder, "menu-save-playlist"));
- g_signal_connect( player->priv->save_playlist,
- "activate",
- G_CALLBACK(parole_player_save_playlist_cb),
- PAROLE_PLAYER(player) );
+ g_signal_connect (player->priv->save_playlist,
+ "activate",
+ G_CALLBACK (parole_player_save_playlist_cb),
+ PAROLE_PLAYER (player));
g_signal_connect (gtk_builder_get_object (builder, "media-menu"), "select",
- G_CALLBACK (parole_player_media_menu_select_cb), player);
+ G_CALLBACK (parole_player_media_menu_select_cb), player);
- /* Recent Menu */
+ /* Recent Submenu */
recent_menu = GTK_WIDGET (gtk_builder_get_object (builder, "recent_menu"));
- /* Initialize the Recent Menu settings */
+ // Initialize the Recent Menu settings
player->priv->recent_menu = gtk_recent_chooser_menu_new_for_manager (player->priv->recent);
gtk_recent_chooser_menu_set_show_numbers (GTK_RECENT_CHOOSER_MENU(player->priv->recent_menu), TRUE);
gtk_recent_chooser_set_sort_type (GTK_RECENT_CHOOSER(player->priv->recent_menu), GTK_RECENT_SORT_MRU);
@@ -3318,24 +3292,24 @@ parole_player_init (ParolePlayer *player)
gtk_recent_chooser_set_show_not_found (GTK_RECENT_CHOOSER(player->priv->recent_menu), FALSE);
gtk_recent_chooser_set_local_only (GTK_RECENT_CHOOSER(player->priv->recent_menu), TRUE);
- /* Recent Menu file filter */
+ // Recent Menu file filter
recent_filter = parole_get_supported_recent_media_filter ();
gtk_recent_filter_add_application( recent_filter, "parole" );
gtk_recent_chooser_set_filter( GTK_RECENT_CHOOSER(player->priv->recent_menu), recent_filter);
- /* Recent Menu Separator */
+ // Recent Menu Separator
recent_separator = gtk_separator_menu_item_new();
gtk_menu_shell_append(GTK_MENU_SHELL(player->priv->recent_menu), recent_separator);
- /* Clear Recent Menu Item */
+ // Clear Recent Menu Item
clear_recent = gtk_menu_item_new_with_mnemonic (_("_Clear recent items…"));
- g_signal_connect (clear_recent, "activate",
- G_CALLBACK (parole_player_recent_menu_clear_activated_cb), player);
gtk_menu_shell_append(GTK_MENU_SHELL(player->priv->recent_menu), clear_recent);
- /* Connect the Recent Menu events */
+ // Recent Menu signals
g_signal_connect (player->priv->recent_menu, "item-activated",
G_CALLBACK (parole_player_recent_menu_item_activated_cb), player);
+ g_signal_connect (clear_recent, "activate",
+ G_CALLBACK (parole_player_recent_menu_clear_activated_cb), player);
/* Attach the Recent Menu */
gtk_menu_item_set_submenu( GTK_MENU_ITEM(recent_menu), player->priv->recent_menu );
@@ -3357,36 +3331,20 @@ parole_player_init (ParolePlayer *player)
player->priv->audio_group = NULL;
/* Additional Menu Items */
-
- /* Show/Hide Playlist */
- player->priv->showhide_playlist_menu_item = GTK_WIDGET (gtk_builder_get_object (builder, "show-hide-list"));
- gtk_menu_item_set_label (GTK_MENU_ITEM(player->priv->showhide_playlist_menu_item), _("Show Playlist"));
-
- player->priv->shuffle_menu_item = GTK_WIDGET (gtk_builder_get_object (builder, "shuffle"));
- g_signal_connect(G_OBJECT(player->priv->shuffle_menu_item), "activate", G_CALLBACK(toggle_action_cb), player->priv->toggle_shuffle_action);
- g_signal_connect(G_OBJECT(player->priv->toggle_shuffle_action), "notify::state", G_CALLBACK(parole_player_shuffle_state_changed), player);
- parole_media_list_connect_shuffle_action(player->priv->list, player->priv->toggle_shuffle_action);
- g_object_bind_property(G_OBJECT (player->priv->conf), "shuffle",
- player->priv->shuffle_menu_item, "active",
- G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
-
- player->priv->repeat_menu_item = GTK_WIDGET (gtk_builder_get_object (builder, "repeat"));
- g_signal_connect(G_OBJECT(player->priv->repeat_menu_item), "activate", G_CALLBACK(toggle_action_cb), player->priv->toggle_repeat_action);
- g_signal_connect(G_OBJECT(player->priv->toggle_repeat_action), "notify::state", G_CALLBACK(parole_player_repeat_state_changed), player);
- parole_media_list_connect_repeat_action(player->priv->list, player->priv->toggle_repeat_action);
- g_object_bind_property(G_OBJECT (player->priv->conf), "repeat",
- player->priv->repeat_menu_item, "active",
- G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
-
bug_report = GTK_WIDGET (gtk_builder_get_object (builder, "bug-report"));
- g_signal_connect (bug_report, "activate", G_CALLBACK(on_bug_report_clicked), player);
+ g_signal_connect (bug_report, "activate",
+ G_CALLBACK (on_bug_report_clicked), player);
+
contents = GTK_WIDGET (gtk_builder_get_object (builder, "contents"));
- g_signal_connect (contents, "activate", G_CALLBACK(on_contents_clicked), player);
+ g_signal_connect (contents, "activate",
+ G_CALLBACK (on_contents_clicked), player);
+
player->priv->goto_position = GTK_WIDGET (gtk_builder_get_object (builder, "goto_position"));
g_signal_connect (player->priv->goto_position, "activate",
- G_CALLBACK(on_goto_position_clicked), player);
+ G_CALLBACK (on_goto_position_clicked), player);
+
g_signal_connect (gtk_builder_get_object (builder, "playback-menu"), "select",
- G_CALLBACK (parole_player_playback_menu_select_cb), player);
+ G_CALLBACK (parole_player_playback_menu_select_cb), player);
/* End Menu Bar */
@@ -3395,35 +3353,175 @@ parole_player_init (ParolePlayer *player)
gdk_rgba_parse(&background, "black");
gtk_widget_override_background_color(GTK_WIDGET(player->priv->eventbox_output), GTK_STATE_NORMAL, &background);
- /* Enable motion-notify event to show/hide controls on mouseover */
- gtk_widget_add_events (GTK_WIDGET (player->priv->eventbox_output), GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK);
+ // Enable motion-notify event to show/hide controls on mouseover
+ gtk_widget_add_events (GTK_WIDGET (player->priv->eventbox_output),
+ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK);
- /* Enable DND for files onto output widget */
+ // Enable DND for files onto output widget
gtk_drag_dest_set (player->priv->eventbox_output, GTK_DEST_DEFAULT_ALL,
target_entry, G_N_ELEMENTS (target_entry),
GDK_ACTION_COPY | GDK_ACTION_MOVE);
g_signal_connect (player->priv->eventbox_output, "drag-data-received",
G_CALLBACK (parole_player_drag_data_received_cb), player);
- /* Background Image */
+ // Background Image
logo = gdk_pixbuf_new_from_file (g_strdup_printf ("%s/parole.png", PIXMAPS_DIR), NULL);
player->priv->logo_image = GTK_WIDGET (gtk_builder_get_object (builder, "logo"));
gtk_image_set_from_pixbuf(GTK_IMAGE(player->priv->logo_image), logo);
- /* Video Box */
+ // Video Box
player->priv->videobox = GTK_WIDGET (gtk_builder_get_object (builder, "video_output"));
- /* Audio Box */
+ // Audio Box
player->priv->audiobox = GTK_WIDGET (gtk_builder_get_object (builder, "audio_output"));
player->priv->audiobox_cover = GTK_WIDGET (gtk_builder_get_object (builder, "audio_cover"));
player->priv->audiobox_title = GTK_WIDGET (gtk_builder_get_object (builder, "audio_title"));
player->priv->audiobox_album = GTK_WIDGET (gtk_builder_get_object (builder, "audio_album"));
player->priv->audiobox_artist = GTK_WIDGET (gtk_builder_get_object (builder, "audio_artist"));
+
g_signal_connect(player->priv->audiobox, "draw",
G_CALLBACK(parole_audiobox_expose_event), player);
/* End Content Area */
- /* FIXME: UGLY CODE IN THE NEXT BLOCK */
+
+ /* Play / Pause */
+ // GSimpleAction
+ player->priv->media_playpause_action = g_simple_action_new ("playpause_action", NULL);
+ g_simple_action_set_enabled (player->priv->media_playpause_action, FALSE);
+ playpause_action = player->priv->media_playpause_action;
+
+ // Button & Image
+ player->priv->playpause_button = GTK_WIDGET (gtk_builder_get_object(builder, "media_playpause"));
+ player->priv->playpause_image = GTK_WIDGET (gtk_builder_get_object(builder, "image_media_playpause"));
+
+ // Signals
+ g_signal_connect (G_OBJECT (player->priv->media_playpause_action), "activate",
+ G_CALLBACK (parole_player_playpause_action_cb), NULL);
+ g_signal_connect (G_OBJECT (player->priv->playpause_button), "clicked",
+ G_CALLBACK (parole_player_widget_activate_action), player->priv->media_playpause_action);
+
+
+ /* Previous Track */
+ // GSimpleAction
+ player->priv->media_previous_action = g_simple_action_new ("previous_action", NULL);
+ g_simple_action_set_enabled (player->priv->media_previous_action, FALSE);
+ previous_action = player->priv->media_previous_action;
+
+ // Button
+ player->priv->previous_button = GTK_WIDGET (gtk_builder_get_object(builder, "media_previous"));
+ gtk_widget_set_tooltip_text (GTK_WIDGET (player->priv->previous_button), _("Previous Track"));
+ gtk_widget_set_sensitive (GTK_WIDGET (player->priv->previous_button), FALSE);
+
+ // Signals
+ g_signal_connect (G_OBJECT (player->priv->media_previous_action), "activate",
+ G_CALLBACK (parole_player_previous_action_cb), NULL);
+ g_signal_connect (G_OBJECT (player->priv->previous_button), "clicked",
+ G_CALLBACK (parole_player_widget_activate_action), player->priv->media_previous_action);
+
+
+ /* Next Track */
+ // GSimpleAction
+ player->priv->media_next_action = g_simple_action_new ("next_action", NULL);
+ g_simple_action_set_enabled (player->priv->media_next_action, FALSE);
+ next_action = player->priv->media_next_action;
+
+ // Button
+ player->priv->next_button = GTK_WIDGET (gtk_builder_get_object(builder, "media_next"));
+ gtk_widget_set_tooltip_text (GTK_WIDGET (player->priv->next_button), _("Next Track"));
+ gtk_widget_set_sensitive (GTK_WIDGET (player->priv->next_button), FALSE);
+
+ // Signals
+ g_signal_connect (G_OBJECT (player->priv->media_next_action), "activate",
+ G_CALLBACK (parole_player_next_action_cb), NULL);
+ g_signal_connect (G_OBJECT (player->priv->next_button), "clicked",
+ G_CALLBACK (parole_player_widget_activate_action), player->priv->media_next_action);
+
+
+ /* Fullscreen */
+ // GSimpleAction
+ player->priv->media_fullscreen_action = g_simple_action_new ("fullscreen_action", NULL);
+ g_simple_action_set_enabled (player->priv->media_fullscreen_action, TRUE);
+
+ // Button
+ player->priv->fullscreen_button = GTK_WIDGET (gtk_builder_get_object (builder, "media_fullscreen"));
+ gtk_widget_set_tooltip_text (GTK_WIDGET (player->priv->fullscreen_button), _("Fullscreen"));
+
+ // Menu Item
+ player->priv->fullscreen_menu_item = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen-menu"));
+ player->priv->fullscreen_image = GTK_WIDGET (gtk_builder_get_object (builder, "image_media_fullscreen"));
+
+ // Signals
+ g_signal_connect (G_OBJECT (player->priv->media_fullscreen_action), "activate",
+ G_CALLBACK (parole_player_fullscreen_action_cb), NULL);
+ g_signal_connect (G_OBJECT (player->priv->fullscreen_button), "clicked",
+ G_CALLBACK (parole_player_widget_activate_action), player->priv->media_fullscreen_action);
+ g_signal_connect (G_OBJECT (player->priv->fullscreen_menu_item), "activate",
+ G_CALLBACK (parole_player_widget_activate_action), player->priv->media_fullscreen_action);
+
+
+ /* Toggle Playlist */
+ // GSimpleAction
+ player->priv->toggle_playlist_action = g_simple_toggle_action_new ("toggle_playlist_action", NULL);
+ g_simple_action_set_enabled (player->priv->toggle_playlist_action, TRUE);
+
+ // Button
+ player->priv->showhide_playlist_button = GTK_WIDGET (gtk_builder_get_object (builder, "media_toggleplaylist"));
+
+ // Menu Item
+ player->priv->showhide_playlist_menu_item = GTK_WIDGET (gtk_builder_get_object (builder, "show-hide-list"));
+ gtk_menu_item_set_label (GTK_MENU_ITEM (player->priv->showhide_playlist_menu_item), _("Show Playlist"));
+
+ // Set playlist visible before signals are connected
+ parole_player_set_playlist_visible (player, showhide);
+
+ // Signals
+ g_signal_connect (G_OBJECT (player->priv->toggle_playlist_action), "activate",
+ G_CALLBACK (parole_player_toggle_playlist_action_cb), NULL);
+ g_signal_connect (G_OBJECT (player->priv->showhide_playlist_menu_item), "activate",
+ G_CALLBACK (parole_player_widget_activate_action), player->priv->toggle_playlist_action);
+ g_signal_connect (G_OBJECT (player->priv->showhide_playlist_button), "clicked",
+ G_CALLBACK(parole_player_widget_activate_action), player->priv->toggle_playlist_action);
+
+
+ /* Toggle Repeat */
+ // GSimpleAction
+ player->priv->toggle_repeat_action = g_simple_toggle_action_new ("toggle_repeat_action", NULL);
+ g_simple_action_set_enabled (player->priv->toggle_repeat_action, TRUE);
+
+ // Menu Item
+ player->priv->repeat_menu_item = GTK_WIDGET (gtk_builder_get_object (builder, "repeat"));
+
+ // Signals
+ g_signal_connect (G_OBJECT (player->priv->repeat_menu_item), "activate",
+ G_CALLBACK (toggle_action_cb), player->priv->toggle_repeat_action);
+ g_signal_connect (G_OBJECT (player->priv->toggle_repeat_action), "notify::state",
+ G_CALLBACK (parole_player_repeat_state_changed), player);
+ parole_media_list_connect_repeat_action(player->priv->list, player->priv->toggle_repeat_action);
+ g_object_bind_property (G_OBJECT (player->priv->conf), "repeat",
+ player->priv->repeat_menu_item, "active",
+ G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
+
+
+ /* Toggle Shuffle */
+ // GSimpleAction
+ player->priv->toggle_shuffle_action = g_simple_toggle_action_new ("toggle_shuffle_action", NULL);
+ g_simple_action_set_enabled (player->priv->toggle_shuffle_action, TRUE);
+
+ // Menu Item
+ player->priv->shuffle_menu_item = GTK_WIDGET (gtk_builder_get_object (builder, "shuffle"));
+
+ // Signals
+ g_signal_connect (G_OBJECT (player->priv->shuffle_menu_item), "activate",
+ G_CALLBACK (toggle_action_cb), player->priv->toggle_shuffle_action);
+ g_signal_connect (G_OBJECT (player->priv->toggle_shuffle_action), "notify::state",
+ G_CALLBACK (parole_player_shuffle_state_changed), player);
+ parole_media_list_connect_shuffle_action(player->priv->list, player->priv->toggle_shuffle_action);
+ g_object_bind_property (G_OBJECT (player->priv->conf), "shuffle",
+ player->priv->shuffle_menu_item, "active",
+ G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
+
+
+
/* Media Controls */
controls_overlay = GTK_WIDGET(gtk_overlay_new());
@@ -3435,40 +3533,42 @@ parole_player_init (ParolePlayer *player)
parole_widget_reparent(GTK_WIDGET(player->priv->eventbox_output), controls_overlay);
-#if GTK_CHECK_VERSION(3,8,0)
-#else
- gdk_color_parse("#080810", &background);
- gtk_widget_modify_bg(GTK_WIDGET(controls_overlay), GTK_STATE_NORMAL, &background);
-#endif
+ #if GTK_CHECK_VERSION(3,8,0)
+ #else
+ gdk_color_parse("#080810", &background);
+ gtk_widget_modify_bg(GTK_WIDGET(controls_overlay), GTK_STATE_NORMAL, &background);
+ #endif
-#if GTK_CHECK_VERSION(3,10,0)
- player->priv->revealer = gtk_revealer_new ();
- gtk_widget_set_vexpand(GTK_WIDGET(player->priv->revealer), FALSE);
- gtk_widget_set_hexpand(GTK_WIDGET(player->priv->revealer), FALSE);
- gtk_revealer_set_transition_duration (GTK_REVEALER(player->priv->revealer), 250);
- gtk_revealer_set_transition_type (GTK_REVEALER(player->priv->revealer), GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP);
- gtk_revealer_set_reveal_child(GTK_REVEALER(player->priv->revealer), TRUE);
- gtk_widget_set_valign(player->priv->revealer, GTK_ALIGN_END);
-
- parole_widget_reparent(GTK_WIDGET(player->priv->control), player->priv->revealer);
-
- gtk_overlay_add_overlay(GTK_OVERLAY(controls_overlay), player->priv->revealer);
- gtk_widget_show_all(player->priv->revealer);
-#else
- tmp_box = GTK_WIDGET(gtk_event_box_new());
+ #if GTK_CHECK_VERSION(3,10,0)
+ /* Use GtkRevealer for GTK 3.10 and newer */
+ player->priv->revealer = gtk_revealer_new ();
+ gtk_widget_set_vexpand(GTK_WIDGET(player->priv->revealer), FALSE);
+ gtk_widget_set_hexpand(GTK_WIDGET(player->priv->revealer), FALSE);
+ gtk_revealer_set_transition_duration (GTK_REVEALER(player->priv->revealer), 250);
+ gtk_revealer_set_transition_type (GTK_REVEALER(player->priv->revealer), GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP);
+ gtk_revealer_set_reveal_child(GTK_REVEALER(player->priv->revealer), TRUE);
+ gtk_widget_set_valign(player->priv->revealer, GTK_ALIGN_END);
- gtk_widget_set_vexpand(GTK_WIDGET(tmp_box), FALSE);
- gtk_widget_set_hexpand(GTK_WIDGET(tmp_box), FALSE);
- gtk_widget_set_margin_left(tmp_box, 10);
- gtk_widget_set_margin_right(tmp_box, 10);
- gtk_widget_set_margin_bottom(tmp_box, 10);
- gtk_widget_set_margin_top(tmp_box, 10);
- gtk_widget_set_valign(tmp_box, GTK_ALIGN_END);
+ parole_widget_reparent(GTK_WIDGET(player->priv->control), player->priv->revealer);
- gtk_widget_reparent(GTK_WIDGET(player->priv->control), tmp_box);
+ gtk_overlay_add_overlay(GTK_OVERLAY(controls_overlay), player->priv->revealer);
+ gtk_widget_show_all(player->priv->revealer);
+ #else
+ /* Use floating overlay for GTK 3.8 and older */
+ tmp_box = GTK_WIDGET(gtk_event_box_new());
- gtk_overlay_add_overlay(GTK_OVERLAY(controls_overlay), tmp_box);
-#endif
+ gtk_widget_set_vexpand(GTK_WIDGET(tmp_box), FALSE);
+ gtk_widget_set_hexpand(GTK_WIDGET(tmp_box), FALSE);
+ gtk_widget_set_margin_left(tmp_box, 10);
+ gtk_widget_set_margin_right(tmp_box, 10);
+ gtk_widget_set_margin_bottom(tmp_box, 10);
+ gtk_widget_set_margin_top(tmp_box, 10);
+ gtk_widget_set_valign(tmp_box, GTK_ALIGN_END);
+
+ gtk_widget_reparent(GTK_WIDGET(player->priv->control), tmp_box);
+
+ gtk_overlay_add_overlay(GTK_OVERLAY(controls_overlay), tmp_box);
+ #endif
gtk_box_set_child_packing( GTK_BOX(player->priv->control), GTK_WIDGET(play_box), TRUE, TRUE, 2, GTK_PACK_START );
gtk_container_set_border_width(GTK_CONTAINER(play_box), 3);
@@ -3488,19 +3588,6 @@ parole_player_init (ParolePlayer *player)
G_CALLBACK(parole_player_gst_widget_motion_notify_event), player);
}
- /* Previous, Play/Pause, Next */
- player->priv->previous_button = GTK_WIDGET(gtk_builder_get_object(builder, "media_previous"));
- gtk_widget_set_tooltip_text(GTK_WIDGET(player->priv->previous_button), _("Previous Track"));
- g_signal_connect(G_OBJECT(player->priv->previous_button), "clicked", G_CALLBACK(parole_player_widget_activate_action), player->priv->media_previous_action);
-
- player->priv->playpause_button = GTK_WIDGET(gtk_builder_get_object(builder, "media_playpause"));
- player->priv->playpause_image = GTK_WIDGET(gtk_builder_get_object(builder, "image_media_playpause"));
- g_signal_connect(G_OBJECT(player->priv->playpause_button), "clicked", G_CALLBACK(parole_player_widget_activate_action), player->priv->media_playpause_action);
-
- player->priv->next_button = GTK_WIDGET(gtk_builder_get_object(builder, "media_next"));
- gtk_widget_set_tooltip_text(GTK_WIDGET(player->priv->next_button), _("Next Track"));
- g_signal_connect(G_OBJECT(player->priv->next_button), "clicked", G_CALLBACK(parole_player_widget_activate_action), player->priv->media_next_action);
-
/* Elapsed/Duration labels */
player->priv->label_duration = GTK_WIDGET(gtk_builder_get_object(builder, "media_time_duration"));
player->priv->label_elapsed = GTK_WIDGET(gtk_builder_get_object(builder, "media_time_elapsed"));
@@ -3515,31 +3602,20 @@ parole_player_init (ParolePlayer *player)
/* Volume Button */
player->priv->volume = GTK_WIDGET (gtk_builder_get_object (builder, "media_volumebutton"));
player->priv->mute = GTK_WIDGET (gtk_builder_get_object (builder, "volume-mute-menu"));
-
- /* (un)Fullscreen button */
- player->priv->fullscreen_button = GTK_WIDGET (gtk_builder_get_object (builder, "media_fullscreen"));
- g_signal_connect(G_OBJECT(player->priv->fullscreen_button), "clicked", G_CALLBACK(parole_player_widget_activate_action), player->priv->media_fullscreen_action);
- gtk_widget_set_tooltip_text(GTK_WIDGET(player->priv->fullscreen_button), _("Fullscreen"));
- player->priv->fullscreen_menu_item = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen-menu"));
- g_signal_connect(G_OBJECT(player->priv->fullscreen_menu_item), "activate", G_CALLBACK(parole_player_widget_activate_action), player->priv->media_fullscreen_action);
- player->priv->fullscreen_image = GTK_WIDGET (gtk_builder_get_object (builder, "image_media_fullscreen"));
-
- /* Show/Hide Playlist button */
- player->priv->showhide_playlist_button = GTK_WIDGET (gtk_builder_get_object (builder, "media_toggleplaylist"));
-
- /* End Media Controls */
+ parole_player_change_volume (player, (gdouble) (volume/100.));
gtk_widget_set_direction (GTK_WIDGET (gtk_builder_get_object (builder, "ltrbox")),GTK_TEXT_DIR_LTR);
g_signal_connect(player->priv->control, "draw", G_CALLBACK(parole_overlay_expose_event), NULL);
+ /* End Media Controls */
/* Info Bar */
- /* placeholder widget */
+ // Placeholder widget
hbox_infobar = GTK_WIDGET (gtk_builder_get_object (builder, "infobar_placeholder"));
- /* Initialize the InfoBar */
+ // Initialize the InfoBar
player->priv->infobar = gtk_info_bar_new ();
gtk_info_bar_set_message_type (GTK_INFO_BAR (player->priv->infobar),
- GTK_MESSAGE_QUESTION);
+ GTK_MESSAGE_QUESTION);
gtk_widget_set_no_show_all (player->priv->infobar, TRUE);
@@ -3549,7 +3625,7 @@ parole_player_init (ParolePlayer *player)
gtk_box_pack_start( GTK_BOX( hbox_infobar ), player->priv->infobar, TRUE, TRUE, 0);
- /* Initialize the Audio Track combobox */
+ // Initialize the Audio Track combobox
player->priv->liststore_audiotrack = gtk_list_store_new(1, G_TYPE_STRING);
player->priv->combobox_audiotrack = gtk_combo_box_new_with_model(GTK_TREE_MODEL(player->priv->liststore_audiotrack));
player->priv->audio_list = NULL;
@@ -3559,16 +3635,16 @@ parole_player_init (ParolePlayer *player)
gtk_cell_layout_set_attributes( GTK_CELL_LAYOUT( player->priv->combobox_audiotrack ), cell, "text", 0, NULL );
g_signal_connect (player->priv->combobox_audiotrack, "changed",
- G_CALLBACK (parole_player_combo_box_audiotrack_changed_cb), player);
+ G_CALLBACK (parole_player_combo_box_audiotrack_changed_cb), player);
- /* Humanize and pack the Audio Track combobox */
+ // Humanize and pack the Audio Track combobox
audiotrack_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
audiotrack_label = gtk_label_new(_("Audio Track:"));
gtk_box_pack_start(GTK_BOX(audiotrack_box), audiotrack_label, FALSE, FALSE, 0);
gtk_box_pack_end(GTK_BOX(audiotrack_box), player->priv->combobox_audiotrack, FALSE, FALSE, 0);
gtk_container_add(GTK_CONTAINER(content_area), audiotrack_box);
- /* Initialize the Subtitles combobox */
+ // Initialize the Subtitles combobox
player->priv->liststore_subtitles = gtk_list_store_new(1, G_TYPE_STRING);
player->priv->combobox_subtitles = gtk_combo_box_new_with_model(GTK_TREE_MODEL(player->priv->liststore_subtitles));
player->priv->subtitle_list = NULL;
@@ -3578,15 +3654,16 @@ parole_player_init (ParolePlayer *player)
gtk_cell_layout_set_attributes( GTK_CELL_LAYOUT( player->priv->combobox_subtitles ), sub_cell, "text", 0, NULL );
g_signal_connect (player->priv->combobox_subtitles, "changed",
- G_CALLBACK (parole_player_combo_box_subtitles_changed_cb), player);
+ G_CALLBACK (parole_player_combo_box_subtitles_changed_cb), player);
- /* Humanize and pack the Subtitles combobox */
+ // Humanize and pack the Subtitles combobox
subtitle_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
subtitle_label = gtk_label_new(_("Subtitles:"));
gtk_box_pack_start(GTK_BOX(subtitle_box), subtitle_label, FALSE, FALSE, 0);
gtk_box_pack_end(GTK_BOX(subtitle_box), player->priv->combobox_subtitles, FALSE, FALSE, 0);
gtk_container_add(GTK_CONTAINER(content_area), subtitle_box);
+ // Add a close button to the Infobar
infobar_close = gtk_button_new_with_label(_("Close"));
close_icon = gtk_image_new_from_icon_name("gtk-close", GTK_ICON_SIZE_BUTTON);
gtk_button_set_image(GTK_BUTTON(infobar_close), close_icon);
@@ -3600,91 +3677,83 @@ parole_player_init (ParolePlayer *player)
player->priv->updated_subs = FALSE;
/* End Info Bar */
- g_object_get (G_OBJECT (player->priv->conf),
- "volume", &volume,
- NULL);
- gtk_scale_button_set_value (GTK_SCALE_BUTTON (player->priv->volume),
- (gdouble) (volume/100.));
+ #ifdef HAVE_CLUTTER
+ player->priv->use_clutter = g_strcmp0(videosink, "cluttersink") == 0;
+ if (player->priv->use_clutter)
+ {
+ GtkWidget *clutterbox;
+ GstElement *video_sink;
- /*
- * Pack the playlist.
- */
- gtk_notebook_append_page (GTK_NOTEBOOK (player->priv->playlist_nt),
- GTK_WIDGET (player->priv->list),
- gtk_label_new (_("Playlist")));
+ player->priv->clutter = parole_clutter_new(player->priv->conf);
+ clutterbox = parole_clutter_get_embed_widget(PAROLE_CLUTTER(player->priv->clutter));
- g_object_get (G_OBJECT (player->priv->conf),
- "showhide-playlist", &showhide,
- NULL);
+ gtk_box_pack_start (GTK_BOX (player->priv->videobox),
+ clutterbox,
+ TRUE, TRUE, 0);
- g_object_get (G_OBJECT (player->priv->conf),
- "window-width", &w,
- "window-height", &h,
- "window-maximized", &maximized,
- NULL);
+ video_sink = parole_gst_video_sink (PAROLE_GST(player->priv->gst));
+ parole_clutter_apply_texture (PAROLE_CLUTTER(player->priv->clutter), &video_sink);
- player->priv->last_w = w;
- player->priv->last_h = h;
+ gtk_widget_show (player->priv->clutter);
+ gtk_widget_grab_focus (player->priv->clutter);
+ }
+ else
+ {
+ gtk_box_pack_start (GTK_BOX (player->priv->videobox),
+ player->priv->gst,
+ TRUE, TRUE, 0);
- parole_player_set_playlist_visible(player, showhide);
- g_signal_connect(G_OBJECT(player->priv->showhide_playlist_menu_item), "activate", G_CALLBACK(parole_player_widget_activate_action), player->priv->toggle_playlist_action);
- g_signal_connect(G_OBJECT(player->priv->showhide_playlist_button), "clicked", G_CALLBACK(parole_player_widget_activate_action), player->priv->toggle_playlist_action);
+ gtk_widget_realize (player->priv->gst);
+ gtk_widget_show (player->priv->gst);
- gtk_window_set_default_size (GTK_WINDOW (player->priv->window), w, h);
- gtk_window_resize (GTK_WINDOW (player->priv->window), w, h);
- if (maximized)
- gtk_window_maximize(GTK_WINDOW (player->priv->window));
+ gtk_widget_grab_focus (player->priv->gst);
+ }
+ #else
+ gtk_box_pack_start (GTK_BOX (player->priv->videobox),
+ player->priv->gst,
+ TRUE, TRUE, 0);
- gtk_widget_show_all (player->priv->window);
+ gtk_widget_realize (player->priv->gst);
+ gtk_widget_show (player->priv->gst);
- parole_player_set_wm_opacity_hint (player->priv->window);
+ gtk_widget_grab_focus (player->priv->gst);
+ #endif
- g_object_get (G_OBJECT (player->priv->conf),
- "videosink", &videosink,
- NULL);
+ parole_gst_set_default_aspect_ratio (player, builder);
-#ifdef HAVE_CLUTTER
- player->priv->use_clutter = g_strcmp0(videosink, "cluttersink") == 0;
- if (player->priv->use_clutter)
- {
- GtkWidget *clutterbox;
- GstElement *video_sink;
+ /*
+ * Gst signals
+ */
+ g_signal_connect (G_OBJECT (player->priv->gst), "media-state",
+ G_CALLBACK (parole_player_media_state_cb), player);
- player->priv->clutter = parole_clutter_new(player->priv->conf);
- clutterbox = parole_clutter_get_embed_widget(PAROLE_CLUTTER(player->priv->clutter));
+ g_signal_connect (G_OBJECT (player->priv->gst), "media-progressed",
+ G_CALLBACK (parole_player_media_progressed_cb), player);
- gtk_box_pack_start (GTK_BOX (player->priv->videobox),
- clutterbox,
- TRUE, TRUE, 0);
+ g_signal_connect (G_OBJECT (player->priv->gst), "media-tag",
+ G_CALLBACK (parole_player_media_tag_cb), player);
- video_sink = parole_gst_video_sink (PAROLE_GST(player->priv->gst));
- parole_clutter_apply_texture (PAROLE_CLUTTER(player->priv->clutter), &video_sink);
+ g_signal_connect (G_OBJECT (player->priv->gst), "error",
+ G_CALLBACK (parole_player_error_cb), player);
- gtk_widget_show (player->priv->clutter);
- }
- else
- {
- gtk_box_pack_start (GTK_BOX (player->priv->videobox),
- player->priv->gst,
- TRUE, TRUE, 0);
+ g_signal_connect (G_OBJECT (player->priv->gst), "buffering",
+ G_CALLBACK (parole_player_buffering_cb), player);
- gtk_widget_realize (player->priv->gst);
- gtk_widget_show (player->priv->gst);
- }
-#else
- gtk_box_pack_start (GTK_BOX (player->priv->videobox),
- player->priv->gst,
- TRUE, TRUE, 0);
+ g_signal_connect (G_OBJECT (player->priv->gst), "dvd-chapter-count-change",
+ G_CALLBACK (parole_player_dvd_chapter_count_change_cb), player);
- gtk_widget_realize (player->priv->gst);
- gtk_widget_show (player->priv->gst);
-#endif
+ g_signal_connect (G_OBJECT (player->priv->gst), "dvd-chapter-change",
+ G_CALLBACK (parole_player_dvd_chapter_change_cb), player);
- g_signal_connect (G_OBJECT (parole_gst_get_stream (PAROLE_GST (player->priv->gst))), "notify::seekable",
- G_CALLBACK (parole_player_seekable_notify), player);
+ g_signal_connect (G_OBJECT (player->priv->gst), "notify::volume",
+ G_CALLBACK (parole_property_notify_cb_volume), player);
- parole_player_change_volume (player, (gdouble) (volume/100.));
+ g_signal_connect (G_OBJECT (parole_gst_get_stream (PAROLE_GST (player->priv->gst))), "notify::seekable",
+ G_CALLBACK (parole_player_seekable_notify), player);
+ /*
+ * Media List Signals
+ */
g_signal_connect (player->priv->list, "media_activated",
G_CALLBACK (parole_player_media_activated_cb), player);
@@ -3705,27 +3774,29 @@ parole_player_init (ParolePlayer *player)
*/
parole_media_list_load (player->priv->list);
- parole_gst_set_default_aspect_ratio (player, builder);
-
+ /*
+ * Connect remaining signals.
+ */
gtk_builder_connect_signals (builder, player);
-
g_object_unref (builder);
- /*
- * Set up multimedia keyboard buttons
- */
- #ifdef HAVE_XF86_KEYSYM
- player->priv->button = parole_button_new ();
- g_signal_connect (player->priv->button, "button-pressed",
- G_CALLBACK (parole_player_button_pressed_cb), player);
- #endif
+
+ /* Set up DBUS */
+ parole_player_dbus_init (player);
+
+ /* Finish preparing the window. */
g_signal_connect_swapped (player->priv->window, "notify::is-active",
- G_CALLBACK (parole_player_window_notify_is_active), player);
+ G_CALLBACK (parole_player_window_notify_is_active), player);
- gtk_widget_grab_focus (player->priv->gst);
+ gtk_window_set_default_size (GTK_WINDOW (player->priv->window), w, h);
+ gtk_window_resize (GTK_WINDOW (player->priv->window), w, h);
+ if (maximized)
+ gtk_window_maximize(GTK_WINDOW (player->priv->window));
- parole_player_dbus_init (player);
+ gtk_widget_show_all (player->priv->window);
+
+ parole_player_set_wm_opacity_hint (player->priv->window);
}
ParolePlayer *
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list