$OpenBSD: patch-src_gui_c,v 1.33 2013/02/04 10:05:53 dcoppa Exp $

Fix some layout issues when playing audio only files
(upstream svn revision r2390)

Clean up some deprecated GTK2 calls in GTK3 mode
Clean up unused variable messages
Fix usage of symbolic icons
(upstream svn revisions r2357, r2363, r2364, r2381, r2383 and r2384)

Hide some items on the context menu, when not under plugin control
(upstream svn revision r2401)

Resize player when on 'videopresent' event
(upstream svn revision r2391)

Bugfix: subtitles not hidden by default when specified
(upstream svn revision r2397)

Fix some problems on initial volume setup
(upstream svn revision r2378)

Don't monitor system volume when running in softvol mode
(upstream svn revision r2377)

--- src/gui.c.orig	Fri Oct 26 19:22:31 2012
+++ src/gui.c	Mon Feb  4 10:46:36 2013
@@ -497,6 +497,7 @@ void adjust_layout()
     gint total_width;
     gint handle_size;
     GtkAllocation alloc = { 0 };
+    GtkAllocation alloc2 = { 0 };
 
     gm_log(verbose, G_LOG_LEVEL_DEBUG, "media size = %i x %i", non_fs_width, non_fs_height);
     total_height = non_fs_height;
@@ -543,7 +544,9 @@ void adjust_layout()
             //    gtk_main_iteration();
         }
         gmtk_get_allocation(media_hbox, &alloc);
+        gm_log(verbose, G_LOG_LEVEL_DEBUG, "media height = %i", alloc.height);
         total_height += alloc.height;
+        gm_log(verbose, G_LOG_LEVEL_DEBUG, "total_height = %i", total_height);
     } else {
         gtk_widget_hide(media_hbox);
     }
@@ -555,7 +558,9 @@ void adjust_layout()
             //return;
         }
         gmtk_get_allocation(details_vbox, &alloc);
+        gm_log(verbose, G_LOG_LEVEL_DEBUG, "detail height = %i", alloc.height);
         total_height += alloc.height;
+        gm_log(verbose, G_LOG_LEVEL_DEBUG, "total_height = %i", total_height);
     } else {
         gtk_widget_hide(details_vbox);
     }
