⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainapp.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    children_iter = GTK_MENU_SHELL(file_menu)->children;    while(children_iter)    {        child = (GtkWidget*)children_iter->data;        children_iter = g_list_next(children_iter);                if(g_object_get_data(G_OBJECT(child), "is_mru"))        {            gtk_container_remove(GTK_CONTAINER(file_menu), child);        }    }}static voidrecent_urls_menu_populate(HXMainWindow* window){    GtkWidget *separator;    GtkWidget *file_menu, *file_menu_item;    gint pos;    guint i;    GList *children;    GtkWidget *menu_item;    separator = glade_xml_get_widget(window->xml, "hmw_mru_separator");    g_return_if_fail(separator != NULL);    file_menu_item = glade_xml_get_widget(window->xml, "hmw_file_menu");    g_return_if_fail(file_menu_item != NULL);    file_menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(file_menu_item));    g_return_if_fail(file_menu != NULL);    children = GTK_MENU_SHELL(file_menu)->children;        pos = g_list_index(children, separator);    g_return_if_fail(pos >= 0);    pos++;    i = 0;    GList* iter = window->recent_urls_list;    while(iter && i < DEF_NUM_FILE_MENU_URLS)    {        // XXXNH: we really need to fix how we store recent urls to        // include the actual title of the clip. for now we'll just        // shorten the url                gchar* escaped_filename;        gchar* menu_item_text;         gchar* title;        gchar* url;        url = g_strdup((const char*)iter->data);        title = hxcommon_get_title_from_url(url);        escaped_filename = hxcommon_escape_underscores(title);        g_free(title);                menu_item_text = g_strdup_printf("_%d. %s", i+1, escaped_filename);        g_free(escaped_filename);                                    menu_item = gtk_menu_item_new_with_mnemonic(menu_item_text);        g_free(menu_item_text);        g_object_set_data(G_OBJECT(menu_item), "is_mru", (gpointer)TRUE);        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_from_menu_item), url);        g_object_set_data(G_OBJECT(menu_item), "url", url);                /* Free the g_strdup'd url from above on menu destruction */        g_signal_connect_swapped(G_OBJECT(menu_item), "destroy",                                 G_CALLBACK(g_free), url);                i++;        pos++;        iter = g_list_next(iter);    }    /* Only insert the extra separator if there are recent url's       in the file menu */    if(window->recent_urls_list)    {        menu_item = gtk_menu_item_new ();        g_object_set_data(G_OBJECT(menu_item), "is_mru", (gpointer)TRUE);        gtk_widget_show(GTK_WIDGET(menu_item));        gtk_widget_set_sensitive (menu_item, FALSE);        gtk_menu_shell_insert(GTK_MENU_SHELL(file_menu), menu_item, pos);    }}static voidrecent_urls_menu_refresh(HXMainWindow* window){    recent_urls_menu_unpopulate(window);    if(window->enable_recent_urls)    {        recent_urls_menu_populate(window);    }}static voidrecent_urls_add(HXMainWindow* window,                const gchar* url,                gboolean append){    gint len;    GList* last;    GList* pos;    GList* iter;    /* Check for duplicates */    iter = window->recent_urls_list;    while(iter)    {        if(strcmp(url, (gchar*)iter->data) == 0)        {            /* Already in our list */            return;        }                iter = g_list_next(iter);    }        len = g_list_length(window->recent_urls_list);    last = g_list_last(window->recent_urls_list);        while(len >= DEF_NUM_RECENT_URLS)    {        /* Remove old items from the end of the list until we have           the right number of urls */        pos = g_list_previous(last);        g_free(last->data);        window->recent_urls_list =            g_list_delete_link(window->recent_urls_list, last);        last = pos;        len--;    }    if(append)    {        window->recent_urls_list =            g_list_append(window->recent_urls_list,                          g_strdup(url));        }    else    {        window->recent_urls_list =            g_list_prepend(window->recent_urls_list,                           g_strdup(url));        }        /* Refresh the menu */    recent_urls_menu_refresh(window);}static voidpopulate_clip_list_menu(HXMainWindow* window){    GtkWidget* clip_list_menu_item;    GtkWidget* menu_item;    GtkWidget* clip_list_menu;    gchar* menu_item_text;    guint i;    guint group_count;    clip_list_menu_item = glade_xml_get_widget(window->xml, "hmw_clip_list_menu_item");    g_return_if_fail(clip_list_menu_item != NULL);    /* get rid of the old sub-menu */    gtk_menu_item_remove_submenu(GTK_MENU_ITEM(clip_list_menu_item));    group_count = hx_player_get_group_count(HX_PLAYER(window->player));    if(group_count == 0)    {        gtk_widget_set_sensitive(clip_list_menu_item, FALSE);    }    else    {        gtk_widget_set_sensitive(clip_list_menu_item, TRUE);        clip_list_menu = gtk_menu_new();        gtk_menu_item_set_submenu(GTK_MENU_ITEM(clip_list_menu_item), clip_list_menu);        for(i = 0; i < group_count; i++)        {            const gchar* group_title_raw = hx_player_get_group_title(HX_PLAYER(window->player), i);            gchar* group_title;            if(!group_title_raw)            {                group_title_raw = _("Untitled");            }                        if(group_title_raw)            {                group_title = g_strdup(group_title_raw);                if(strlen(group_title_raw) > MAX_GROUP_TITLE_LENGTH)                {                    group_title[MAX_GROUP_TITLE_LENGTH] = '\0';                }            }            gchar* escaped_group_title;            escaped_group_title = hxcommon_escape_underscores(group_title);            menu_item_text = g_strdup_printf("_%d. %s", i+1, escaped_group_title);            g_free(escaped_group_title);                        menu_item = gtk_menu_item_new_with_mnemonic(menu_item_text);            g_free(menu_item_text);            gtk_widget_show(GTK_WIDGET(menu_item));            gtk_menu_shell_append(GTK_MENU_SHELL(clip_list_menu), menu_item);                    g_signal_connect(G_OBJECT(menu_item), "activate",                             G_CALLBACK(hmw_play_group), (gpointer)i);                }    }}/* setup assistant helper functions */gboolean check_registered(){    gboolean bRegistered = FALSE;    HXEntry* entry = hx_prefs_get_entry(REGISTERED_PREF);    if (entry)    {	HXValue* value = hx_entry_get_value(entry);	if (atoi(hx_value_get_string(value)) != 0)	{	    bRegistered = TRUE;	}    }        return bRegistered;}gintshow_setup_assistant(HXMainWindow* window){    gint nResult = 0;    gchar* filename;    GladeXML* xml;        filename = hxcommon_locate_file("setup.glade");    xml = glade_xml_new (filename, NULL, NULL);    g_free(filename);    // XXXRGG: This will only work for the generated source glade build.    // Setup assistant has to be fixed to work with libglade.    GtkWidget* pSetupAssistant = GTK_WIDGET(xml);    g_return_val_if_fail(pSetupAssistant != NULL, -1);            if (pSetupAssistant)    {	nResult = 1;	gtk_widget_show(pSetupAssistant);	while (gtk_events_pending() || GTK_WIDGET_VISIBLE(pSetupAssistant))	    gtk_main_iteration();#ifdef HELIX_FEATURE_REAL_BRANDING // XXXNH: no EULA for helix player	if (!g_object_get_data(G_OBJECT(pSetupAssistant), "eula-accepted"))	{	    nResult = -1;	}#endif	if (nResult >= 0)	{	    HXValue* value = hx_value_new(HX_VALUE_STRING);	    hx_value_set_string(value, "1");	    hx_prefs_set_entry(REGISTERED_PREF, value);            hxcommon_save_preferences(window);        }    }    return nResult;}voidhxwindow_recent_urls_remove_all(HXMainWindow* window){    g_list_foreach(window->recent_urls_list, (GFunc)g_free, NULL);    g_list_free(window->recent_urls_list);    window->recent_urls_list = NULL;        recent_urls_menu_unpopulate(window);}voidhxwindow_recent_urls_hide(HXMainWindow* window){    recent_urls_menu_unpopulate(window);}voidhxwindow_recent_urls_show(HXMainWindow* window){        recent_urls_menu_unpopulate(window);    recent_urls_menu_populate(window);}voidhxwindow_recent_urls_prepend(HXMainWindow* window,                             const gchar* url){    recent_urls_add(window, url, FALSE);}voidhxwindow_recent_urls_append(HXMainWindow* window,                            const gchar* url){    recent_urls_add(window, url, TRUE);    }/* Favorites management implementation * =================================== */static voidfavorites_menu_unpopulate(HXMainWindow* window){    GtkWidget* separator;    GtkWidget* favorites_menu;    GtkWidget* child;    GtkWidget* menu_shell;    GList* children_iter;    gboolean remove_items = FALSE;    separator = glade_xml_get_widget(window->xml, "hmw_favorites_separator");    g_return_if_fail(separator != NULL);    favorites_menu = glade_xml_get_widget(window->xml, "hmw_favorites_menu");    g_return_if_fail(favorites_menu != NULL);    menu_shell = gtk_menu_item_get_submenu(GTK_MENU_ITEM(favorites_menu));    g_return_if_fail(menu_shell != NULL);    children_iter = GTK_MENU_SHELL(menu_shell)->children;    while(children_iter)    {        child = (GtkWidget*)children_iter->data;        children_iter = g_list_next(children_iter);                if(remove_items)        {            gtk_container_remove(GTK_CONTAINER(menu_shell), child);        }        if(child == separator)        {            remove_items = TRUE;        }    }}static voidfavorites_menu_populate(HXMainWindow* window){    GtkWidget* separator;    GtkWidget* favorites_menu;    gint pos;    GList* children;    GtkWidget* menu_item;    GtkWidget* menu_shell;    separator = glade_xml_get_widget(window->xml, "hmw_favorites_separator");    g_return_if_fail(separator != NULL);    favorites_menu = glade_xml_get_widget(window->xml, "hmw_favorites_menu");    g_return_if_fail(favorites_menu != NULL);    menu_shell = gtk_menu_item_get_submenu(GTK_MENU_ITEM(favorites_menu));    g_return_if_fail(menu_shell != NULL);    children = GTK_MENU_SHELL(menu_shell)->children;        pos = g_list_index(children, separator);    g_return_if_fail(pos >= 0);    pos++;    gint i = 0;    GList* iter = g_hx_main_app->favorites_list;    while(iter)    {        gchar* escaped_title;        gchar* menu_item_text;        gchar* url;        HXFavorite* favorite = (HXFavorite*)iter->data;                escaped_title = hxcommon_escape_underscores(favorite->title);        menu_item_text = g_strdup_printf("_%d. %s", i+1, escaped_title);        g_free(escaped_title);                                    menu_item = gtk_menu_item_new_with_mnemonic(menu_item_text);        g_free(menu_item_text);        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_from_menu_item), url);                /* Free the g_strdup'd url from above on menu destruction */        g_signal_connect_swapped(G_OBJECT(menu_item), "destroy",                                 G_CALLBACK(g_free), url);                i++;        pos++;        iter = g_list_next(iter);    }}static voidfavorites_menu_refresh(HXMainWindow* window){    favorites_menu_unpopulate(window);    favorites_menu_populate(window);}voidhxwindow_favorite_add(HXMainWindow* window,                      const gchar*  favorite_title,                      const gchar*  favorite_url){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -