[Player-cvs] app/gtk mainapp.cpp,1.55.2.13,1.55.2.14

[Player-cvs] app/gtk mainapp.cpp,1.55.2.13,1.55.2.14

rggammon at helixcommunity.org rggammon at helixcommunity.org
Fri Jul 23 10:53:03 PDT 2004


Update of /cvsroot/player/app/gtk
In directory cvs-new:/tmp/cvs-serv24737

Modified Files:
      Tag: bingo-beta
	mainapp.cpp 
Log Message:
merging back fix for 2723 and 2705


Index: mainapp.cpp
===================================================================
RCS file: /cvsroot/player/app/gtk/mainapp.cpp,v
retrieving revision 1.55.2.13
retrieving revision 1.55.2.14
diff -u -d -r1.55.2.13 -r1.55.2.14
--- mainapp.cpp	20 Jul 2004 17:05:27 -0000	1.55.2.13
+++ mainapp.cpp	23 Jul 2004 17:53:01 -0000	1.55.2.14
@@ -272,12 +272,21 @@
     GList* sign_in_preferences_list; 
 } HXMainApp;
 
+
+typedef enum {
+    PLAY_MENU_TYPE_FAVORITE = 0,
+    PLAY_MENU_TYPE_MRU
+} HXPlayMenuItemType;
+
+
 typedef struct
 {
     gint error_handler;
     gint play_handler;
 
-    GtkWidget* mru_item;
+    HXPlayMenuItemType type;
+    
+    GtkWidget* menu_item;
     HXMainWindow* window;
     gchar* url;
 } HXPlayRecentErrorHandler;
@@ -348,7 +357,7 @@
 void     hmw_on_top_never        (GtkWidget *widget);
 void     hmw_on_top_while_playing(GtkWidget *widget);
 void     hmw_on_top_always       (GtkWidget *widget);
-void     hmw_play_recent        (GtkWidget* widget,
+void     hmw_play_from_menu_item (GtkWidget* widget,
                                  gchar* url);
 void     hmw_play_group         (GtkWidget* widget,
                                  guint group);
@@ -501,8 +510,10 @@
         gtk_widget_show(GTK_WIDGET(menu_item));
         gtk_menu_shell_insert(GTK_MENU_SHELL(file_menu), menu_item, pos);
 
+        g_object_set_data(G_OBJECT(menu_item), "item_type", (gpointer) PLAY_MENU_TYPE_MRU);
+
         g_signal_connect(G_OBJECT(menu_item), "activate",
-                         G_CALLBACK(hmw_play_recent), url);
+                         G_CALLBACK(hmw_play_from_menu_item), url);
 
         g_object_set_data(G_OBJECT(menu_item), "url", url);
         
@@ -842,9 +853,11 @@
         gtk_widget_show(GTK_WIDGET(menu_item));
         gtk_menu_shell_insert(GTK_MENU_SHELL(menu_shell), menu_item, pos);
 
+        g_object_set_data(G_OBJECT(menu_item), "item_type", (gpointer) PLAY_MENU_TYPE_FAVORITE);
+        
         url = g_strdup(favorite->url);
         g_signal_connect(G_OBJECT(menu_item), "activate",
-                         G_CALLBACK(hmw_play_recent), url);
+                         G_CALLBACK(hmw_play_from_menu_item), url);
         
         /* Free the g_strdup'd url from above on menu destruction */
         g_signal_connect_swapped(G_OBJECT(menu_item), "destroy",
@@ -1520,35 +1533,40 @@
 void
 hxwindow_set_zoom(HXMainWindow* window, HXMainWindowZoomSize zoom)
 {
-    window->zoom = zoom;
-
-    if(window->is_fullscreened &&
-       (window->zoom == NORMAL_SIZE ||
-        window->zoom == DOUBLE_SIZE))
-    {
-        hxwindow_unfullscreen(window);
-    }
-    
-    switch(window->zoom)
+    if(window->zoom != zoom)
     {
-        case NORMAL_SIZE:
-            gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(window->normal_size_menu_item), TRUE);
-            gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(window->double_size_menu_item), FALSE);
-            break;
+        if(window->is_fullscreened &&
+           (zoom == NORMAL_SIZE ||
+            zoom == DOUBLE_SIZE))
+        {
+            window->zoom_on_unfullscreen = zoom;
+            hxwindow_unfullscreen(window);
+        }
+        else
+        {
+            window->zoom = zoom;
+            hxwindow_change_layout(window);
 
-        case DOUBLE_SIZE:
-            gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(window->normal_size_menu_item), FALSE);
-            gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(window->double_size_menu_item), TRUE);
-            break;
+            switch(window->zoom)
+            {
+                case NORMAL_SIZE:
+                    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(window->normal_size_menu_item), TRUE);
+                    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(window->double_size_menu_item), FALSE);
+                    break;
 
-        case CUSTOM_SIZE:
-        default:
-            gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(window->normal_size_menu_item), FALSE);
-            gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(window->double_size_menu_item), FALSE);
-            break;
-    }
+                case DOUBLE_SIZE:
+                    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(window->normal_size_menu_item), FALSE);
+                    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(window->double_size_menu_item), TRUE);
+                    break;
 
-    hxwindow_change_layout(window);
+                case CUSTOM_SIZE:
+                default:
+                    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(window->normal_size_menu_item), FALSE);
+                    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(window->double_size_menu_item), FALSE);
+                    break;
+            }
+        }
+    }
 }
 
 static void
@@ -2657,19 +2675,9 @@
     HXMainWindow* window = hxwindow_get_from_widget(widget);        
     is_normal_size = (window->zoom == NORMAL_SIZE);
     
-    if(active != is_normal_size)
+    if(active && !is_normal_size)
     {
-        if(window->is_fullscreened)
-        {
-            /* Exit fullscreen */
-            window->zoom_on_unfullscreen = NORMAL_SIZE;
-            hxwindow_unfullscreen (window);
-        }
-        else
-        {
-            window->zoom = NORMAL_SIZE;
-            hxwindow_change_layout(window);
-        }
+        hxwindow_set_zoom(window, NORMAL_SIZE);
     }
 }
 
@@ -2687,19 +2695,9 @@
     HXMainWindow* window = hxwindow_get_from_widget(widget);
     is_double_size = (window->zoom == DOUBLE_SIZE);
     
-    if(active != is_double_size)
+    if(active && !is_double_size)
     {
-        if(window->is_fullscreened)
-        {
-            /* Exit fullscreen */
-            window->zoom_on_unfullscreen = DOUBLE_SIZE;
-            hxwindow_unfullscreen (window);
-        }
-        else
-        {
-            window->zoom = DOUBLE_SIZE;
-            hxwindow_change_layout(window);
-        }
+        hxwindow_set_zoom(window, DOUBLE_SIZE);
     }        
 }
 