@@ -589,7 +594,12 @@ void adjust_layout()
             //gtk_paned_set_position(GTK_PANED(pane), total_height);
             total_height += alloc.height + handle_size;
         } else {
-            total_width += alloc.width + handle_size;
+            if (gmtk_get_visible(media_hbox) && idledata->videopresent == FALSE) {
+                gmtk_get_allocation(media_hbox, &alloc2);
+                total_width = alloc2.width + handle_size + alloc.width;
+            } else {
+                total_width += handle_size + alloc.width;
+            }
         }
 
         if (non_fs_height == 0) {
@@ -616,15 +626,18 @@ void adjust_layout()
 
     if (!fullscreen) {
         if (!enable_global_menu) {
-            gm_log(verbose, G_LOG_LEVEL_DEBUG, "menubar = %i", alloc.height);
             gmtk_get_allocation(menubar, &alloc);
+            gm_log(verbose, G_LOG_LEVEL_DEBUG, "menubar = %i", alloc.height);
             total_height += alloc.height;
+            gm_log(verbose, G_LOG_LEVEL_DEBUG, "total_height = %i", total_height);
         }
     }
 
     if (showcontrols) {
         gmtk_get_allocation(controls_box, &alloc);
+        gm_log(verbose, G_LOG_LEVEL_DEBUG, "controls height = %i", alloc.height);
         total_height += alloc.height;
+        gm_log(verbose, G_LOG_LEVEL_DEBUG, "total_height = %i", total_height);
     }
     gm_log(verbose, G_LOG_LEVEL_DEBUG, "total = %i x %i video = %s", total_width, total_height,
            gm_bool_to_string(idledata->videopresent));
@@ -1182,13 +1195,20 @@ static const gchar *PLAYSTATE_to_string(const PLAYSTAT
 gboolean set_gui_state(void *data)
 {
     gchar *tip_text = NULL;
+#ifdef GTK3_ENABLED
+    GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
+#endif
 
     gm_log(verbose, G_LOG_LEVEL_MESSAGE, "setting gui state to %s", PLAYSTATE_to_string(guistate));
 
     if (lastguistate != guistate) {
         if (guistate == PLAYING) {
 #ifdef GTK3_ENABLED
-            gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-pause-symbolic", button_size);
+            if (gtk_icon_theme_has_icon(icon_theme, "media-playback-pause-symbolic")) {
+                gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-pause-symbolic", button_size);
+            } else {
+                gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PAUSE, button_size);
+            }
 #else
             gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PAUSE, button_size);
 #endif
@@ -1214,7 +1234,11 @@ gboolean set_gui_state(void *data)
 
         if (guistate == PAUSED) {
 #ifdef GTK3_ENABLED
-            gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-start-symbolic", button_size);
+            if (gtk_icon_theme_has_icon(icon_theme, "media-playback-start-symbolic")) {
+                gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-start-symbolic", button_size);
+            } else {
+                gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
+            }
 #else
             gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
 #endif
@@ -1239,7 +1263,11 @@ gboolean set_gui_state(void *data)
 
         if (guistate == STOPPED) {
 #ifdef GTK3_ENABLED
-            gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-start-symbolic", button_size);
+            if (gtk_icon_theme_has_icon(icon_theme, "media-playback-start-symbolic")) {
+                gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-start-symbolic", button_size);
+            } else {
+                gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
+            }
 #else
             gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
 #endif
@@ -1352,7 +1380,12 @@ void create_folder_progress_window()
     gtk_window_set_resizable(GTK_WINDOW(folder_progress_window), FALSE);
     gtk_widget_set_size_request(folder_progress_window, 400, -1);
 
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
+    vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
+    gtk_box_set_homogeneous(GTK_BOX(vbox), FALSE);
+#else
     vbox = gtk_vbox_new(FALSE, 10);
+#endif
     folder_progress_bar = gtk_progress_bar_new();
     gtk_progress_bar_set_pulse_step(GTK_PROGRESS_BAR(folder_progress_bar), 0.10);
     folder_progress_label = gtk_label_new("");
@@ -1360,7 +1393,11 @@ void create_folder_progress_window()
 
     cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
     g_signal_connect(G_OBJECT(cancel), "clicked", G_CALLBACK(cancel_clicked), NULL);
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
+    hbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
+#else
     hbox = gtk_hbutton_box_new();
+#endif
     gtk_button_box_set_layout(GTK_BUTTON_BOX(hbox), GTK_BUTTONBOX_END);
     gtk_container_add(GTK_CONTAINER(hbox), cancel);
 
@@ -1445,13 +1482,17 @@ gboolean resize_window(void *data)
     IdleData *idle = (IdleData *) data;
     GTimeVal currenttime;
     GValue resize_value = { 0 };
+    GValue shrink_value = { 0 };
 
     g_value_init(&resize_value, G_TYPE_BOOLEAN);
+    g_value_init(&shrink_value, G_TYPE_BOOLEAN);
 
     if (GTK_IS_WIDGET(window)) {
         if (idle->videopresent) {
             g_value_set_boolean(&resize_value, TRUE);
+            g_value_set_boolean(&shrink_value, TRUE);
             gtk_container_child_set_property(GTK_CONTAINER(pane), vbox, "resize", &resize_value);
+            gtk_container_child_set_property(GTK_CONTAINER(pane), vbox, "shrink", &shrink_value);
             gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_info), FALSE);
             g_get_current_time(&currenttime);
             last_movement_time = currenttime.tv_sec;
@@ -1508,7 +1549,9 @@ gboolean resize_window(void *data)
             // audio only file
 
             g_value_set_boolean(&resize_value, FALSE);
+            g_value_set_boolean(&shrink_value, FALSE);
             gtk_container_child_set_property(GTK_CONTAINER(pane), vbox, "resize", &resize_value);
+            gtk_container_child_set_property(GTK_CONTAINER(pane), vbox, "shrink", &shrink_value);
             non_fs_height = 0;
             non_fs_width = 0;
             gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_fullscreen), FALSE);
@@ -1633,6 +1676,18 @@ gboolean set_software_volume(gdouble * data)
     return FALSE;
 }
 
+gboolean hookup_volume(void *data)
+{
+    if (gm_audio_update_device(&audio_device)) {
+        if (softvol || audio_device.type == AUDIO_TYPE_SOFTVOL) {
+            gm_audio_set_server_volume_update_callback(&audio_device, NULL);
+        } else {
+            gm_audio_set_server_volume_update_callback(&audio_device, set_volume);
+        }
+    }
+    return FALSE;
+}
+
 gboolean set_volume(void *data)
 {
     IdleData *idle = (IdleData *) data;
@@ -2577,6 +2632,9 @@ gboolean play_callback(GtkWidget * widget, GdkEventExp
 gboolean stop_callback(GtkWidget * widget, GdkEventExpose * event, void *data)
 {
     IdleData *idle = (IdleData *) data;
+#ifdef GTK3_ENABLED
+    GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
+#endif
 
     if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PLAY ||
         gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PAUSE) {
@@ -2585,7 +2643,11 @@ gboolean stop_callback(GtkWidget * widget, GdkEventExp
         gmtk_media_tracker_set_percentage(tracker, 0.0);
         gtk_widget_set_sensitive(play_event_box, TRUE);
 #ifdef GTK3_ENABLED
-        gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-start-symbolic", button_size);
+        if (gtk_icon_theme_has_icon(icon_theme, "media-playback-start-symbolic")) {
+            gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-start-symbolic", button_size);
+        } else {
+            gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
+        }
 #else
         gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
 #endif
@@ -2599,7 +2661,11 @@ gboolean stop_callback(GtkWidget * widget, GdkEventExp
     if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_QUIT) {
         gmtk_media_tracker_set_percentage(tracker, 0.0);
 #ifdef GTK3_ENABLED
-        gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-start-symbolic", button_size);
+        if (gtk_icon_theme_has_icon(icon_theme, "media-playback-start-symbolic")) {
+            gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-start-symbolic", button_size);
+        } else {
+            gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
+        }
 #else
         gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
 #endif
@@ -2672,6 +2738,9 @@ gboolean prev_callback(GtkWidget * widget, GdkEventExp
     GtkTreePath *path;
     GtkTreeIter previter;
     GtkTreeIter localiter;
+#ifdef GTK3_ENABLED
+    GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
+#endif
 
     if (gtk_list_store_iter_is_valid(playliststore, &iter)) {
         if (gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_HAS_CHAPTERS)) {
@@ -2706,7 +2775,11 @@ gboolean prev_callback(GtkWidget * widget, GdkEventExp
             autopause = FALSE;
             gtk_widget_set_sensitive(play_event_box, TRUE);
 #ifdef GTK3_ENABLED
-            gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-start-symbolic", button_size);
+            if (gtk_icon_theme_has_icon(icon_theme, "media-playback-start-symbolic")) {
+                gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-start-symbolic", button_size);
+            } else {
+                gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
+            }
 #else
             gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
 #endif
@@ -2733,6 +2806,9 @@ gboolean next_callback(GtkWidget * widget, GdkEventExp
 {
     gboolean valid = FALSE;
     GtkTreePath *path;
+#ifdef GTK3_ENABLED
+    GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
+#endif
 
     if (gtk_list_store_iter_is_valid(playliststore, &iter)) {
         if (gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_HAS_CHAPTERS)) {
@@ -2756,7 +2832,11 @@ gboolean next_callback(GtkWidget * widget, GdkEventExp
             autopause = FALSE;
             gtk_widget_set_sensitive(play_event_box, TRUE);
 #ifdef GTK3_ENABLED
-            gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-start-symbolic", button_size);
+            if (gtk_icon_theme_has_icon(icon_theme, "media-playback-start-symbolic")) {
+                gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-start-symbolic", button_size);
+            } else {
+                gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
+            }
 #else
             gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
 #endif
@@ -3086,16 +3166,31 @@ void menuitem_open_location_callback(GtkMenuItem * men
 
     gtk_window_set_resizable(GTK_WINDOW(open_window), FALSE);
     gtk_window_set_title(GTK_WINDOW(open_window), _("Open Location"));
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
+    vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
+    gtk_box_set_homogeneous(GTK_BOX(vbox), FALSE);
+#else
     vbox = gtk_vbox_new(FALSE, 6);
+#endif
     label = gtk_label_new(_("Location:"));
     open_location = gtk_entry_new();
     gtk_entry_set_width_chars(GTK_ENTRY(open_location), 50);
     gtk_entry_set_activates_default(GTK_ENTRY(open_location), TRUE);
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
+    item_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
+    gtk_box_set_homogeneous(GTK_BOX(item_box), FALSE);
+#else
     item_box = gtk_hbox_new(FALSE, 6);
+#endif
     gtk_box_pack_start(GTK_BOX(item_box), label, FALSE, FALSE, 12);
     gtk_box_pack_end(GTK_BOX(item_box), open_location, TRUE, TRUE, 0);
 
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
+    button_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
+    gtk_box_set_homogeneous(GTK_BOX(button_box), FALSE);
+#else
     button_box = gtk_hbox_new(FALSE, 6);
+#endif
     cancel_button = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
     open_button = gtk_button_new_from_stock(GTK_STOCK_OPEN);
 #ifdef GTK2_22_ENABLED
@@ -4145,11 +4240,15 @@ void config_apply(GtkWidget * widget, void *data)
     audio_device.description = g_strdup(audio_device_name);
     gm_audio_update_device(&audio_device);
     gm_audio_get_volume(&audio_device);
-    gm_audio_set_server_volume_update_callback(&audio_device, set_volume);
+    if (softvol || audio_device.type == AUDIO_TYPE_SOFTVOL) {
+        gm_audio_set_server_volume_update_callback(&audio_device, NULL);
+        gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SOFTVOL, TRUE);
+    } else {
+        gm_audio_set_server_volume_update_callback(&audio_device, set_volume);
+        gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SOFTVOL, FALSE);
+    }
 
     gmtk_media_player_set_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_AO, audio_device.mplayer_ao);
-    gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SOFTVOL,
-                                            audio_device.type == AUDIO_TYPE_SOFTVOL);
 
 #ifdef HAVE_ASOUNDLIB
     if (audio_device.alsa_mixer != NULL) {
@@ -4625,7 +4724,12 @@ void menuitem_advanced_callback(GtkMenuItem * menuitem
     gtk_window_set_resizable(GTK_WINDOW(adv_window), FALSE);
     gtk_window_set_title(GTK_WINDOW(adv_window), _("Video Picture Adjustments"));
 
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
+    adv_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
+    gtk_box_set_homogeneous(GTK_BOX(adv_vbox), FALSE);
+#else
     adv_vbox = gtk_vbox_new(FALSE, 10);
+#endif
     adv_hbutton_box = gtk_hbutton_box_new();
     gtk_button_box_set_layout(GTK_BUTTON_BOX(adv_hbutton_box), GTK_BUTTONBOX_END);
     adv_table = gtk_table_new(20, 2, FALSE);
@@ -5110,14 +5214,54 @@ void menuitem_config_callback(GtkMenuItem * menuitem, 
     gtk_window_set_icon(GTK_WINDOW(config_window), pb_icon);
 
     gtk_window_set_resizable(GTK_WINDOW(config_window), FALSE);
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
+    conf_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
+    gtk_box_set_homogeneous(GTK_BOX(conf_vbox), FALSE);
+#else
     conf_vbox = gtk_vbox_new(FALSE, 10);
+#endif
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
+    conf_page1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
+    gtk_box_set_homogeneous(GTK_BOX(conf_page1), FALSE);
+#else
     conf_page1 = gtk_vbox_new(FALSE, 10);
+#endif
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
+    conf_page2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
+    gtk_box_set_homogeneous(GTK_BOX(conf_page2), FALSE);
+#else
     conf_page2 = gtk_vbox_new(FALSE, 10);
+#endif
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
+    conf_page3 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
+    gtk_box_set_homogeneous(GTK_BOX(conf_page3), FALSE);
+#else
     conf_page3 = gtk_vbox_new(FALSE, 10);
+#endif
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
+    conf_page4 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
+    gtk_box_set_homogeneous(GTK_BOX(conf_page4), FALSE);
+#else
     conf_page4 = gtk_vbox_new(FALSE, 10);
+#endif
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
+    conf_page5 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
+    gtk_box_set_homogeneous(GTK_BOX(conf_page5), FALSE);
+#else
     conf_page5 = gtk_vbox_new(FALSE, 10);
+#endif
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
+    conf_page6 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
+    gtk_box_set_homogeneous(GTK_BOX(conf_page6), FALSE);
+#else
     conf_page6 = gtk_vbox_new(FALSE, 10);
+#endif
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
+    conf_page7 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
+    gtk_box_set_homogeneous(GTK_BOX(conf_page7), FALSE);
+#else
     conf_page7 = gtk_vbox_new(FALSE, 10);
+#endif
     conf_hbutton_box = gtk_hbutton_box_new();
     gtk_button_box_set_layout(GTK_BUTTON_BOX(conf_hbutton_box), GTK_BUTTONBOX_END);
     conf_table = gtk_table_new(20, 2, FALSE);
@@ -6498,6 +6642,11 @@ void player_attribute_changed_callback(GmtkMediaTracke
         gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_angle), idledata->videopresent);
         gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_advanced), idledata->videopresent);
         gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_details), TRUE);
+        if (resize_on_new_media || idledata->videopresent == FALSE) {
+            if (idledata->width > 0 && idledata->height > 0)
+                idledata->videopresent = TRUE;
+            g_idle_add(resize_window, idledata);
+        }
         break;
     case ATTRIBUTE_AUDIO_TRACK:
         name = gmtk_media_player_get_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_AUDIO_TRACK);
@@ -6547,9 +6696,11 @@ void player_attribute_changed_callback(GmtkMediaTracke
 
         break;
     case ATTRIBUTE_SUB_VISIBLE:
-        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_subtitles),
-                                       gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media),
-                                                                               ATTRIBUTE_SUB_VISIBLE));
+        if (showsubtitles) {
+            gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_subtitles),
+                                           gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media),
+                                                                                   ATTRIBUTE_SUB_VISIBLE));
+        }
         break;
     case ATTRIBUTE_HAS_CHAPTERS:
         if (gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_HAS_CHAPTERS)
@@ -6718,6 +6869,9 @@ void player_media_state_changed_callback(GtkButton * b
     gchar *tip_text = NULL;
 #endif
     gchar *short_filename = NULL;
+#ifdef GTK3_ENABLED
+    GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
+#endif
 
     gm_log(verbose, G_LOG_LEVEL_MESSAGE, "in media state change with state = %s dontplaynext = %i",
            gmtk_media_state_to_string(media_state), dontplaynext);
@@ -6774,7 +6928,11 @@ void player_media_state_changed_callback(GtkButton * b
         // break purposely not put here, so gui is properly updated
     case MEDIA_STATE_STOP:
 #ifdef GTK3_ENABLED
-        gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-start-symbolic", button_size);
+        if (gtk_icon_theme_has_icon(icon_theme, "media-playback-start-symbolic")) {
+            gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-start-symbolic", button_size);
+        } else {
+            gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
+        }
 #else
         gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
 #endif
@@ -6810,7 +6968,11 @@ void player_media_state_changed_callback(GtkButton * b
         if (idledata->mapped_af_export == NULL)
             map_af_export_file(idledata);
 #ifdef GTK3_ENABLED
-        gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-pause-symbolic", button_size);
+        if (gtk_icon_theme_has_icon(icon_theme, "media-playback-pause-symbolic")) {
+            gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-pause-symbolic", button_size);
+        } else {
+            gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PAUSE, button_size);
+        }
 #else
         gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PAUSE, button_size);
 #endif
@@ -6837,6 +6999,7 @@ void player_media_state_changed_callback(GtkButton * b
         if (idledata->videopresent)
             dbus_disable_screensaver();
         gmtk_media_tracker_set_text(GMTK_MEDIA_TRACKER(tracker), _("Playing"));
+        gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUB_VISIBLE, showsubtitles);
         dbus_send_event("MediaPlaying", 0);
         g_idle_add(set_media_label, idledata);
         if (gmtk_media_player_get_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_TITLE) != NULL) {
@@ -6855,7 +7018,11 @@ void player_media_state_changed_callback(GtkButton * b
         break;
     case MEDIA_STATE_PAUSE:
 #ifdef GTK3_ENABLED
-        gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-start-symbolic", button_size);
+        if (gtk_icon_theme_has_icon(icon_theme, "media-playback-start-symbolic")) {
+            gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-start-symbolic", button_size);
+        } else {
+            gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
+        }
 #else
         gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
 #endif
@@ -7301,10 +7468,12 @@ GtkWidget *create_window(gint windowid)
     gtk_widget_show(GTK_WIDGET(menuitem_copyurl));
     menuitem_sep2 = GTK_MENU_ITEM(gtk_separator_menu_item_new());
     gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_sep2));
-    gtk_widget_show(GTK_WIDGET(menuitem_sep2));
+    if (control_id != 0)
+        gtk_widget_show(GTK_WIDGET(menuitem_sep2));
     menuitem_config = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_PREFERENCES, NULL));
     gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_config));
