[Player-cvs] app/gtk mainapp.cpp,1.55.2.13,1.55.2.14
rggammon at helixcommunity.org rggammon at helixcommunity.orgUpdate 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);
}