@@ -3507,6 +3505,9 @@
     {
         /* Can't go lower than 1, so hide the widget to make it 0. */
         gtk_widget_hide(window->hxbin);
+
+        window->custom_zoom_width = 0;
+        window->custom_zoom_height = 0;
     }
     else
     {        
@@ -3520,19 +3521,19 @@
         if(has_visual_content && (state == HX_CONTENT_STATE_PLAYING ||
                                   state == HX_CONTENT_STATE_PAUSED))
         {
-            /* The user is resizing us. If he happens to resize to normal
-               or double size, set the zoom appropriately. */
             hx_player_get_ideal_size(HX_PLAYER(window->player), &ideal_width, &ideal_height);
-    
-            if((ideal_width == allocation->width) &&
-               (ideal_height == allocation->height))
-            {
-                hxwindow_set_zoom(window, NORMAL_SIZE);
-            }
-            else if((2 * ideal_width == allocation->width) &&
-                    (2 * ideal_height == allocation->height))
+
+            gboolean is_normal_size = (ideal_width == allocation->width) && (ideal_height == allocation->height);
+            gboolean is_double_size = (2 * ideal_width == allocation->width) && (2 * ideal_height == allocation->height);
+            
+            if(is_normal_size || is_double_size)
             {
-                hxwindow_set_zoom(window, DOUBLE_SIZE);
+                /* It's possible for us to get an allocate from the idle resizer between a call
+                   to gtk_window_resize and the window actually being resized. Because of
+                   this, we don't call hxwindow_set_zoom here, as this would clobber the outstanding
+                   resize request. */
+                window->custom_zoom_width = allocation->width;
+                window->custom_zoom_height = allocation->height;
             }
             else
             {
@@ -3545,7 +3546,8 @@
 }
 
 static void
-play_recent_error_handler_success(HXPlayRecentErrorHandler* handler)
+play_recent_error_handler_success(GtkWidget* /* player */,
+                                  HXPlayRecentErrorHandler* handler)
 {
     /* Playback started successfully, clean up the handler */
     g_signal_handler_disconnect(G_OBJECT(handler->window->player),
@@ -3559,7 +3561,13 @@
 }
 
 static void
-play_recent_error_handler_failure(HXPlayRecentErrorHandler* handler)
+play_recent_error_handler_failure(GtkWidget* /* player        */,
+                                  guint      /* hx_code       */,
+                                  guint      /* user_code     */,
+                                  gchar*     /* error_string  */,
+                                  gchar*     /* user_string   */,
+                                  gchar*     /* more_info_url */,
+                                  HXPlayRecentErrorHandler* handler)
 {
     /* Playback failed, prompt the user re: removing the mru item */
 
@@ -3568,11 +3576,26 @@
     const gchar* url;
     const gchar* message = _(
         "The url %s was not able to play back.\n"
-        "Would you like to remove this url from your recently played items?"
+        "%s"
         );
+    const gchar* source_name = NULL;
     
     GtkWidget* dialog;
     HXMainWindow* window = handler->window;
+
+    switch(handler->type)
+    {
+        case PLAY_MENU_TYPE_FAVORITE:
+            source_name = _("Would you like to remove this url from your favorites?");
+            break;
+            
+        case PLAY_MENU_TYPE_MRU:
+            source_name = _("Would you like to remove this url from your recently played clips?");
+            break;
+
+        default:
+            g_assert_not_reached();
+    }
     
     g_return_if_fail(window != NULL);
 
@@ -3581,7 +3604,7 @@
     if(strcmp(url, handler->url) == 0)
     {                            
         /* Show warning */        
-        formatted_message = g_strdup_printf(message, url);
+        formatted_message = g_strdup_printf(message, url, source_name);
         
         dialog = gtk_message_dialog_new(GTK_WINDOW(window->window),
                                         GTK_DIALOG_MODAL,
@@ -3597,23 +3620,55 @@
         if(response == GTK_RESPONSE_YES)
         {
             /* Remove the item */
-            GList* iter = window->recent_urls_list;
-            while(iter)
-            {
-                gchar* cur;
-                cur = (gchar*) iter->data;
+            GList* iter;
 
-                if(strcmp(cur, url) == 0)
+            switch(handler->type)
+            {
+            case PLAY_MENU_TYPE_MRU:
+                iter = window->recent_urls_list;
+                while(iter)
                 {
-                    window->recent_urls_list =
-                        g_list_delete_link(window->recent_urls_list, iter);
-                    g_free(cur);
-                    break;
+                    gchar* cur;
+                    cur = (gchar*) iter->data;
+
+                    if(strcmp(cur, url) == 0)
+                    {
+                        window->recent_urls_list =
+                            g_list_delete_link(window->recent_urls_list, iter);
+                        g_free(cur);
+                        break;
+                    }
+            
+                    iter = g_list_next(iter);
                 }
+                recent_urls_menu_refresh(window);
+                break;
+                
+            case PLAY_MENU_TYPE_FAVORITE:
+                iter = g_hx_main_app->favorites_list;
+                while(iter)
+                {
+                    HXFavorite* favorite = (HXFavorite*)iter->data;
+                            
+                    if(strcmp(favorite->url, url) == 0)
+                    {
+                        g_hx_main_app->favorites_list =
+                            g_list_delete_link(g_hx_main_app->favorites_list, iter);
+
+                        hx_favorite_free(favorite);
+                        break;
+                    }
             
-                iter = g_list_next(iter);
+                    iter = g_list_next(iter);
+                }
+                favorites_menu_refresh(window);
+
+                break;
+
+            default:
+                g_assert_not_reached();
+                break;
             }
-            recent_urls_menu_refresh(window);
         }
     }
     
@@ -3629,7 +3684,7 @@
 }
 
 void
-hmw_play_recent(GtkWidget* widget, gchar* url)
+hmw_play_from_menu_item(GtkWidget* widget, gchar* url)
 {
     HXMainWindow* window = hxwindow_get_from_widget(widget);
 
@@ -3637,20 +3692,21 @@
        if there's an error loading it. */
     HXPlayRecentErrorHandler* handler = g_new0(HXPlayRecentErrorHandler, 1);
 
-    handler->mru_item = widget;
+    handler->menu_item = widget;
     handler->window = window;
     handler->url = g_strdup(url);
+    handler->type = (HXPlayMenuItemType) (int) g_object_get_data(G_OBJECT(widget), "item_type");
     handler->error_handler = 
-        g_signal_connect_swapped (HX_PLAYER(window->player),
-                                  "error",
-                                  G_CALLBACK(play_recent_error_handler_failure),
-                                  handler);
+        g_signal_connect_after (HX_PLAYER(window->player),
+                                "hxerror",
+                                G_CALLBACK(play_recent_error_handler_failure),
+                                handler);
                                    
     handler->play_handler = 
-        g_signal_connect_swapped (HX_PLAYER(window->player),
-                                  "play",
-                                  G_CALLBACK(play_recent_error_handler_success),
-                                  handler);    
+        g_signal_connect_after (HX_PLAYER(window->player),
+                                "play",
+                                G_CALLBACK(play_recent_error_handler_success),
+                                handler);    
     
     hxwindow_open(window, url);
 }




More information about the Player-cvs mailing list
 

Site Map   |   Terms of Use   |   Privacy Policy   |   Contact Us

Copyright © 1995-2007 RealNetworks, Inc. All rights reserved. RealNetworks and Helix are trademarks of RealNetworks.
All other trademarks or registered trademarks are the property of their respective holders.