-    gtk_widget_show(GTK_WIDGET(menuitem_config));
+    if (control_id != 0)
+        gtk_widget_show(GTK_WIDGET(menuitem_config));
     menuitem_sep4 = GTK_MENU_ITEM(gtk_separator_menu_item_new());
     gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_sep4));
     menuitem_save = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_SAVE, accel_group));
@@ -7319,10 +7488,13 @@ GtkWidget *create_window(gint windowid)
 
     menuitem_sep3 = GTK_MENU_ITEM(gtk_separator_menu_item_new());
     gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_sep3));
-    gtk_widget_show(GTK_WIDGET(menuitem_sep3));
+    if (control_id != 0)
+        gtk_widget_show(GTK_WIDGET(menuitem_sep3));
     menuitem_quit = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, accel_group));
     gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_quit));
-    gtk_widget_show(GTK_WIDGET(menuitem_quit));
+    if (control_id != 0)
+        gtk_widget_show(GTK_WIDGET(menuitem_quit));
+
     g_signal_connect(G_OBJECT(menuitem_open), "activate", G_CALLBACK(menuitem_open_callback), NULL);
     g_signal_connect(G_OBJECT(menuitem_play), "activate", G_CALLBACK(menuitem_pause_callback), NULL);
     g_signal_connect(G_OBJECT(menuitem_stop), "activate", G_CALLBACK(menuitem_stop_callback), NULL);
@@ -7664,9 +7836,24 @@ GtkWidget *create_window(gint windowid)
     gtk_drag_dest_add_uri_targets(window);
     //Connect the signal for DnD
     g_signal_connect(G_OBJECT(window), "drag_data_received", G_CALLBACK(drop_callback), NULL);
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
+    vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+    gtk_box_set_homogeneous(GTK_BOX(vbox), FALSE);
+#else
     vbox = gtk_vbox_new(FALSE, 0);
+#endif
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
+    hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
+    gtk_box_set_homogeneous(GTK_BOX(hbox), FALSE);
+#else
     hbox = gtk_hbox_new(FALSE, 0);
+#endif
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
+    controls_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+    gtk_box_set_homogeneous(GTK_BOX(controls_box), FALSE);
+#else
     controls_box = gtk_vbox_new(FALSE, 0);
+#endif
     media = gmtk_media_player_new();
     g_signal_connect_swapped(G_OBJECT(media), "media_state_changed",
                              G_CALLBACK(player_media_state_changed_callback), NULL);
@@ -7682,10 +7869,20 @@ GtkWidget *create_window(gint windowid)
     media_label = gtk_label_new("");
     gtk_widget_set_size_request(media_label, 300, 100);
     gtk_label_set_ellipsize(GTK_LABEL(media_label), PANGO_ELLIPSIZE_END);
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
+    media_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10);
+    gtk_box_set_homogeneous(GTK_BOX(media_hbox), FALSE);
+#else
     media_hbox = gtk_hbox_new(FALSE, 10);
