288
289
totem_embedded_error_and_exit (char *title, char *reason, TotemEmbedded *emb)
291
/* Avoid any more contacts, so drop off the bus */
292
if (emb->conn != NULL) {
293
dbus_g_connection_unregister_g_object(emb->conn, G_OBJECT (emb));
290
297
/* FIXME send a signal to the plugin with the error message instead! */
291
298
totem_interface_error_blocking (title, reason,
292
299
GTK_WINDOW (emb->window));
408
416
/* FIXME: stop previous content, or is that automatic ? */
410
if (emb->is_browser_stream)
413
uri = emb->current_uri;
418
if (emb->is_browser_stream) {
420
uri = g_strdup_printf ("fd://0?size=%"G_GINT64_FORMAT, emb->size);
422
uri = g_strdup ("fd://0");
424
uri = g_strdup (emb->current_uri);
416
428
g_set_error_literal (error,
428
440
bacon_video_widget_set_logo_mode (emb->bvw, FALSE);
430
442
retval = bacon_video_widget_open (emb->bvw, uri, emb->current_subtitle_uri, NULL);
431
445
/* FIXME we shouldn't even do that here */
433
447
totem_embedded_play (emb, NULL);
568
582
GList *uris = NULL;
569
583
GdkScreen *screen;
570
GAppLaunchContext *ctx;
584
GdkAppLaunchContext *ctx;
574
587
g_return_val_if_fail (embedded->app != NULL, FALSE);
576
589
if (embedded->type == TOTEM_PLUGIN_TYPE_NARROWSPACE
577
590
&& embedded->href_uri != NULL) {
578
591
uris = g_list_prepend (uris, embedded->href_uri);
579
uri = embedded->href_uri;
581
593
uris = g_list_prepend (uris, embedded->current_uri);
582
uri = embedded->current_uri;
585
ctx = G_APP_LAUNCH_CONTEXT (gdk_app_launch_context_new ());
596
ctx = gdk_display_get_app_launch_context (gtk_widget_get_display (embedded->window));
586
597
screen = gtk_widget_get_screen (embedded->window);
587
gdk_app_launch_context_set_screen (GDK_APP_LAUNCH_CONTEXT (ctx), screen);
589
gdk_app_launch_context_set_timestamp (GDK_APP_LAUNCH_CONTEXT (ctx), user_time);
590
gdk_app_launch_context_set_icon (GDK_APP_LAUNCH_CONTEXT (ctx), g_app_info_get_icon (embedded->app));
592
result = g_app_info_launch_uris (embedded->app, uris, ctx, NULL);
598
gdk_app_launch_context_set_screen (ctx, screen);
600
gdk_app_launch_context_set_timestamp (ctx, user_time);
601
gdk_app_launch_context_set_icon (ctx, g_app_info_get_icon (embedded->app));
603
result = g_app_info_launch_uris (embedded->app, uris, G_APP_LAUNCH_CONTEXT (ctx), NULL);
594
605
g_list_free (uris);
749
760
totem_fullscreen_set_fullscreen (emb->fs, FALSE);
750
761
gtk_widget_reparent (GTK_WIDGET (emb->bvw), container);
751
gtk_widget_hide_all (emb->fs_window);
762
gtk_widget_hide (emb->fs_window);
753
764
gtk_action_set_sensitive (fs_action, TRUE);
796
totem_embedded_set_time (TotemEmbedded *emb,
800
g_message ("totem_embedded_set_time: %"G_GUINT64_FORMAT, _time);
802
bacon_video_widget_seek_time (emb->bvw, _time, FALSE, NULL);
785
808
totem_embedded_open_uri (TotemEmbedded *emb,
787
810
const char *base_uri,
803
totem_embedded_open_stream (TotemEmbedded *emb,
805
const char *base_uri,
826
totem_embedded_setup_stream (TotemEmbedded *emb,
828
const char *base_uri,
808
g_message ("totem_embedded_open_stream called: uri %s, base_uri: %s", uri, base_uri);
831
g_message ("totem_embedded_setup_stream called: uri %s, base_uri: %s", uri, base_uri);
810
833
totem_embedded_clear_playlist (emb, NULL);
817
840
/* FIXME: consume any remaining input from stdin */
846
totem_embedded_open_stream (TotemEmbedded *emb,
850
g_message ("totem_embedded_open_stream called: with size %"G_GINT64_FORMAT, size);
819
854
return totem_embedded_open_internal (emb, TRUE, error);
875
910
g_message ("Seeking to %d seconds for starttime", plitem->starttime);
876
911
retval = bacon_video_widget_seek_time (emb->bvw,
877
912
plitem->starttime * 1000,
878
914
NULL /* FIXME */);
1202
1240
GtkTextDirection direction;
1203
1241
GtkAllocation allocation;
1205
gtk_widget_size_request (GTK_WIDGET (menu), &menu_req);
1243
gtk_widget_get_preferred_size (GTK_WIDGET (menu), NULL, &menu_req);
1207
1245
direction = gtk_widget_get_direction (widget);
1634
1672
static gboolean
1635
1673
on_seek_start (GtkWidget *widget, GdkEventButton *event, TotemEmbedded *emb)
1675
/* HACK: we want the behaviour you get with the middle button, so we
1676
* mangle the event. clicking with other buttons moves the slider in
1677
* step increments, clicking with the middle button moves the slider to
1678
* the location of the click.
1637
1682
emb->seeking = TRUE;
1638
1683
totem_time_label_set_seeking (TOTEM_TIME_LABEL (emb->fs->time_label),
1644
1689
static gboolean
1645
1690
cb_on_seek (GtkWidget *widget, GdkEventButton *event, TotemEmbedded *emb)
1692
/* HACK: see on_seek_start */
1647
1695
bacon_video_widget_seek (emb->bvw,
1648
1696
gtk_range_get_value (GTK_RANGE (widget)) / 65535, NULL);
1649
1697
totem_time_label_set_seeking (TOTEM_TIME_LABEL (emb->fs->time_label),
1669
1717
GtkAllocation *allocation,
1670
1718
BaconVideoWidget *bvw)
1672
bacon_video_widget_set_show_visuals (bvw, allocation->height > MINIMUM_VIDEO_SIZE);
1720
bacon_video_widget_set_show_visualizations (bvw, allocation->height > MINIMUM_VIDEO_SIZE);
1673
1721
g_signal_handlers_disconnect_by_func (controls, G_CALLBACK (video_widget_size_allocate_cb), NULL);
1690
1738
totem_embedded_handle_key_press (TotemEmbedded *emb, GdkEventKey *event)
1692
1740
switch (event->keyval) {
1741
case GDK_KEY_Escape:
1694
1742
if (totem_fullscreen_is_fullscreen (emb->fs) != FALSE)
1695
1743
totem_embedded_toggle_fullscreen (emb);
1700
1748
totem_embedded_toggle_fullscreen (emb);
1703
1751
on_play_pause (NULL, emb);
1706
1754
totem_embedded_action_volume_relative (emb, VOLUME_UP_OFFSET);
1709
1757
totem_embedded_action_volume_relative (emb, VOLUME_DOWN_OFFSET);
1720
1767
static gboolean
1897
1944
g_signal_connect (G_OBJECT (popup_button), "button-press-event",
1898
1945
G_CALLBACK (on_popup_button_button_pressed), emb);
1900
gc = gconf_client_get_default ();
1901
volume = ((double) gconf_client_get_int (gc, GCONF_PREFIX"/volume", NULL)) / 100.0;
1902
g_object_unref (G_OBJECT (gc));
1904
1947
emb->volume = GTK_WIDGET (gtk_builder_get_object (emb->xml, "volume_button"));
1905
1948
gtk_scale_button_set_adjustment (GTK_SCALE_BUTTON (emb->fs->volume),
1906
1949
gtk_scale_button_get_adjustment
1907
1950
(GTK_SCALE_BUTTON (emb->volume)));
1908
1951
gtk_button_set_focus_on_click (GTK_BUTTON (emb->volume), FALSE);
1909
gtk_scale_button_set_value (GTK_SCALE_BUTTON (emb->volume), volume);
1910
1952
g_signal_connect (G_OBJECT (emb->volume), "value-changed",
1911
1953
G_CALLBACK (cb_vol), emb);
1912
bacon_video_widget_set_volume (emb->bvw, volume);
1913
totem_embedded_volume_changed (emb, volume);
1915
1955
emb->statusbar = TOTEM_STATUSBAR (gtk_builder_get_object (emb->xml, "statusbar"));
1916
gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (emb->statusbar), FALSE);
1918
1957
if (!emb->hidden) {
1919
1958
gtk_widget_set_size_request (emb->window, width, height);
1920
1959
emb->scrsaver = totem_scrsaver_new ();
1960
g_object_set (emb->scrsaver,
1961
"reason", _("Playing a movie"),
1923
1965
#ifdef GNOME_ENABLE_DEBUG
1937
1979
/* Try to make controls smaller */
1939
GtkRcStyle *rcstyle;
1941
rcstyle = gtk_rc_style_new ();
1942
rcstyle->xthickness = rcstyle->ythickness = 0;
1944
gtk_widget_modify_style (emb->pp_button, rcstyle);
1946
child = GTK_WIDGET (gtk_builder_get_object (emb->xml, "time_hscale"));
1947
gtk_widget_modify_style (child, rcstyle);
1949
gtk_widget_modify_style (emb->volume, rcstyle);
1951
g_object_unref (rcstyle);
1981
GtkCssProvider *provider;
1983
GError *error = NULL;
1985
css_path = totem_interface_get_full_path ("mozilla-viewer.css");
1986
provider = gtk_css_provider_new ();
1987
gtk_css_provider_load_from_path (provider, css_path, &error);
1990
if (error != NULL) {
1991
/* Error loading the CSS */
1992
g_warning ("Couldn't load the CSS file '%s' for the browser plugin. The interface might not be styled correctly.", css_path);
1993
g_error_free (error);
1995
/* Success! Apply the styling to various widgets */
1996
GtkStyleContext *context;
1998
context = gtk_widget_get_style_context (emb->pp_button);
1999
gtk_style_context_add_provider (context, GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
2001
context = gtk_widget_get_style_context (GTK_WIDGET (gtk_builder_get_object (emb->xml, "time_hscale")));
2002
gtk_style_context_add_provider (context, GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
2004
context = gtk_widget_get_style_context (emb->volume);
2005
gtk_style_context_add_provider (context, GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
2008
g_object_unref (provider);
1954
2011
/* Create the cursor before setting the state */
2026
2083
embedded->width = width;
2027
2084
embedded->height = height;
2029
totem_embedded_construct (embedded, (GdkNativeWindow) window,
2086
totem_embedded_construct (embedded, (Window) window,
2030
2087
width, height);
2109
2166
g_file_delete (file, NULL, NULL);
2110
2167
g_object_unref (file);
2112
if (res != TOTEM_PL_PARSER_RESULT_SUCCESS) {
2113
//FIXME show a proper error message
2115
case TOTEM_PL_PARSER_RESULT_UNHANDLED:
2116
g_print ("url '%s' unhandled\n", emb->current_uri);
2118
case TOTEM_PL_PARSER_RESULT_ERROR:
2119
g_print ("error handling url '%s'\n", emb->current_uri);
2121
case TOTEM_PL_PARSER_RESULT_IGNORED:
2122
g_print ("ignored url '%s'\n", emb->current_uri);
2125
g_assert_not_reached ();
2169
/* FIXME: show a proper error message */
2171
case TOTEM_PL_PARSER_RESULT_SUCCESS:
2174
case TOTEM_PL_PARSER_RESULT_UNHANDLED:
2175
g_print ("url '%s' unhandled\n", emb->current_uri);
2177
case TOTEM_PL_PARSER_RESULT_ERROR:
2178
g_print ("error handling url '%s'\n", emb->current_uri);
2180
case TOTEM_PL_PARSER_RESULT_IGNORED:
2181
g_print ("ignored url '%s'\n", emb->current_uri);
2183
case TOTEM_PL_PARSER_RESULT_CANCELLED:
2184
g_print ("cancelled url '%s'\n", emb->current_uri);
2187
g_assert_not_reached ();
2130
2191
/* Check if we have anything in the playlist now */
2347
2410
emb->referrer_uri = arg_referrer;
2349
2412
/* FIXME: register this BEFORE requesting the service name? */
2350
dbus_g_connection_register_g_object
2351
(conn, TOTEM_PLUGIN_VIEWER_DBUS_PATH, G_OBJECT (emb));
2413
dbus_g_connection_register_g_object (conn,
2414
TOTEM_PLUGIN_VIEWER_DBUS_PATH,
2353
2418
/* If we're hidden, construct a hidden window;
2354
2419
* else wait to be plugged in.