+#endif
     g_signal_connect(media_hbox, "show", G_CALLBACK(view_option_show_callback), NULL);
     g_signal_connect(media_hbox, "size_allocate", G_CALLBACK(view_option_size_allocate_callback), NULL);
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
+    details_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
+    gtk_box_set_homogeneous(GTK_BOX(details_vbox), FALSE);
+#else
     details_vbox = gtk_vbox_new(FALSE, 10);
+#endif
     details_table = gtk_table_new(20, 2, FALSE);
     g_signal_connect(details_vbox, "show", G_CALLBACK(view_option_show_callback), NULL);
     g_signal_connect(details_vbox, "size_allocate", G_CALLBACK(view_option_size_allocate_callback), NULL);
@@ -7717,7 +7914,12 @@ GtkWidget *create_window(gint windowid)
     g_signal_connect(plvbox, "size_allocate", G_CALLBACK(view_option_size_allocate_callback), NULL);
     //if (remember_loc)
     //      gtk_paned_set_position(GTK_PANED(pane),loc_panel_position);
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
+    vbox_master = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+    gtk_box_set_homogeneous(GTK_BOX(vbox_master), FALSE);
+#else
     vbox_master = gtk_vbox_new(FALSE, 0);
+#endif
     if (windowid == 0)
         gtk_box_pack_start(GTK_BOX(vbox_master), menubar, FALSE, FALSE, 0);
     gtk_widget_show(menubar);
@@ -7726,15 +7928,33 @@ GtkWidget *create_window(gint windowid)
     gtk_container_add(GTK_CONTAINER(window), vbox_master);
     icon_theme = gtk_icon_theme_get_default();
 #ifdef GTK3_ENABLED
-    image_play = gtk_image_new_from_icon_name("media-playback-start-symbolic", button_size);
-    image_stop = gtk_image_new_from_icon_name("media-playback-stop-symbolic", button_size);
-    image_pause = gtk_image_new_from_icon_name("media-playback-pause-symbolic", button_size);
-    image_ff = gtk_image_new_from_icon_name("media-seek-forward-symbolic", button_size);
-    image_rew = gtk_image_new_from_icon_name("media-seek-backward-symbolic", button_size);
-    image_prev = gtk_image_new_from_icon_name("media-skip-backward-symbolic", button_size);
-    image_next = gtk_image_new_from_icon_name("media-skip-forward-symbolic", button_size);
-    image_menu = gtk_image_new_from_icon_name("view-sidebar-symbolic", button_size);
-    image_fs = gtk_image_new_from_icon_name("view-fullscreen-symbolic", button_size);
+    if (gtk_icon_theme_has_icon(icon_theme, "media-playback-start-symbolic") &&
+        gtk_icon_theme_has_icon(icon_theme, "media-playback-stop-symbolic") &&
+        gtk_icon_theme_has_icon(icon_theme, "media-playback-pause-symbolic") &&
+        gtk_icon_theme_has_icon(icon_theme, "media-seek-forward-symbolic") &&
+        gtk_icon_theme_has_icon(icon_theme, "media-seek-backward-symbolic") &&
+        gtk_icon_theme_has_icon(icon_theme, "view-sidebar-symbolic") &&
+        gtk_icon_theme_has_icon(icon_theme, "view-fullscreen-symbolic")) {
+        image_play = gtk_image_new_from_icon_name("media-playback-start-symbolic", button_size);
+        image_stop = gtk_image_new_from_icon_name("media-playback-stop-symbolic", button_size);
+        image_pause = gtk_image_new_from_icon_name("media-playback-pause-symbolic", button_size);
+        image_ff = gtk_image_new_from_icon_name("media-seek-forward-symbolic", button_size);
+        image_rew = gtk_image_new_from_icon_name("media-seek-backward-symbolic", button_size);
+        image_prev = gtk_image_new_from_icon_name("media-skip-backward-symbolic", button_size);
+        image_next = gtk_image_new_from_icon_name("media-skip-forward-symbolic", button_size);
+        image_menu = gtk_image_new_from_icon_name("view-sidebar-symbolic", button_size);
+        image_fs = gtk_image_new_from_icon_name("view-fullscreen-symbolic", button_size);
+    } else {
+        image_play = gtk_image_new_from_stock(GTK_STOCK_MEDIA_PLAY, button_size);
+        image_stop = gtk_image_new_from_stock(GTK_STOCK_MEDIA_STOP, button_size);
+        image_pause = gtk_image_new_from_stock(GTK_STOCK_MEDIA_PAUSE, button_size);
+        image_ff = gtk_image_new_from_stock(GTK_STOCK_MEDIA_FORWARD, button_size);
+        image_rew = gtk_image_new_from_stock(GTK_STOCK_MEDIA_REWIND, button_size);
+        image_prev = gtk_image_new_from_stock(GTK_STOCK_MEDIA_PREVIOUS, button_size);
+        image_next = gtk_image_new_from_stock(GTK_STOCK_MEDIA_NEXT, button_size);
+        image_menu = gtk_image_new_from_stock(GTK_STOCK_INDEX, button_size);
+        image_fs = gtk_image_new_from_stock(GTK_STOCK_FULLSCREEN, button_size);
+    }
 #else
     image_play = gtk_image_new_from_stock(GTK_STOCK_MEDIA_PLAY, button_size);
     image_stop = gtk_image_new_from_stock(GTK_STOCK_MEDIA_STOP, button_size);
@@ -8390,6 +8610,10 @@ void show_fs_controls()
     GdkScreen *screen;
     GdkRectangle rect;
     GtkAllocation alloc;
+#ifdef GTK3_ENABLED
+    GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
+#endif
+
     if (fs_controls == NULL && fullscreen) {
         fs_controls = gtk_window_new(GTK_WINDOW_POPUP);
         gtk_widget_add_events(fs_controls, GDK_ENTER_NOTIFY_MASK);
@@ -8398,7 +8622,11 @@ void show_fs_controls()
         g_signal_connect(G_OBJECT(fs_controls), "leave_notify_event", G_CALLBACK(fs_controls_left), NULL);
         g_object_ref(hbox);
 #ifdef GTK3_ENABLED
-        gtk_image_set_from_icon_name(GTK_IMAGE(image_fs), "view-restore-symbolic", button_size);
+        if (gtk_icon_theme_has_icon(icon_theme, "view-restore-symbolic")) {
+            gtk_image_set_from_icon_name(GTK_IMAGE(image_fs), "view-restore-symbolic", button_size);
+        } else {
+            gtk_image_set_from_stock(GTK_IMAGE(image_fs), GTK_STOCK_LEAVE_FULLSCREEN, button_size);
+        }
 #else
         gtk_image_set_from_stock(GTK_IMAGE(image_fs), GTK_STOCK_LEAVE_FULLSCREEN, button_size);
 #endif
@@ -8428,11 +8656,18 @@ void show_fs_controls()
 
 void hide_fs_controls()
 {
+#ifdef GTK3_ENABLED
+    GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
+#endif
 
     if (fs_controls != NULL) {
         g_object_ref(hbox);
 #ifdef GTK3_ENABLED
-        gtk_image_set_from_icon_name(GTK_IMAGE(image_fs), "view-fullscreen-symbolic", button_size);
+        if (gtk_icon_theme_has_icon(icon_theme, "view-fullscreen-symbolic")) {
+            gtk_image_set_from_icon_name(GTK_IMAGE(image_fs), "view-fullscreen-symbolic", button_size);
+        } else {
+            gtk_image_set_from_stock(GTK_IMAGE(image_fs), GTK_STOCK_FULLSCREEN, button_size);
+        }
 #else
         gtk_image_set_from_stock(GTK_IMAGE(image_fs), GTK_STOCK_FULLSCREEN, button_size);
 #endif
